*E!@7h$fLB!NoneLogSpecialEventClientMessageMyLogBroadcastLocalizedMessageColor SmartCTFGameConsoleCommandReceiveLocalizedMessage GetTimeStampParseNotificationCheckZ DamageKillsEUTTeamGamePlus NotifyServerEUTDeathMatchPlusLogEventStringCore EUTSourceCalculateShotCountSetTextEngineSystemBroadcastMessageClientPlaySound CanPlaySoundCreateControlGetStaticBigFontSetFontGetBroadCastStringBotpack GetSmallFont MessagesSniperBot PlayerPawn SetHelpTextLogDateGetSmallestFontEUTripperTwoDigitStringPrePadPostBeginPlay SpectatorGetMediumFont DrawBigNumRockets EndSpreeLogInfractionflakPulseimpact _GetItemName GetYOffsetGameLog LoadTexturesTransMini SuperShockEnfTimershotComboHandlePickupQuery DecapitatedBio GetValue ResetVars GetBigFontCalculateRankingUTSTATSGetID BufferLog RedColor GameStartedDrawPlayerDataGetTime EUTReadyFlag shreddedUseDotAutoSS ShowBootsTournamentPlayer ShowTimeEUTDamageType FlagSpreadShowWeaponAccuracyShowFC ShowPing SetValue SetIDColor ShowLeader ShowTeamsGetMeterLength BlueColorStopLog RenderInfo GameEnded CyanColor CalcEndStatsScope SetMaxLengthGetMeterColorSetNumericOnlyAssembleStringEText GreenColor ShowBeacon AltEndGame DrawDigit ShowHelp LogGameEnd_GetTextureName ScoreKillMoveToVisibleDeathMatchPlus BronzeColorSortScoresRedCalculateDamageEndGameInitializeLoggingAltSetEndCamsProcessMultiKillsProcessExtendedSpreesBaseLog FlakDeathSortScoresBlue DrawFoot SortScores HUDSetupBroadcastRegularDeathMessagejoltedLogGameParametersSpecialIdentifyLoadCrosshairDrawTwoColorID GoldColorCalculateAccuracy DrawMain WhiteColor ParseFacePreCacheSounds EUTEventTickUWindow DrawHead ShowScores DrawEndGameDrawBigNumberPlayWinMessage HitSoundsClientGameEnded LoadSettingsGetStaticAReallySmallFont SilverColorLightCyanColorLocalizedMessage EUTWarning NotifyPlayer StartLog ShadeColor DarkRedColorDarkBlueColorSterilizeStringFuncA LogSpreeCreated LogCombo UsedMutatorsLogMutatorList_CaptureSound YellowColorUserDrawSpectatorsClearStoredPRI AddToTeamGetStaticSmallestFont DrawDataGetStaticSmallFontLogStandardInfoTraceIdentify DrawBeacon ValidateFace AddMutatorSetMessageDefaults GetAccuracy DrawAccuracyDrawEffeciency ResetScope DrawReticle FixPhysics GetTimeDigitTrigger DestroyedGetCurrentScope _HitSoundsBeginChangeDotColor ChangenLevel DrawColor GetStringClientReceiveKilled LoadMutators SetOrdersCTFGame DrawSprees LogStartup DrawInfo TeamGamePlusAssignGameBoolsUT_ShieldBelt UT_Jumpboots FindIndexPRI FindIndexPI GetClientIP KickPlayerDefendMessagingSpectator StartMatchLogoutRestartStringzapped GetItemNamebIsConsoleMessageInitGameReplicationInfoDrawIdentifyInfoGetLogFileName PickupQueryStatInfoClassServerInfoClassGameReplicationInfoClassHudHelperClassInitializeHudSettingsCriticalEvent Corroded SetDefaults ShowStatsDrawTeamCount ShowTeamInfo QuickJoin DebugLoad IsValidCoordNetCode NotifySpree FragsStringLogServerInfoDisplayProgressMessage ServerTravelLogMapParametersDrawContactInfos PreLoginBestPlayersText InitGameSuperShockRifle RocketDeathEventFire1Say GrenadeDeath PostRenderTraceDistanceTimeLimitStringBurnedFragGoalStringRemainingTimeStringElapsedTimeStringGameEndedStringContinueStringDrawCrossHair DrawStatusDropMessage DrawWeapons PreRender NetPriorityShowServerInfo AuthorStringMapTitleString LossString TimeString FPHString PlayerStringRipperAltDeath GetRulesSelElem PingString _SplashKills _MultiKills DeathsString_WeaponDamage SoundPackageAnnouncerLevelbNoFlockPawns bAntiTimerbReport bHitSoundsbCheckDefaults bLogModsbEnhancedSprees Suicided_EndStatsClass IpToCountryFellPulsed AddToBufferGibbedDrownedScroll ReduceDamage SpectateWeapon bShowIPSbEnhancedMessages CheckTimeTransKillMessage SimpleLog ThighPadsImpactKillMessage ComChecksEnforcerKillMessageBioKillMessageShockRifleKillMessage StateFourPulseGunKillMessageRipperKillMessage StateThreeMiniGunKillMessageFlakCannonKillMessageRocketLauncherKillMessageSniperRifleKillMessagePistonAerialKillBioAerialKillPistonAerialKillMiniAerialKillPulseAerialKillEnforcerAerialKillComboAerialKillTransAerialKillSuperAerialKillSniperAerialKillRocketsAerialKillFlakAerialKillRipper StateOne StateTwo CheckSpec GetModItemsClientActivate CheckTweaks CheckClient CheckAliveTransferRIData ClientCall OpenConsoleTransferModItems BlueTeamName RedTeamName GetNetAdj VerifySpecTransferGameDataSantitizeStringLogIPTBSetIPProcessBufferOtherEmptyBestCTFSlotRenderComplexMessageCalculateCapsEmptyBestTDMSlotEmptyBestDMSlotEmptyBestFPHSlot PreBeginPlay LogModItems sLogPass SendTimeVerifySpectatorRecieveGameData ParseSwitch CopyMessageSortRedScoresSortBlueScores DrawSpecs GetOffsetPlayerStatsTextDrawShadedBackSendTeamMessageDrawCurrentStatsGetEffeciency PreLoadData SortPlayersWorldToScreen DrawTeamDrawServerStats DrawNewScopeDrawGameStatsGetLastAccuracy SetGameInfo GetHugeFont CheckRestartIsLevelActiveVerifyHudType FontSizeAlternatePath SendHomeDrawPlayerStatsDrawPlayerSpreesSortScoresRed2SortScoresBlue2UMenuDisplayMessages SetEndCamsbComplexString bIsSpecial bIsUniqueParseKillMessage bFadeMessageDrawNextMessagePartYPosbCenter SortScores2 SetWindowAutoRecordSet DotXChangeLogKill DrawTitleAttack SetSizePos WindowTitleCreateRootWindowSetNumericFloatClose FindEntry ClientClass CloseUWindow DotYChangeRestartPlayer ExecSpec SetRange ExecPlayGetLookAndFeelTexture ColoredText ScopeChanged AdjustNetTeamSay!MutatorBroadcastLocalizedMessageIPOnlyMutateLogPlayerInfo LogTeamKillLogItemActivateAutoRecordHelpAutoRecordText NetAdjHelp NetAdjText DotYHelp DotYText DotXHelp DotXText DotGHelp DotGText DotBHelp DotBText DotRHelp DotRTextShowLeaderHelpShowLeaderTextShowBootsHelpShowBootsTextScopeSliderHelpScopeSliderTextHitSoundsHelpHitSoundsText UseDotHelp UseDotTextColoredTextHelpColoredTextTexthome ShowTBHelp ShotTBText AutoSSHelp AutoSSText ShowFCHelp ShowFCText ShowAccHelp ShowAccTextShowTeamsHelpShowTeamsText ShowPingHelpRegisterMessageMutator ShowPingText ShowTimeHelp ShowTimeTextLogItemDeactivate AdjustAim TraceShotAddDefaultInventoryLogPlayerDisconnectLogPlayerConnect LogPingsGetAbsoluteTimebAlwaysRelevant SpreesText StatInfoText CheatFlyingSetNewPlayerId LightType AddString BeforePaintNotifyPaintCreateTournamentFlagOpenSettingsWindowSpawned ShowWindowNewScopeTexturenLevelbShowFC LogSuicide bColoredText bShowTime bShowPingIsUdemoSpectator ShowConsoleLaunchUWindowResetWeaponData LogPickup SetupReticle StopDemoCheckForAutoRecorderCheckKeyBindings DotColorResetAmmoCountNetAdjustment ParseLoaddropped _StatInfo _AmmoCount _ShotCount _Accuracy _ShotData ScopeModeSendGlobalMessageDrawLeaderBoardsbCollideWorld GetMultiSkinTotalSavesTextTotalDeniedTextTotalFlagKillsTextTotalCoversTextTotalAssistsTextTotalSealsTextTotalGrabsText GetFontSizePlayerWaitingStoreStatData RemoteRoleRulesMenuTypeMaxMeterLength GetColorTextureHueEndKillingSpreeString2EndOwnageString2EndGodlikeString2EndUnStoppableString2EndDominatingString2EndRampageString2EndKillingSpreeStringEndOwnageStringEndGodlikeStringEndUnStoppableStringEndDominatingStringEndRampageStringAerialKillStringHolyShitKillStringLudcriousKillStringMegaKillString FlakMonkeyEnemyHasTheFlagYouHaveTheFlagSealed UltraCover CoverSpree FlagCoverGameWinningSave PlayersText FragsText NameText GameTypeTextSavedMOTD BlueCantCap RedCantCap TeamsUnevenBotTextStill LogGameStart VersionStr EUTServerFlagCoverHiddenDistanceFlagCoverVisibleDistanceFlagDeniedDistanceFlagSaveDistance SavesBonus DeniedBonus SealsBonus CoversBonus FlagKill AssistsBonus FlockPawnFlagCap _ReturnSoundDenied HatTrick DrawMOTD ComboWhore HeadHunter StatLogFileVersion bAlwaysTick VerifyTimeForceAutoTauntsCheckMouseSettingsGetPlayerPawnProcessCommandThisVerHitSoundFriendlySoundHitSoundSound SetGameSpeed OwnageSoundHolyShitKillSoundLudicriousKillSoundMonsterKillSoundFUltraKillSoundMultiKillSoundDoubleKillSound_ClientWeaponAccuracyOwnage _MultiKills2 _MultiKills1_KillingSpreeStats_IndividualCTFStats3_IndividualCTFStats2_IndividualCTFStats1_SmartCTFStats _Accuracy4 _Accuracy3 _Accuracy2 _Accuracy1MouseYSetting UTStatsLink EUTWindowEUTTeamSayMessagePlusEUTTeamGameSounds EUTTDMSBEUTTDMReplicationInfo EUTTDMHud EUTStatInfoEUTServerInfoEUTStringMessagePlusEUTSayMessagePlusEUTMutatorHelper EUTMutatorEUTMultiKillMessageEUTLockedMenuItemEUTHudSettingsWindowEUTHudSettingsEUTHudMessages EUTHudHelperExecuteEUTHitSoundMessageEUTGameReplicationInfo EUTGameLogEUTGameHelperEUTFramedWindow EUTEndStatsEUTDMSB EUTDMHudEUTDemoEnhancerEUTDeathMessagePlus EUTCTFSBEUTCTFRulesWindowEUTCTFRulesClient EUTCTFHudEUTClientReplicationEUTcc PlayerInfoUTMenu AddElementAddSortedElementDeleteElement bJumpBootsFlagsCapturedText InstaGibDMMultiKillStringTripleKillStringDoubleKillStringUltraKillStringMonsterKillStringServerInfoTextContactInfoText AdminText EMailText UnknownTextServerStatsTextFragsLoggedTextGamesHostedText VictimsTextGameStatsTextTopPlayersText AUTOTAUNT BestNameText BestFPHTextBestRecordSetText GrayColorGetStaticMediumFont PostLoginPostNetBeginPlay ScoreFlagDrawGameSynopsisPiChallengeTeamHUD SpreeSoundStaticSaveConfig FlagIcon CaptureSound BaseMutatorbTutorialGameUDamageMidDynamicLoadObject TeamIconbScoreTeamKillsMaxMinTimeMaxAllowedTeamsScale LocalLogDMMessageClass FlagBase CurrentIDTranslocatorTargetTeamScoreBoard bBehindViewPBoltCTFFlagUnrealCTFScoreboardS_Pawn WorldLog bBatchLocalLocalLogFileNameScoreBoardTypeNumSpectators bOverTime bGameEndedbCoopWeaponModeNextSwitchCountdownpflagGameEndedMessage PawnListNavigationPointListEngineVersionNetMode LevelAction bDropDetail DodgeDirMortarMessageMaleSuicideMessageSecond ReturnValue PurpleColorCrosshairColor WeaponScale StatusScale HUDScaleOpacity SpreadString RankStringMinuteHour ScoreTime numTaunts ChallengeHUDLadderInventoryG ResultSet StatusBelt StatusDoll NextMutator bDeleteMeRValuePlaybackActorScrollingMessageTextureTournamentWeapon DayOfWeekLoginMutatorDayMonthYear TimeSecondsBAddressVSChallengeBotInfoLightGreenColorOptionalObject StartMessage CountDown bTournamentbMultiWeaponStayEndStatsClassFemaleSuicideMessageRange FailCodeCrosshairCountTournamentGameInfoTournamentGameReplicationInfoChallengeCTFHUD RelatedPRI_1AmbientBrightnessBotReplicationInfo LastKillTimeUT_ShieldBeltEffect UT_GrenadeTranslocOutEffectTMale2 TFemale2 TFemale1TeamSayMessagePlussupershockbeam ReturnSound ShockBeamServerInfoTeam ServerInfo RocketMk2StringMessagePlusRedFlagOwnerLowGravTournamentScoreBoardKillingSpreeMessage GreenFlagbHome FontInfo EndStatsDeathMessagePlusCTFReplicationInfo CTFMessage2ChallengeVoicePackLocalMessagePlusCriticalEventPlusCriticalStringPlusVictimMessageTMale1 PlayerShadow FireAdjustSelectionWeight CTFMessage MultiLevel bAutoTauntTimeMessageClass bPowerPlayVal bRatedGame energymarkHolder TotalGames TotalFrags TotalDeaths TotalFlags BestPlayers BestFPHsBestRecordDate FlagList RealOrdersRealOrderGiverFPH Announcer dominatinggodlike killingspree multikillrampage ultrakill unstoppable bAltScoring bFirstBlood bNoviceModebFulfilledSpecial LastTauntEndTimeRatedGameLadderObj TeamPrefix BestTeamCaptureSound2CaptureSound3 BestBase BestFlagScorer TotalKillsOrdered ScoreStart bTimeDownMyFonts CanvasFontTGRIXL2YL2XL3YL3TempPRI(All) BlueFlag bReturnOnly GoldSkin2LastHitbHeld HudElements1 HUDWeaponsShortMessageQueue bTiedScore TutIconBlinkCrossHairTextures bForceScoresbHideAllWeapons bHideStatusbHideTeamInfo bHideFrags bHideHUD BaseColor HUDColorSolidHUDColorrankleadHitPosHitTime PickupTimeWeaponNameFadeMessageFadeTimeMessageFadeCountbDrawMessageAreabDrawFaceAreaFaceAreaOffsetMinFaceAreaOffset bShowInfo StatScale ChestAmount ThighAmountH1H2 DamageTime bChestArmor bShieldbelt bThighArmort bHasDoll BotOwnerTPOwnerDoll DollBeltSpread WeaponSlotBaseYBaseXWeapXWeapY AmmoScale WeaponOffset WeapScaleWeaponXTexXTexYXScale PickDiffXLength MessageClass TitleString ValueStringX1I_CaptI_DownI_Home IconAutoM IconMini IconPulse IconRazor IconASMDTapTimeshock IconRifle RReticleIconBio Icon8ball IconFlakFacepbolt0total UTRocket JuRocket1Module UTGrenadeATShockbm jenergy2 SShockbm jenergy3 TPEffectFontInfoClassMapTitleQuote FaceTexture FaceTeam FaceTime megakillUTServerAdminCTF ScriptTextTextSpree ListItemYL UTConsoleUTTeamRCWindowX2Y2ACDMPFloorLoci AutoRecorderbDebugPPControlStart LevelInfo GameInfojPitchMenuItemClassNameModListUMenuModMenuList MenuItem ZoneInfo MutatorListWModItemMods UMenuMenuBarUMenuModMenuItem UMenuModMenuUMenuRootWindow SkillTextXLUTIntroYSkillsinjuredLoadZInvisBelt_fx PlayerStartEMString BestArmorCurAbs ArmorAmountSkinsIdentifyTargetHUDIdentifyFadeTimeMOTDFadeOutTime WhiteFont DecorationPending nextPawn bCanSpectate bAutoShot bTeamBeaconbLeaderBeaconbScoreBoardEffbWarmupSwitchbUsesCustomWeapon bIpToCountrybUsesSpreeSounds bLevelSwitchbMatchStarted FilenamebClassInitializedSealsSpreeCountCoversSpreeCountHeadShotsCountClientHitSoundHeadHunterCountComboWhoreCountFlakMonkeyCountDumxRequestHitsoundsMouseYRefCountClientIdentifiedSetFOVTextureCounterTextureSwitchScrollersCount TimeOffsetPlayWaitMessageTotalDamageAmmountCurrentRankingCurrentTotalAccuracy BestRanking ArmorAmmountReasonClientCrosshair ClientPingEnforcerHitCountBioGunHitCountPulseGunHitCountRipperHitCountMiniGunHitCountFlakGunHitCountEightBallHitCountSniperRifleHitCountSuperShockRifleHitCountShockRifleHitCountCustomWeaponHitCountBestTDMRanking LeaderIDBestDMRankingRealTotalGameTimeTempYArg4Arg3Arg2myHUDScoring InstigatorVictimWeaponNameKillerWeaponNameHUDType KillerIDBasebDemoRecordingGameCustomWeaponKillMessageBestTDMPlayersBestDMPlayersIpToCountryTexturePackageNextbAdminPRIbWorld StartTimePlayerLocationbFoundbWaitingPlayer bIsSpectatorbFeigningDeathbIsABot PacketLossAerialKillCustom_EnforcerKillMessage_BioKillMessage_ShockRifleKillMessage_PulseGunKillMessage_RipperKillMessage_MiniGunKillMessage_FlakGunKillMessage_EightBallKillMessage_SniperRifleKillMessage_CustomeWeaponKillMessage_AerialKillBioGunMessage_AerialKillRipperMessage_AerialKillFlakGunMessage_AerialKillEightBallMessage_AerialKillSniperRifleMessage_AerialKillShockRifleMessage_AerialKillTranslocatorMessage_AerialKillComboMessage_AerialKillEnforcerMessage_AerialKillPulseGunMessage_AerialKillMiniGunMessage_AerialKillPistonMessage_AerialKillImpactMessage_AerialKillTransMessage_AerialKillCustomCustomWeaponNameStoredPlayerIP IPCTextureMessageOfTheDayClientCrosshairTextureTempXBioGunPlayerAccuracy1 bDestroyPlayerAccuracy2C InstaGibPlayerAccuracy3 TeamIndex CustomWeaponPlayerAccuracy4YOffset FlagGrabs FlagAssists BaseSeals FlagCovers FlagKills FlagDenied FlagSaves SmartStats PlayerCount FlagCapsIStats1XOffset FlagsDenied GameSavesIStats2MinutesIStats3Hours UltraKills MonsterKillsLudicriousKillsHolyShitKillsGRI MultiKills1GoalTeamScoreFriendlyFireScale MultiKills2NumBotsWeaponAccuracy TimeLimit FragLimitMegaKillSoundSize EndTrace IdentifyNameBurnedMessage FallMessageRedTeamScoresSoundBlueTeamScoresSoundRedTeamTakesTheLeadSoundBlueTeamTakesTheLeadSoundRedTeamIncreasesThierLeadSound BlueTeamIncreasesThierLeadSoundRedTeamDominatingSoundBlueTeamDominatingSound DeniedSoundFlakMonkeySoundHeadHunterSoundDrownedMessageWhickedSickSoundRedTeamIsTheWinnerSoundBlueTeamIsTheWinnerSoundFlawlessVictorySoundLastSecondSaveSoundHatTrickSoundCorrodedMessageIdentifyHealth ScrollersMyMutMyCRI MyPlayer bLogOncebTime bSpeedHackbILikeTheStickbMyMouseCantSee bCheckTweaks bAutoTauntsbTDMbCTFbDM bSpectatorbBasicTexturesLoaded SpecCounterGRIMode ServerTime InitialTimeMyTimeClientTimeStamp MouseSetting LockedMenu Stitches VersStringX AllowedMods BotChair MyMouseYFacePanBrightzHasFlagScore PlayerName PRIArray MOTDLine4MMLMMICon MOTDLine2 MOTDLine1 AdminEmail NumPlayers OldReticle GameClassSecondsItemMDExplodeMessageIdrv MaxTeamsbMLCVictimMinigun VelocityNavigationPointOffenseOpt bReadyToPlay bIsFemaleRate StartTrace PlaybackGRI FlakCannonhseabasaparamafaroasnaiammy LogFolderPlayerReplicationInfoDateStatLog HitNormal bGameStarted ComboCodeBuffer WaterZone WarmupTimePHPosKills Suicides TeamKills LastKill JoinTime bHasFlagbInstaws HitLocationMyIPKIDVIDServerTimeStampIndex bEndGame bDisconnectNowKLZNewPawnProgressColor bReconnectedProgressMessageN EfficiencyTTL TimeOnServer TeamInfo WeaponNameInfopidReplicationInfoKillerDesc EUT_SoundsA Eightball Double_Kill HolyShit_FKilling_SpreeLudicrousKillMonsterKill_F HitSound_FFlawless_victoryred_team_dominatingRed_Team_increases_their_leadred_team_is_the_winnerRed_Team_Scoresred_team_takes_leadblue_team_dominatingBlue_Team_increases_their_leadblue_team_is_the_winnerBlue_Team_ScoresBlue_Team_takes_the_lead ChildMessage FlackMonkeyRestartLast_Second_Save WhickedSick StatLinkP RelatedPRI_2 FlagDropper FlagToReturnlg bAltOvertime bExpandSpreeAKMS FlakKills ComboKills WarheadCountExpandedSpreeSwitch NumFlagGrabsLowGravityAerialKillAdjusterMsgLoopKillingSpreeSound RampageSoundDominatingSoundUnStoppableSound GodlikeSoundWarheadLocation bNetOwner ViewTarget ScoringTypebClientDemoNetFunc bDemoRequestbKickSpeedHack EventTypebEnhancedDeathMessages bShowScores bStatLinkbAlwaysRecordTourney bKickMinY bNoOverTimeEntrybNoDroppedFlags hitdamageMessageStringClipYb1Fireb2CollisionHeightNumMinYb3bCollideActorsTeams AltTeamColorDeltaIPFlakGun WeaponDamage DeltaTime MultiTime MultiKillsProgressTimeOut FlakTime SplashKills MaxArray MaxTries bCheckFaceGameReplicationInfoWL locationidAmmo Inventoryoid Viewport KillerZone FlagZone BrightnessCanvasFontFOV_FlagbUnevenNPselbPP_BotDamageAmmount Difficulty PlayerList ServerActorsLevel _StatLogitktmtbtActorPawnMeshLodMeshBitmapPlayerNetConnectionEndGameNotifyVSizeUSizebSuddenDeathOverTimeMutBestPaccHUDLocalizedMessage LoginActorb4b5CurrentLeaderScoresLog ItemNamePing TeamColor ReadyFlagEMHMyCTFMyTGPMyDMgLog MyServerInfoPlayerNetspeed PlayerHeld PlayerRIListPlayerVectorListPlayerLoginTimeSTbRecordTourneybDemoRequests bLogStarted bPauseJoinClientLoginDelay IllegalModsSoFunnyStillLaughing OglLoadBiassbSMT JoystickOptionsCRIGetPlayerNetworkAddress WaterTextureoAmbientSaturationbHighDetailModeMaxSpectatorsmsbAerialAerialKillMessage LifeSpanRT GameModeMCCode PlayerOwnerData ServerURLRequest WebServerUWeb DesiredWidthMenuBarbHiddentWLengthpWTIBestFixedAreaClassIconsDesiredHeight SliderWidthOffsetRoot bCreatedRootMouseXMouseYbLeaveOnscreen FireTexture MySmallFontRedPRIBluePRISpecPRI _FontInfo bPlayerMovedbQuickKeyEnable SpecColorSoundWinTop WinWidth CenterBoxX CenterBoxY TextureSize FillBoxX FillBoxY FillBoxX2 FillBoxY2DivWDivS MeterScale WinHeightDamageInstigatorInventoryGroupbAlwaysMouseLook DefaultFOV DesiredFOV aimerrorMapTitleQuoteStringTopSpanBotSpan LeftSpan RightSpanTopLeftCornerTopRightCornerBotLeftCornerBotRightCorner BoxFillBaseBoxFillColoredMeterPlayerDividerCountryBlueRedbLastNumRedNumBlueNumSpec NumTotalMySpotTeamLoopCount DrawLength TeamPingTeamPacketLossErrorPYMXMYZXZYFX MeterLen HueShifteff CanvasColorTitleConsole GameSpeed EditBoxWidthDeathMessageClass MaxLengthamPmmonRolebufdiv BlackTextureTag MaxPlayerscid WhiteTextureMap LifetimeClassMyPRI SwitchPRI FillBoxBaseFillBoxColoredPlayerYPackagepcConstWinLeftOrdPRIPAlignSAlignDAlignScoreXScoreYDeathXDeathYMTQ NumSpecs FloatingY RankLine ScoresLine KillsLine DeathsLineEffLine CapsLine AssistLine CoversLine GrabsLine SavesLine DeniedLine SealsLine FKillsLineIpLineAccLine ParentWindowAlignnextNavigationPoint DrawUpBevelDrawStretchedTextureDrawClippedTexture CreateWindowSetSizeGetPlayerOwnerBoxFillAutoSwitchPriorityUWindowLabelControl ServerNamebShortServerNameStartServerNameMax ServerNameY ServerNameXUWindowPulldownMenuExecuteSilentLogBatcherbLocalExecuteWorldLogBatcher TotalGrabs TotalSeals TotalAssists TotalCoversTotalFlagKills TotalDenied TotalSaves OrderedPRIbCheckKeyBindings bDebugLoad bWeaponFiredbScreenShotTaken bShowStatsbShowTeamInfobSetMessageDefaultsbCheckForAutoRecorder bDemoLoaded StageCount MouseYCountSniperFireAnim0SniperFireAnim1SniperFireAnim2SniperFireAnim3SniperFireAnim4SniperFireAnim5ScreenShotDelayDelayDataClearUWindowWindowWeaponDrawOffset ShotTotal DamageTotalCurrentAccuracyTapRate NewReticleNewScopeReticleUWindowDialogControlSDUWindowCheckboxUWindowRootWindowSCUWindowFramedWindowUWindowDialogClientWindow Effeciency StatInfo ReticleSize ReticleOutGetMapFileNameUWindowSmallButtonUWindowPulldownMenuItemFull ActorTimeNetTime FileFlush bLineOfSightvPawnDamageScalingOpenLogScreenUWindowScrollingDialogClient SmallFontSetPos DrawIcon TeamBackrtsbtsAccuracyOrEffeciency CanvasStyleHealth AccuracyBackYX DrawRectUWindowHSliderControl FovAngleLODBias CrossColorUWindowEditControl AnimFrameY1Y3xvyvzvRadiWindowConsoleupbMinSwitchsf_Scale Location bNoSmooth S_PlayerSkinStopbUnlitDig SoundVolumebFakeBackdrop bTransparentHH bInvisible HitSound Crosshair bShowTeams LocationNamebDot bShowCredits RelatedPRIbShowWeaponAccuracyDotXDotYFScope1Bump bIsPlayerFatness EndOfLife TextBufferObject ScaleGlow Function ScoreBoardState LocalMessageRotatorVectorStructGetNextIntDescStringMessageFWDemoRecSpectator iMutators eMutatorsbIsPawn LightEffectInvRemainingTimeEffects LightRadius ElapsedTimeTypeStep AmbientGlowStyle PlayerIP UnrealShare StrPropertycaRedPRI2 BluePRI2 OrderedPRI2 FloatingY2 ScaleOffset SpacerOffsetAvgLine EnforcerLineBioLineShockRifleLine PulseGunLine RipperLine MiniGunLine FlakGunLineEightBallLine SniperLine TotalsLineUltraKillLineMonsterKillLine LudKillLine HolyShitLineKillingSpreeLine RampageLineDominatingLineUnStoppableLine GodlikeLine OwnageLineHeadHunterLineFlakMonkeyLineComboWhoreLine BaseFill EUTHeadShotsk DamageTypeModeStart2 GameNamebZPEAccSniperHeadShotAccTeamPad AnimSequenceWarheadLauncher HomeBaseGameRI HudSettings FlagClass StoredPRI StoredGRI HudHelper RespawnTime minigun2EUTDemoEnhancerClassbStartMessagebUdemo RedTeamSize BlueTeamSize PreBaseEyeRedFlagCarrierLocationBlueFlagCarrierLocationLastEventMessage TimeBack PingBackAccuracyBackRifleAccuracyBackShock EUTElementsBadge AdminName SniperRifle BootChargesTimeX_PRI LogoSizebReturn PulseGun ShockRifleOrdersLightBrightness SoundRadiusHCDRS enforcerbAutoSSbUseColoredText bDrawDot bTeamBeaconsbLeaderHitSoundSoundS NetAdjPer AutoRecord DotPreviewDotPosXDotPosY ScopeOffsetScopeTexturePreview ScopeTextureInfo2Info3 PlayButton SpecButtonShowTimeEditor Translocator ReceiverShowPingEditorNextMessageMutator MOTDLine3ShowTeamsEditor KillCount DieCountShowAccEditor ZoneNameCR ShowFCEditorCurYCurX AutoSSEditorClipXH ShowTBEditorYStart StatLogFinalColoredTextEditor VoiceType EyeHeight UseDotEditorMsgTypeMsgTextHitSoundsEditorArg1MaxAmmoScopeSliderEditor AmmoAmount VictimIDShowBootsEditor AccuracybTempShowLeaderEditor ChecksumBaseEyeHeight DotREditor AdjustedAim SelectedItem DotBEditor ViewRotation bSpecialIcon DotGEditor AmmoType PlayerZone DotXEditor TalkTexturePendingWeapon DotYEditor PawnOwnerSender NetAdjEditor bChecked StatusIcon NetAdjHelperAutoRecordEditorDeaths PlayerID Preview1 Preview2 Preview3 Preview4 Preview5 PreviewDotcwclbwblScopeX PreColoredit _Control TeamNameGameEndedComments DrawScale bIsAnArmorComboWhoreSoundChargeNetUpdateFrequencyPhysicsStructProperty_HSHealthAmmountClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty DeathMessage BytePropertysecr>m;b  ::$6iV)r1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqR1Vs] AqRY`RAqRY`RAqRY`RAqRY`RAqRY`RAqRY`RAqR\…AqR\…AqR\…AqR\…AqR\…AqR\…AqRL $BT$@@rHL V>x:Y W uB=$:e1Vs] t{#Ut{#U{#U1Vs] {#U1Vs] =$:eoc )C@1C-%n-%ntttu[t{#Ut{#Uttt{#UtGoc )Cu[u[oc )Coc )Cu[{#Uu[@1Cu[u[{#Uoc )CV)oc )CV)V)V)V)V)V)V)V)V)V)V)u[oc )Coc )C]E oc )Coc )Coc )Coc )Coc )C@1Cl 02l 02V)t]E ttV)u[u[u[ГГГu[u[u[u[ttu[tV)t{#Uu[V)u[u[@1CtV)t{#UV)u[u[u[ГГГu[u[u[u[ttoc )Cttoc )Coc )Ctu[toc )Ctoc )Ctoc )Ct]E oc )C]E ]E ]E ]E ]E ]E ]E ]E ]E ]E ]E ]E ]E ]E ]E ]E t{#Uoc )Ctl 02l 02l 02l 02ttttttttl 02l 02oc )Coc )Coc )C@1C@1CV)V)V)-%n-%n-%n-%n@1C@1C@1C@1C-%n-%n!oc )Coc )CY X ]EUTt ]SourceN n>B_ J LU[ڇu[u[u[u[Z!Z!Z!Z!ZV)u[u[u[u[u[u[u[u[u[u[X'X'xxxxxxxxxxxu[u[V)u[V)u[u[xxxxxxxxxu[xxxxxxxxxxxxxxxxxxxu[xxxxxxxxxxu[xxxxxxxxxxxxxxxxxxxxxtttttԝXtu[X'tu[X'u[X'txxxu[u[xxxxxu[u[u[V)u[u[u[u[u[V)u[u[xxxxxxxxxu[u[xxxxxxxxu[u[Z!u[u[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxX'u[X'X'X'X'X'X'X'X'X'X'X'X'X'V)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)V)V)X'ѸBX'ѸBX'ѸBX'ѸBX'ѸBV)u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)v`+V)V)v`+V)V)v`+V)V)v`+V)V)v`+V)V)ͪV)V)ͪV)V)ͪV)V)ͪV)V)ͪV)V)ͪV)V)ͪV)V)ͪV)V)ͪV)V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)V)J$i(V)''''V)ͪV)V)ͪV)V)ͪV)V)o V!V)V)o V!V)V)V)V)tttttttxxxxt{#UxxxxxxflUxxxt{#Utxxt{#Utxt{#Uxxt{#Uu[R@GI&/xflUxxxxxxxxxflUxxxflUxxxu[{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#Ux{#Uu[{#U{#U{#UFz{#U{#U1xflUxxxflUxxxx{#Uxx{#Ux{#U{#UGxxxxxxxxxxxxxxu[xV)xxxxxu[xV)Z{#U{#Uu[{#U{#U{#UxflUxxu[u[u[u[u[x!flUl*dk*L*I*_*\*[*u*˓4c*J*a*FFFb*c*h>A4] n~QU[ڇu[u[R@Gu[R@Gu[/T2/T2/T2/T2/T2o | ih| ih~Q~Q~Qu[~Qu[~Qu[u[~Qu[~Qu[u[~Qu[~Qu[u[~Qu[~Qu[u[~Qu[~Qu[u[~Qu[~Qu[u[~Qu[~Qu[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[~Qu[~Qu[~Qu[~Qu[~Qu[u[~Qu[~Qu[~Qu[u[u[~Qu[~Qu[u[~Qu[~Qu[u[~Qu[~Qu[u[~Qu[~Qu['KJIGv _F U*E]BotPack.RReticleNLOd8<Y>za'f AqRU[mEx(T1C (\*e (W0Bht `v==P J$i(=xxxxxxxxxxxxxxxxxxxxxxxxxxxxaSb!INFpAD,C( S,kb[O y x(w=@7 6}Y`R}"#X'X'tttttt{#Ut{#Ut{#Ut{#Ut{#UV)t{#UV)t{#Uttttt{#Ut{#UtZtu[{#Uxxxxu[u[u[u[ttԝX& & & & & & & & ttttxxtxxtttxxtxxttͪ҅ttͪ҅ttͪ҅ttͪ҅ttͪ҅ttͪ҅tttttttttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX't{#Ut{#UttttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'txxt{#Utttttttt{#Ut{#UtV)tV)tV)tV)tV)tV)ttV)tttV)tV)V)ttV)ttV)ttttV)ttAqRAqRZZ{#U{#U{#UV){#U{#UAqRAqR{{{{{{AqRttttt{#Ut{#U@1C@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)ttt{#Ut{#UV)V)V)V)V)t{#UV)V)V)V)V)V)V)V)& & & & & & & & & & & & ГГГГГГГГГ=$:ettГГГГГГГГГГГГГГГГ=$:ettГtt{#Ut{#UV)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)t{#UV)V)V)V)V)V)t@1C@1C& @1C& tttttxxtV)V)ttt{#Ut{#UV)t{#UV)tttt{#UV)t{#UV)tV)ttV)u[V)V)V)ԝXV)V)V)V)V)V)V)V)V)tV)tV)V)tГГV)ГГttt{#Ut{#Uttt{#UL]ttt{#Ut{#UV)t{#UtV)t{#Uxxt{#Ut{#UV)t{#Uxxttt{#Ut{#UtZtu[{#Uxxxxu[u[u[u[tt@1C@1C& @1C& V)V)V)@1C@1C& @1C& V)@1C@1C& @1C& V)@1C@1C& @1C& t{#Utt{#Ut{#Uͪ҅tttt{#Ut{#Ut{#Utt{#Ut=$:ettt{#Ut{#Ut{#Ut{#Ut{#Ut{#Utt{#Ut{#Ut{#U@1C@1C& u[t{#UV)xxt{#Ut{#UV)V)@1C@1C& u[V)t{#UV)xxtttX'ttt{#Ut{#U@1C@1C& u[t{#UV)xxtV)V)t{#UV)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)c*#c*#c*#c*#c*#@1C=$:ec*#=$:ec*#@1C@1C@1Cc*#V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)ͪҖͪҖͪҖͪҖͪҖͪҖͪҖͪV)V)V)V)V)V)V)V)V)v`+v`+v`+v`+v`+V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)!rnAlzykjihgfeF" |]%k telefragged %o!] %o got smeared by %k's piston.A]*)%k riddled %o full of holes with the %w.B]/.%o drank a glass of %k's dripping green load.C]10%k inflicted mortal damage upon %o with the %w.E]#"%o ate %k's burning plasma death.F]21%k ripped a chunk of meat out of %o with the %w.H]/.%k's %w turned %o into a leaky piece of meat.I]%$%o was ripped to shreds by %k's %w.J]! %o was smacked down by %k's %w.K]$#%k put a bullet through %o's head.M]+*%k smacked %o out of the air with his %w.X]+*%k smacked %o out of the air with his %w.W]+*%k smacked %o out of the air with his %w.V]+*%k smacked %o out of the air with his %w.U]+*%k smacked %o out of the air with his %w.T]+*%k smacked %o out of the air with his %w.S]+*%k smacked %o out of the air with his %w.R]+*%k smacked %o out of the air with his %w.Q]+*%k smacked %o out of the air with his %w.P]+*%k smacked %o out of the air with his %w.O]+*%k smacked %o out of the air with his %w.N]+*%k smacked %o out of the air with his %w.d= EUT_Soundsf] Red Teame] Blue Teamh]x( J?H96a\…-%nX'X'tttttt{#Ut{#Utttt{#Ut{#Ut{#Ut{#Utt{#UZtu[u[u[u[ttԝX& & & & & & & & ttttxxtxxtttxxtxxttͪ҅ttͪ҅ttͪ҅ttͪ҅ttͪ҅ttͪ҅tttttttttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX't{#Ut{#UttttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'tttX'txxt{#Utttttttt{#Ut{#UtV)tV)tV)tV)tV)tV)ttV)tttV)tV)V)ttV)ttV)ttttV)tt{{{AqRAqRZZ{#U{#U{#U{#U{#U{#UV){#U{#U{{{AqRAqR{{{{{{AqRttttt{#Ut{#U@1C@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& V)@1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& @1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)@1C& V)V)ttt{#Ut{#UV)V)V)V)V)t{#UV)V)V)V)V)V)V)V)& & & & & & & & ГГГГГГГГГ=$:ettГГГГГГГГГГГГГГГГ=$:ettГtt{#Ut{#UV)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)t{#UV)V)V)V)V)V)t@1C@1C& @1C& tttttxxtV)V)ttt{#Utttt{#UV)t{#UV)tV)tt{#Ut{#UV)t{#UtV)u[V)V)V)ԝXV)V)V)V)V)V)V)V)V)tV)tV)V)tГГV)ГГttV)t{#UtV)t{#Uxx@1C@1C& @1C& V)V)V)@1C@1C& @1C& V)@1C@1C& @1C& V)@1C@1C& @1C& t{#Utt{#Ut{#Uͪ҅tttt{#Utt{#Ut=$:et{#Ut{#U@1C@1C& u[t{#UV)xxt{#Ut{#UV)V)@1C@1C& u[V)t{#UV)xxtttX'ttt{#Ut{#U@1C@1C& u[t{#UV)xxtV)V)t{#UV)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)t{#UV)c*#c*#c*#c*#c*#@1C=$:ec*#=$:ec*#@1C@1C@1Cc*#V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)ͪҖͪҖͪҖͪҖͪҖͪҖͪҖͪV)V)V)V)V)V)V)V)V)v`+v`+v`+v`+v`+V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)!rnAlzykjihgfeF" |]%k telefragged %o!] %o got smeared by %k's piston.A]*)%k riddled %o full of holes with the %w.B]/.%o drank a glass of %k's dripping green load.C]10%k inflicted mortal damage upon %o with the %w.E]#"%o ate %k's burning plasma death.F]21%k ripped a chunk of meat out of %o with the %w.H]/.%k's %w turned %o into a leaky piece of meat.I]%$%o was ripped to shreds by %k's %w.J]! %o was smacked down by %k's %w.K]$#%k put a bullet through %o's head.M]+*%k smacked %o out of the air with his %w.X]+*%k smacked %o out of the air with his %w.W]+*%k smacked %o out of the air with his %w.V]+*%k smacked %o out of the air with his %w.U]+*%k smacked %o out of the air with his %w.T]+*%k smacked %o out of the air with his %w.S]+*%k smacked %o out of the air with his %w.R]+*%k smacked %o out of the air with his %w.Q]+*%k smacked %o out of the air with his %w.P]+*%k smacked %o out of the air with his %w.O]+*%k smacked %o out of the air with his %w.N]+*%k smacked %o out of the air with his %w.d= EUT_Soundsha_ r Y.VM3n8c6A~( {+Pk C8K$P'G!WX+Q WeY"FP kNH1T*_i [ ( @`m( Z+IKl ne@s@Y( RY[(  k>D<^ 2 K\=={#U{#U{#U{#U{#U{#U{#UJ*l*c*k*T ]TEAMS ARE UNEVENS ]Red Should Not Cap The Flag.R ]Blue Should Not Cap The Flag.@ ]This is just TOO EASY forg ] DENIED!P ] Saved ByK ]Game Winning Save!k ] HeadHunter!J ]defended the flag carrier!I ]is on a cover spree!H ]got a multi cover!G ]is sealing off the base!h ]got a Hat Trick!F ]$#You have the flag, return to base!E ]&%The enemy has your flag, recover it!D ] Flak Monkey!j ] Combo Whore!l]Please Wait to be VerifiedT"_`aSbH*d$DCeJ ^ b(M zz)p\L @@ R&@@wjU kAI!@@lvAb2O@F B^=`4M 9c*#D=$:e-%n-%n@1C}"#}"#t{#Utu[t{#U@1Cttt{#Ut@1Ctt{#Ut{#Utt{#U@1Ct{#U=$:e88m ]0.4.2i fD _Q \\ `B?N=h 6i m!':!~Q~Qu[{#Uu[u[u[Lu[u[Lu[u[u[u[u[u[V)u[u[u[u[u[LLL~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Qu[u[u[Lu[LLLLu[tt{#UxflUxxx~QxLxLxLxxxxxxxxu[u[V)V)xxxflUxxxu[ZZZZu[u[xxu[xu[u[V)V)u[xxV)V)xxxxxxxxxxZ!xxxxxxx{#UxflUx{#UxxxxxxxxxxxflUxxxxtttV)tt{#Uxxxxxxxxx~Qxx~Qx~Q~QxxxxxxxxttxX'xxxxX'xxxxX'xxX'X'xxxttX'xxxxxxxtГГtX'X'X'ttX'X'X'X'ГtxxxxxxxxxxxX'xX'xxxxxxxxX'xxxX'ѸBX'ѸBxtГГГГГГГГГГxxxxxL]L]xxxtxxxxxxxxxxxxxxxxxxxxxxxxxxxxtxxxtxxxxtxxxxxxxxu[u[{#UV)t{#Ux~Qxxxu[V)u[{#Uxxu[xu[{#Uu[{#Uxu[{#Uxxx~Qxxx~QxxLu[xxxxLxxx~Qxxx~Q~Q~Q~Qxxxxu[L~QLL~QLLxu[u[u[u[u[u[u[u[u[u[{#Uu[Zu[{#UtttttLu[ttt~QV)t{#UV)LtL~QtL~QtttttttttttttttLxtu[LL~Q~Q~QLLLu[LLxxLLLxxLu[LLu[{#Uu[LV)u[{#UV)u[{#UV)u[{#ULf5mLLLLV)V)V)CsV)Csu[u[V)Csu[u[u[u[u[u[u[Zu[{#Uttttt{#Utu[u[u[u[u[u[u[u[V)V)V)LLV)LV)V)LV)LV)LV)LV)LV)LV)LV)LV)LV)LV)LV)~QLLV)LV)V)L~QLV)V)L~QV)V)V)V)V)V)V)u[{#Uu[~QLLu[{#Uu[V)~Qu[ZLLu[LL~QLu[u[LLLLV)~Q~Q~Qu[u[Zu[mffiJ*gF u S>Z3X Ioc )CU[ڇu[u[u[{#U uB uB uB uB uB uB uB uB uB]E u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[@1CZu[ uB uBu[u[u[{#U uB uB uB uB uB uB uB uB uB uB uB uB uB uB uB@1Cu[u[ uB uB@1Cu[u[ uB uB@1Cu[u[@1C uB-%ntt{#Utt{#U@1C uB uB uB uBu[ uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB@1C uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB1Vs]  uB uB uB uB uB uB uB uB uB uB uB@1C uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uBY`R uB uB uB uB uB uB uB uB uB uB uB@1C uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB\… uB uB uB uB uB uB uB uB uB uBCCCCCщCCCCщ@1C=$:e=$:eC=$:eC=$:e=$:e uB uB uBԝX uB@1C@1C@1C@1C@1C@1C@1C@1C@1C@1C uB uB uB@1C uB uB uB1Vs]  uB uB@1C@1C uB uB uBY`R uB uB@1C@1C@1C uB uB uB\… uB uB uB uB uBq J^G[?q6n 6c t)Edž~Q~Qu[{#Uu[u[u[Lu[u[Lu[u[u[u[u[u[V)u[u[u[u[u[LLL~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Qu[u[u[Lu[LLLLu[u[u[V)V)xxxflUxxxu[ZZZZu[u[xxu[xu[u[V)V)u[xxV)V)xxxxxxxxxxZ!xxxxxxxxt{#U{#U{#UxflUxtxxxxxxxxxxxflUxx{#Ux{#UtttV)tt{#Uxxxxxxxxx~Qxx~Qx~Q~QxxxxxxxxttxX'xxxxX'xxxxX'xxX'X'xxxttX'xxxxxxxtГГtX'X'X'ttX'X'X'X'ГtxxxxxxxxxxxX'xX'xxxxxxxxX'xxxX'ѸBX'ѸBxxxxxxx~Q~Q{#U{#U{#U{#UElElElElElEltГГГГГГГГГГxxxxxL]L]xxxtxxxxxxxxxxxxxxxxxxxxxxxxxxxxtxxxtxxxxtxxxxxxxxu[u[{#UV)t{#Ux~Qxxxu[V)u[{#Uxxu[xu[{#Uu[{#Uxu[{#Uxxx~Qxxx~QxxLu[xxxxLxxx~Qxxx~Q~Q~Q~Qxxxxu[~QLL~Qu[L~QLL~QLLxu[u[u[u[u[u[u[u[u[u[{#Uu[Zu[{#Utttttt{#Uu[{#ULu[tttL~QtL~Qtt{#Uu[{#Uu[Lttt~QV)LtL~QtL~QtttttttttttttttLu[~QLu[Zu[Z{#U{#UGxxxflUxx{#Uxx{#U{#UFz{#U{#U1xx{#U{#UFz{#U{#U1x{#Uxxx{#U{#Uu[{#U{#Uxxxxxxxxxxxu[Lxxu[rxj\xj\t{#Uj\xj\xxtu[LL~Q~Q~QLLLu[LLxxLLLxxLu[LLu[{#Uu[LV)u[{#UV)u[{#UV)u[{#Uu[LLLLf5mLLLLV)V)V)CsV)Csu[u[V)Csu[u[u[u[u[u[u[Zu[{#Uttttt{#Utu[u[u[u[u[u[u[u[V)V)V)LLV)LV)V)LV)LV)LV)LV)LV)LV)LV)LV)LV)LV)LV)~QLLV)LV)V)L~QLV)V)L~QV)V)V)V)V)V)V)u[{#Uu[u[rr~Qt{#Ut{#UGu[j\u[LLu[{#Uu[V)~Qu[ZLLu[LL~QLu[u[LLLLV)~Q~Q~Qu[u[Zu[mffi_*J*gF P8`b ~=J:S 6c y~Q~Qu[{#Uu[u[u[Lu[u[Lu[u[u[u[u[u[V)u[u[u[u[u[LLL~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Qu[u[u[Lu[LLLLu[u[u[V)V)xxxflUxxxu[ZZZZu[u[xxu[xu[u[V)V)u[xxV)V)xxxxxxxxxxZ!xxxxxxxxt{#U{#U{#UxflUxtxxxxxxxxxxxflUxx{#Ux{#UtttV)tt{#Uxxxxxxxxx~Qxx~Qx~Q~QxxxxxxxxttxX'xxxxX'xxxxX'xxX'X'xxxttX'xxxxxxxtГГtX'X'X'ttX'X'X'X'ГtxxxxxxxxxxxX'xX'xxxxxxxxX'xxxX'ѸBX'ѸBxxflUxxxxxxxxxxxxxx~Q~Q{#U{#U{#U{#UElElElElElEltГГГГГГГГГГxxxxxL]L]xxxtxxxxxxxxxxxxxxxxxxxxxxxxxxxxtxxxtxxxxtxxxxxxxxu[u[{#UV)t{#Ux~Qxxxu[V)u[{#Uxxu[xu[{#Uu[{#Uxu[{#Uxxx~Qxxx~QxxLu[xxxxLxxx~Qxxx~Q~Q~Q~Qxxxxu[~QLL~Qu[L~QLL~QLLxu[u[u[u[u[u[u[u[u[u[{#Uu[Zu[{#Utttttt{#Uu[{#ULu[tttL~QtL~Qtt{#Uu[{#Uu[Lttt~QV)LtL~QtL~QtttttttttttttttLxu[tu[LL~Q~Q~QLLLu[LLxxLLLxxLu[LLu[{#Uu[LV)u[{#UV)u[{#UV)u[{#Uu[LLLLf5mLLLLV)V)V)CsV)Csu[u[V)Csu[u[u[u[u[u[u[Zu[{#Uttttt{#Utu[u[u[u[u[u[u[u[V)V)V)LLV)LV)V)LV)LV)LV)LV)LV)LV)LV)LV)LV)LV)LV)~QLLV)LV)V)L~QLV)V)L~QV)V)V)V)V)V)V)u[{#Uu[u[;(;(~QLLu[{#Uu[V)~Qu[ZLLu[LL~QLu[u[LLLLV)~Q~Q~Qu[u[Zu[mffi_*J*gF {2_ ~ y5_wwouq ^( N,U(b cy tasi sY X0\!Z-QOYI"U O av/A  a?l8o W::$::$d]E  YQZ uB uB uB uB uB uB uBu[R@G/T2/T2/T2/T2/T2/T2u[u[xxxxu[u[u[V)V)V)V)V)V)V)V)V)V)V)V)V)V)u[u[{#Uu[u[u[{#UxxV)1111(S(S(S(SqqZ!Z!Z!Z!Z!Z!Z!Z!gJgJ鶖鶖ananCC?Q?Q?Q?Q?Q?Q?Q?Q`XIq`XIq`XIq`XIq`XIq`XIq`XIq`XIqjajajajaqqԝXԝX0We0We0We0We88YY w w\ܯ\ܯ8 8 ԝXԝXԝXԝX h h h hMMMMj\j\j\j\j\j\j\j\sBƖsBƖsBƖ726726726u[R@G!<im Pܡ$lܡ$lllllllllllll]E ]E lu[u[wSn nT$@@GB[daWY1cLb U S( x_gc n@Ipx~Uzw yjZ9C3} Ui yZI iD pK FL$o ]d_0uL}( mR'@H!G@e(C( GkoA xI( `JB( t,ZQ|( @lapZfTo`#@X ( N>qeh@^q( UX%S"P!~ a>o( F@H U@}@bQjV`>H@uFjZ WN a fVm$P@n5T2H]j( j# V g \g( S \i( {@n( YV7N[A( p( A( ~'U ]v( q"@v( C$jkN?IM$d( CO@u#t( V5FA0@ f` @M"vI pA<V Prj j;Y!z SCo8NL1B%G1NJf&_=AOD(]*n @z zebS$S~#[ X!Nl E(X0V;sqKX@ (V1m@0lZY'E#^!@R m,g}e[ cU;w @a#{&wq$r0Qp'Y ^0Tg#[ @D u0 y0@2M( K,BG@W,Rf}0gZcX @u x@_#P1G y( xc|<RE [Nnl*@ g qiws( }|j6s g,gQ~U3 S} r"TUS ^W X|Vb'u8_cL l"D>H3T 2g f5mU[V){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#Uu[V){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#Uu[V){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#Uu[V){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#Uu[V){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#U{#Uu[{#U{#Uu[V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)xxflUxxflUx{#Uxxxxxxxxx{#Uxxxu[xV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xV)xV)V)xV)xV)V)xV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxxxxxV)xxV)xV)xV)V)xV)xV)V)xxxxxxxxxflUxxxxxxxxxxflUxxflUxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxV)xxu[Z{#U{#U{#U{#UZ{#U{#U{#U{#UxZ{#U{#U{#Ux{#Uu[{#U{#Uu[V)V)V)V)V)V)V)xxflUxxflUx{#Uxxxxxxxxx{#Uxu[xV)xxV)xxV)xxV)xxxxV)xxV)xxV)xxV)xxV)xV)V)xV)xV)xV)xu[Z{#U{#U{#U{#UZ{#U{#U{#U{#UZ{#U{#U{#UxxxxxxxxxflUxxxxxxxxflUxxflUxxxxxxxxxxxxxxxxxxxxxxxxxxxV)xxxxu[u[u[u[u[u[xxxxxxxx!flUl*dk*L*I*_*\*[*u*˓4c*J*a*FFFb*c*y]Enhanced StatisticsB]Accuracy Stats:x]Spree and Multi Stats:F*bekU%Tc*h p.@D@j sHx$[.O1@I.@` @i OJB ( (W1Ld<( ]([*doKe@m+K~$B7Ak!E,k2e tZ],~* B L^'k]#c3A]s/d!@v"@us)@R t+S(U0Y0A>u-V g A=S0~P0N0t>s7c l 02Dl ] ./EUT.logH`1J0~e] H0s yg0H | } A Op \ C i@E mF I Yz/K j/M X/W G( {k0pi7K'p llI l D7N W75E, $N  *$N 33s? ?$N fff? T$N Y? i$N L? ~$N @? $N 333? $N ff&? $N ? $ N  ? N ?G, ^(N*Vd @c@G nZ4@wIV(T$c h Q@q>f;a o V!=xxxxv u aSt fJP@s co@X9E Ed~7f,g&@fo#er {cG \ @f D MIH[&@W@ C<V2@U @U @A-l@#@ko @5l @q s @_S@a&Bo&zh @flL XxMB @h@@_@@sh$EB$ @ B II DX w0Hb W J K L M m Q j5@@Z n@Q'@W U@Cz@U&b _ auX#Qw"a G f I'\ (e#@u$n'E}%_ @n Da@@e uJ\J&p}>Y=e 2| ihMo o o QsQ!n]EUT Hud Settings WindowWw UQ7MJ@@?K;g 2wC \ygt{#U{#Uxxxxxx{#UxxflUxxxflUxxflUxxxxflUxxxu[u[u[u[u[u[u[u[u[u[xxflUxxxflUxxflUxxxxxxx@1C-%nx-%n61Շu[Z-%nxR@1Cu[ZxR@1Cu[Zxxxxxxu[Zxxxxxxu[Zxxu[Zu[Zxu[Zu[Zxu[Zxu[Zxxxxxxxxu[xxxxxxxxxxxxxxxxxV)u[xxxxx;(xxx;(xxxxx;(;(xxxxxxflUxxxflUxxflUxxxxZxxxZxxx{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#Ux{#U{#U{#UGxxxxx{#Uu[{#UxxxflUxxxflUxxflUxxx{#UV)V)u[V)V)V)V)V)V)V)V)xxxxxZ!xxx{#Uxxxxx{#Uu[{#Uxxxxxxx{#Uxx{#Uxx{#Uxx{#UxxxflUxxxflUxxxxxxxxxxxu[{#U{#UxxxxxflUV)V){#UV){#UV){#UxV){#U{#U{#UxxV){#U{#U{#UxV){#U{#U{#UxxV){#U{#U{#Uu[u[Zu[Z{#U{#U{#U{#U{#UxZ!Z!Z!Z!Z!Z!Z!Z!xZ!Z!Z!Z!Z!Z!Z!Z!xxxu[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxflUxxxflUxxflUxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx{#Uxxxxxxxxxxxxu[u[x!k*L*I*_*\*[*u*˓4c*J*a*FFFb*c*W-inV-by^]('You got pwned. Hit [Fire] to reSpawn!M] Hit [Fire] to continue!L]The match has ended.KMElapsed Time: J]Remaining Time: I] Frag Limit:G] Time Limit:[]Playerv]Fragsb]Deaths_]PingY]TimeX]LossZ]FPHk(S Lv E xWJ7WaO Y-@^1@^ ] gZ'LxQrP"@o%L@>e b9pcZy`=g J>g=W  h Ccg A{#U{#Uxx{#Uxxxxx^H*{nl l@VMiW U:m(s M m( Y ie^.@T y)@n@P?V?k 2F { %JEBm{#U{#U{#U{#U{#Uxxxxxx{#UV)V)V)V)V)V)xxflUxxxflUxxflUxxflUxxxflUxxxxu[u[u[u[u[u[u[u[u[u[{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#UxxflUxxxflUxxflUxxxxxxx@1C-%nx-%n61Շu[Z-%nxR@1Cu[ZxR@1Cu[Zxxxxxxu[Zxxxxxxu[Zxxu[Zu[Zxu[Zu[Zxu[Zxu[Zxxxxxxxxu[xxxxxxxxxxxxxxxxxV)u[xxxxx;(xxx;(xxxxx;(;(xxxxxxflUxxxflUxxflUxxxxZxxxZxxx{#U{#Ux{#Uu[{#U{#U{#UFz{#U{#U1{#Uxx{#UGxx{#Uxxxx{#Uxx{#Uu[{#UxxxflUxxxflUxxflUxxx{#UV)V)u[V)V)V)V)V)V)V)V)xxxxxZ!xxx{#Uxxxxx{#Uu[{#Uxxxxxx{#Uxx{#UxV){#UxxV){#UxxxflUxxxflUxxxV){#UxxxxxV){#UV){#UV){#UV){#UxV){#UxV){#UxxxV){#UxxxxV){#UxxxxxxxxV){#UV){#UV){#UxV){#UxxxxxxxxV){#UV){#UV){#UxV){#UxxxxxxxxV){#UV){#UV){#UxV){#UxxxxxxxxV){#UV){#UV){#UxV){#UxxxxxxxxV){#UV){#UV){#UxV){#Uxxxxxxxxxxxu[{#U{#UxxxxxflUV)V){#UV){#UV){#UxV){#U{#UxxV){#U{#UxV){#U{#UxxV){#U{#Uxxxu[Z{#U{#U{#U{#U{#U{#UV){#U{#U{#U{#U{#UV){#U{#UxZ!Z!Z!Z!Z!Z!Z!Z!xZ!Z!Z!Z!Z!Z!Z!Z!xxxu[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxflUxxxflUxxflUxxxxxxxV)xxxxV)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxflUxxxflUxxxflUxxflUxxxxxxxV)xxxV)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx{#Uxxxxxxxxxxxxu[u[V)V)x!sxk*L*I*_*\*[*u*˓4c*J*a*FFFb*c*p"<W-inV-by^]('You got pwned. Hit [Fire] to reSpawn!M] Hit [Fire] to continue!L]The match has ended.KMElapsed Time: J]Remaining Time: I] Frag Limit:G] Time Limit:[]Playerv]Fragsb]Deaths_]PingY]TimeX]LossZ]FPHI/E?TW/C@H aAs r&ojpt n@@tq@jE<Dm ]RS[UN Qx } | E2y=@=Q 2{ _!0fs{#U{#U{#U{#U{#Uxxxxxx{#UxxflUxxxflUxxflUxxxxflUxxxu[u[u[u[u[u[u[u[u[u[{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#UxxflUxxxflUxxflUxxxxxxx@1C-%nx-%n61Շu[Z-%nxR@1Cu[ZxR@1Cu[Zxxxxxxu[Zxxxxxxu[Zxxu[Zu[Zxu[Zu[Zxu[Zxu[Zxxxxxxxxu[xxxxxxxxxxxxxxxxxV)u[xxxxx;(xxx;(xxxxx;(;(xxxxxxflUxxxflUxxflUxxxxZxxxZxxx{#Ux{#U{#Uu[{#U{#U{#UFz{#U{#U1{#U{#UGxxxx{#Ux{#Ux{#Uu[{#UxxxflUxxxflUxxflUxxx{#UV)V)u[V)V)V)V)V)V)V)V)xxxxxZ!xxx{#Uxxxxx{#Uu[{#Uxxxxxx{#Uxx{#UxxxflUxxxflUxxxxxxxxxxxu[{#U{#UxxxxxflUV)V){#UV){#UV){#UxV){#U{#UxxV){#U{#UxV){#U{#UxxV){#U{#Uxxxu[u[Z{#U{#U{#U{#U{#U{#UV){#U{#U{#U{#U{#UV){#U{#UxZ!Z!Z!Z!Z!Z!Z!Z!xZ!Z!Z!Z!Z!Z!Z!Z!xxxu[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxflUxxxflUxxflUxxxxxxx;(xxxx;(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxflUxxxflUxxxflUxxflUxxxxxxx;(xxx;(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx{#Uxxxxxxxxxxxxu[u[V)V)x!k*L*I*_*\*[*u*˓4c*J*a*FFFb*c*W-inV-by^]('You got pwned. Hit [Fire] to reSpawn!M] Hit [Fire] to continue!L]The match has ended.KMElapsed Time: J]Remaining Time: I] Frag Limit:G] Time Limit:[]Playerv]Fragsb]Deaths_]PingY]TimeX]LossZ]FPHsP&tP9V'LDd @\h@ @J$gk+(u~ @t @D+I  @{A@kk Z@j,V!@P$R`,U>[;(+DTK x_Lz @`at(z^PMD(V @ lS(]RQ.h&@j1O/I@\"}m-dM@v@R@@nq  c#POvxlp/]=p# v dz O4@Ip@|@H (\x j-qsEpK`D Oa%c5E'uM  i K5WS-M 'W-  w- .= 6$ $-a'R pp%-WR dR Wppdemorec "R " $-a'R WR dR Wppdemorec "R "  @l1x FYk#@K@_<lH@}CO;\)$])$^)$_)$`)$a)$6{ 6| 6} 6A 6C 6E 6F 6I 6K 6M YAi6lQ%6mQ%6nQ%6qQ%6rQ%6uQ%6vQ%6wQ%6xQ%6LQ%6yQ%6} $6 $6@ $6B $6I $6J $6K $6L $6M $6m $6l $6rx$6px$6lx$6kx$6jx$6cx$6^x$6`x$6ax$6bx$ "^U+WX1Z@gw5p|v zIv@wg@y{ra4}u&j4T.QtjdT. 7$  b _$ % %b  ps1k ABI@] lQ^ @X\p@`w-w6c@u[\]^Z @O~(Myu(c ]Z5@u jl'^#h(YY@S5@ED @W]<}FnH@{|Yv!C?P=i  @7͈ԝXT%T%T%Z@1CT%u[T%u[T%u[T%u[OXT%u[@1CT%u[T%u[T%u[T%u[5IT%u[rGe&J#|"m#Lhs@ O(S(QT(k RUo qWhfY\_c]`J hY(d(e(S@jl@Wm@nopqsK<t_ w@r C>zW'@}@D~@@DA@N@B@D@Y@I4Up  j @&Gz!@J@EA\)cOPvTYQUZV][\^_a`d bdekhT XiT t_gp(q(V(Cz>w]@U@kyz{|}@h Az#M@_ Y qE FG I J t K D Ng%M R S X T l<Y Z \ y*] ^ c O ( a]V d f |g i b o h z lN } Omstuvwf qz{|A xj ~BCKGHIEsLMNOPQRSTUVWXYZDt[\`pab^Hx  g@@@^<\cjkaS @|lB pSRV-]&D@w@ytzm|~]BfCTM@Dm ]h yE@hk O Hb @a H%@U@iV@E>@` QU@}@^@~,Z<@K\Ps @WeH# ZOmnoA%M=|$B#J @hig@Wx| @E!F @dd{E{c;  n%e @E8U= L M q% GT w$y/@d$BSTEI@f W@VJ@u=^;O \k<0{#U{#UFz{#U{#U1{#U{#Uxx{#Uxxx{#U{#UFz{#U{#U1xxxxxxxxl*c*^H*K_x=_!M@w>@Zf @g @} @D3i8_6`!oZ`eArtl$u"@Y6u@c N$R~ @A @VB @C @X @ykEF@GJKuLNOPQRSTUVr @}!ge @^_@z @]`ad[o @Zlij[9mmnX(@r @oM@ B @g!@ wL0@i ` \\ w @|}iA vFC @G @a@@DL @y{c @O @NQT @G:@V#A"R@ X @b@Z @V@^ @B)@s@f s @Hm`hF"fgnY#f#_U-@W_J 7tw`xzF%{}N+@f%FP@c&AA.@O*GHINw LQ[ SfU*~wTWT{eu'T!g R;gD#`c{%@*@Gi'@` ^ @V H@c'@jF@rsT'Fp@H h%A V@Z;|O%u*D@B;FW&X*S@o@Ld P|'v;MNB^(R(Ue(h'@c]'@w\@|@O'Q)@@X\$@Y8H'S8A'hfmnq}#oru]svwxL3x#[<f7@r#V&@@f@A@O-CD&WB+uH{V+@_%@M7t X's %. S~s r=Ps ,,~s act=Qs ~s act=,,~s net=Rs ~s net=,, {P {Q {RI%LQLR AJ%JPS?J%I%??,dt P N t t $t gt "aШLoad:SDS%G%E%t 5t G%t ?,E%t aѨLoad:SDS%( P%@Q@R@J%@G%Y@T@oC%s+Y[Oab=@n$@dj{J@]6VY6{ 6| 6} 6A 6C 6E 6F 6I 6K 6M  C/l@@|,q@] tv#d C n#uh#H6JT*r.* -X'v.N$J%J,{vpKEYNAME SJ{{{|vpKEYBINDING {||ShowStats-e#'j |{~j AMOUSEYN{~j SPEED=j j ~j SPEED=,Hw * q Lj { .. q Lj J9-e#vSet Input F3 ShowStatsvShowStats bound to F3 tZ |@j @gmUT#R8=!-aT#-  T#stopdemo y4@c~L&w~*~- ~a!z?zV~~V~.&DEMOPLAYBACKSPEC'( b4@^4}"@E@u@H"qG@z"@@ | |3Q"AnM Y a j!-wY * /a0 Q"|Y a j!* Q" {wY *0 10 \En/@ ~!@ S@ x!@ g3@q@ V@ ^ Mf|g@G@Z!@bW!U!@F!@!O fx~Nm nYK2y@u1oP I2ty@m2@p @|@_@~@Z@@@@@gDFT0fBK/@@@[@K@g"@o"@y@O@d.oq.WA#{I#N#CM5Z[p0ilZG$ess$fikvfkS no{k7`&@K*t7@n&_q&~&b@VA(BR!Cf\'^&Z*K&u}* B| F&v% B ^% \% P L,I$o ;G-@{ V@X@Y@Z@[@\@]@`^@n `@b@c@d@i e@i@H-@i@j@k@l@m@L?an@q@r@a @u xL_|}~@ ~ G#D L  G>z8U 2pF Z| LV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#Uu[V){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#Uu[V){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#UV){#UV){#UV){#UV){#U{#U{#U{#U{#U{#U{#U{#U{#UV)V)V){#Uu[{#UxxflUxxflUx{#U{#Uxxxxxxxxx{#Uxu[xV){#Uxx{#Uxu[xV){#UxxV){#UxxxxV){#UxxV){#UxxV){#UxxV){#UxxV){#UxxV){#UxxV){#UxxV){#UxxV){#UV)xxV){#UxxxV){#UxxV){#UxxxxV){#UxxV){#UxV)xxV){#UxxxxflUxxxxxxxxxxflUxxflUxxxxxxxxxxxxxxxxxxxxxxu[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxu[Z{#U{#U{#U{#UZ{#U{#U{#U{#UxZ{#U{#U{#UxxflUxxxxxxxxxflUxxxxxxx;(xu[xxxxxxxxxxxxxxxxxxxxxxxxx;(xxV)xxV)xxV)xxV)xxV)xxV)xxV)xxV)V)xxV)V)xxV)V)xxxxxxxxxxxxx;(xx;(xxV)V)xxV)V)xxV)V)xxxxxxxxxxxxx;(xx;(xxV)V)xxV)V)xxV)V)xxflUxxxxxxxxflUxxxxxxxxxZxxxxxxxxxxZxZxxxxxxZxZxxxflUxxxxxxxxxflUxxxxxxxZxxxxxZZ{#UxZu[xxxxxxx;(;(;(xxxxxx;(;(;(xxxxxx;(;(;(xxxxxxxxflUxxxxxxu[u[u[u[u[xZ!flUJ*_*k*I*L*M *dc*u*˓4~ ] Server Info ] Contact InfoN ]Name:@ ]Admin:A ]EMail:B ] UnknownQ ]Message of the DayC ] Server StatsD ]Frags Logged:E ]Games Hosted:F MLives Claimed:G = Game StatsO ]Game:L ] Players:M ] Total Frags:H ]Top Players [Frags per Hour]J ]NameK ] Best FPHL = Record SetU ]Botsw ]Flags Captured:j]Total Flag Grabs:i]Total Flag Seals:h]Total Flag Assists:g]Total Flag Covers:f]Total Flag Kills:e]Total Flag Denials:d]Total Flag Saves:B]SmartCTF Stats Plus}]Best Rank #1:}Best Rank #2:}Best Rank #3:v r G?H;j 2dI *N^MV)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)u[xxxx5Ixx5IxxR@GI&/xxxxxxxxxxxxxxxxxxu[u[!xxu[xxX'{#U{#U@1C{#U{#UX'{#U{#US=ц{#US=ц{#US=ц{#US=ц{#US=ц{#US=ц{#US=ц{#US=і@1C{#U{#U2R2RK]was killed byM K@@ v\?wR W?@V W }A] R?z@^ @w` _d1b1e i2g } d {@M[1o @~]1u i p mG y cz B!Q1@D!v>@ey~s@J1@@0 I3K3f>M!x0b>y?\ 2MQ!S~|[$| iho u[~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q~Q|[$|[$u[|[$u[|[$u[|[$u[|[$u[|[$u[|[$u[|[$u[|[$u[|[$u[|[$u[|[$u[u[u[u[u[|.Xڇu[u[|.Xڇu[u[|.Xڇu[u[|.Xڇu[u[|.Xڇu[u[|.Xڇu[u[|.Xڇu[u[tu[tu[u[|.Xڇu[u[|.Xڇu[u[|.Xڇu[u[|.Xڇu[u[u[{#Uu[u[{#Uu[~Qt~Q~Qt~Q~Qt~Q~Qt~Qt~Qto /T2o /T2|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xںttt|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X|[$|[$|[$ttttttttttttttt|[$|[$|[$ttt~Q~Q~Q|[$Z!Z!Z!Z!Z!Z!Z!Z!Z!Z!xxx|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Qttttttt~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|.Xڲ|.Xڲ|.Xڲ|.Xڲ|.X~Q|[$|[$~Q|[$|[$|[$|[$ttttttt~Qtttttttt~Qttttttt~Qtttttttt~Qttttttt~Q|[$|[$~Q|[$|[$|[$|[$ttttttt~Q7X7XQn]Display Map Timem]%$Displays Time Left on Current Levell] Display Pingj]Display Ping On Hudi]Display Team Counth]Display Team Count On Hudg]%$Display Acc(1)/Eff(2)/Off(0) On Hudf]Display Accuracy on Hude]Display Flag Carrier Named]"!Display Flag Carrier name On Hudc]Auto SS At Map Endb]$#Auto Take a Screen Shot at Map Enda]* Use Team Beacons`]-,Use Team Beacons Must be Enabled Serverside^]Colored TeamSay Messages]]Use Colored TeamSay Messages\]Use Non-Transparent Dot[]$#Display Non Transparent dot X-hairZ]* Use HitSoundSoundsY]Use HitSoundSoundsX] Scope StyleW]Choose Your Rifle ScopeV]Display Boot Charges on HudU]Display Boot Charges on HudT]Draw Leader on HudS]Draw Leader on HudR]Dot color Red (0 - 255)Q]$#Enter a Red value between 0 - 255.P]Dot color Blue (0 - 255)O]%$Enter a Blue value between 0 - 255.N]Dot color Green (0 - 255)M]&%Enter a Green value between 0 - 255.L]Adjust dot Screen X PositionK]?>Enter a value between 0 - 255 to adjust dot Screen X positionJ]Adjust dot Screen Y PositionI]?>Enter a value between 0 - 255 to adjust dot Screen Y positionH]Adjust Client NetcodeG]! Enter a value to adjust netcodeF]98AutoRecorder 0=Off 1=On LongFileName 2=On ShortFileNameE],+0=Off 1=On LongFileName 2=On ShortFileNameLE S!O!ocC ^3@b3\0[rf!M h!@ i!@ m!@ M>S3NBj!b%f'mbS|l!n!u!@ k3@o!@s!F>@KF0@D@ D({!@ rQ@S@ !w/C"@ @"q/^ qQ@ B"D"uE"G"kN"@ {/@K"@k/i/@ O"`/a/_/mu~_/ $c| y$cX$Uvw8*8q B|  |=L"@V"@C R"Z"Z["W"@^"@]"`"a"b"c"d"e"L@u f"i"a@k"@Xm"@N@p"@u@~.@t"@yy"e=Qb.@@ \{"~"@UC@VC#U.F#S= n GK#@L#@m44O#@C.|-@B=@Q#@E\5a-c[#c-_-Kb#@d#@jvkR-z5_f<wM-q#J-j s#hrwpt#{w#y#x@ E-B-@-[a@$[bD$@x,@X<@w,r@mQ$j`$Z,@ U$@ V$@ W$@ X$@ Y$@ Z$@ U,b[$@ ^$@ b$]$e$_$@ i$c$@ f$@ Ek$H<@ |a$vo$@p$@m E$@Xh 6t$A7{$K |+h@%v+D%XCoH7JE%K%@SI%L%@b+@N%@@V%@HT%I7K7[%@[+Y+|@o;F@N d%  L@W+h`%e%@i%  R+@x+B P+l%  j%m%  C  Ab;@z%r% s% t% u% M B w% B x% B A& B B&|%I+@ K+y%@%@G& B w*G@HV  B EO;@H&I~M&Hr*p*mrb~p* $c| y$cX$Uvw7*7q B|  b*@@KGT&Y&@D@S&}@r_&B\&d&Eb&t@@s@@Y mj&vw}7@@})@p&@v&@y&@m:@u)H*mk~H* $c| y$cX$Uvw6*6q B|  D8s&@r)@@&@o)k:@F'k)X8i)C'G'f}J'M'N'm O)v@I)f}[@[@['X'z@DX _'Y@@CJ p(n(q(@ G9q'@s'@K9YVd(T|w'S9}'@DHT(d@DVQ(o - TIL?% -Pr%q%L-P'-Pt%r%s%Lq%t%s%?,-O-O'$ SH J@@@@@@@@@@@@B(O(k(p $S).-(.b @@ @D@~@{'@Z([(}@@z'c(@@R(a(@i(J9m'Gg(j(@@N:@(q QQ-@(- O-@(-N -P-P'$ML s O:r YN4/a0 10w. *010 R:@r(@@ds(e'x8ny(|(f`'v1(@)A)J)S'D)H)c:8i2GQ'.EUT_Textures.EUT_Fill -C(-W&(-D( g8F)K)D'N)L)M)R)U)P)Xc8S)T)X)~)`@V)@Y)[)W)@e)])^)_)`)a)LZ)@b)@c)@j)d)@f)@g)@l)rgj:jJhrP*P.aEUTSource.EUTHudSettings wP*P).PDPPb T8@'@p)@q)@x|&@n)8[R B).EUT_Textures.Timeback S'.EUT_Textures.PingDisplay I).EUT_Textures.TeamBack D'.EUT_Textures.EUTAccBack i).EUT_Textures.EUTAccBackRifle l).EUT_Textures.EUTAccBackShock r.EUT_Textures.EUT_Elements E.EUT_Textures.EUT_Badge x(.EUT_Textures.EUTSmallFont  l:@w&@w)@A8P l^@8y ^]c*y)&y y ~y :&k~y :[ky y ky   x)@|)@)B*A*@y7C*D*E*k&l&z)} ]@I*@\ dBY P*y:]Q*i&qq G*r\Z&@R*V*W*X&@O \*W`]*rca7na@xT*{ [b@@a*@@O&T@@d*@@e*@@f*@@g*@@h*@@i*@@j*@@`*GZk*@@m*@@n*@@I;s*8b N+.EUT_Textures.Timeback p%.EUT_Textures.PingDisplay z%.EUT_Textures.TeamBack B&.EUT_Textures.EUTAccBack w*.EUT_Textures.EUTAccBackRifle t*.EUT_Textures.EUTAccBackShock O.EUT_Textures.EUT_Elements l.EUT_Textures.EUT_Badge D,.EUT_Textures.EUTSmallFont  W7jQrG*G.aEUTSource.EUTHudSettings wG*G).GDGGb OaE&@t*o*@@_x*@@z*@@{*@@N; BJ B |*@@\*@@C&@+C+A+@@E+@@F+@@G+@@{H+@@X;@P7`;  p%J+@@S+O+@@Q+@@T+c%@W%Z+c Z%{+dA ]+@S%^+@`+@s;a+@c+@M%@d+@e+@f+@g+@h+@i+@j+@l+@dr+@lZn+o+p+u+@q+zw+@E7z+@F,@q@J,VB }+~+C7@,Pz$w;A,fC,~6H,@TK,SC N,ZD P S,R E s6@@@Pm,TF O<8bvi.EUT_Textures.EUTSmallFont n.EUT_Textures.EUT_SPan_T g.EUT_Textures.EUT_SPan_B X.EUT_Textures.EUT_SPan_L V.EUT_Textures.EUT_SPan_R c.EUT_Textures.EUT_Fill \$.EUT_Textures.EUT_FillColor U.EUT_Textures.EUT_TL Q.EUT_Textures.EUT_TR P.EUT_Textures.EUT_BL O.EUT_Textures.EUT_BR b.EUT_Textures.EUT_Divider U,.BotPack.GreenFlag %{I&{u,{V-,{C,{Dz  b@G@@b,@ @@^,@d@d,@ @},@ @\h,z@e@@t,O$G @@U6@p,@u,^H v,eI {,iJ n H$@F$@y,@FdK F6,@ A$D-@ C-B`o{#@ @{K@g@dJ\c<N-l#L-@@i#p<W-@F`-@@q5@o5P ^ȧc*Y-&P P ~P :&~~P :[~P P ~P   @@@b-P@e-d-\#@L@ii-t_5k-{ x @N5@@t-@v-@ G=iS.  x-R @@@D5@@@y-@B.@|4}4@@G.@cq4L.@pN. @O.V.V=@\Z.\."].`.c.r.e@@ a.@@ d=@R S@@ e.@@ f.@@ g.@@ h.@@ i.@@ j.@@ k.@@ l.@@ m.@@ n.@@ v.t.@x.@b@z.@|.@.@s"@@/B/o.@@ E/m=@@G/@| @M/@_"@@Q/@@ty@A/@@ E4F B&A5[r)*r)*r)*I'm an access none :P F .)+rF *)NUnable to locate WindowConsole in EUTHudSettings>>OpenSettingsWindow()Unable to locate WindowConsole in EUTHudSettings>>OpenSettingsWindow() eF - rF *F o*F - 'L.| F  | AADCLX.LD S/@@ U/@@ Y@c/@Xh@V/@@ [/@@ \/@@ ]/@@ U"d/8e y/.EUT_Textures.Timeback |!.EUT_Textures.PingDisplay !.EUT_Textures.TeamBack @".EUT_Textures.EUTAccBack q/.EUT_Textures.EUTAccBackRifle o/.EUT_Textures.EUTAccBackShock I.EUT_Textures.EUT_Elements G.EUT_Textures.EUT_Badge b!.EUT_Textures.EUTSmallFont  ^/@@ J @z3jTrF*F.aEUTSource.EUTHudSettings wF*F).FDFFb b/@@ e/@@ f/@@ g/@@ h/@@ u/@l/m/J"@ Iwo/Y t3H @Z}/r3|!~/@D0@@p3y!z@q3w!{ @Uw*v!&D%D, Dv!%w!D rw!D\ G0@T@ C0@t!@E0@@Q0@@r!@v @I0@r @K0@k @M0@i3O0@j @R0@`0@@h @V0@F W0P`f @X0acba]0@W>8jP .EUT_Textures.EUTSmallFont Z.EUT_Textures.EUT_SPan_T Q.EUT_Textures.EUT_SPan_B D.EUT_Textures.EUT_SPan_L A.EUT_Textures.EUT_SPan_R L.EUT_Textures.EUT_Fill E.EUT_Textures.EUT_FillColor H .EUT_Textures.EUT_TL E .EUT_Textures.EUT_TR S .EUT_Textures.EUT_BL ] .EUT_Textures.EUT_BR H.EUT_Textures.EUT_Divider T0.BotPack.GreenFlag F .EUT_Textures.EUT_Meter %lP&lf,lR,lZ,lv/K d3[0fS@a0@@b0@@y @c0@@e0@@]>8\_v .EUT_Textures.EUTSmallFont ~ .EUT_Textures.EUT_SPan_T w .EUT_Textures.EUT_SPan_B \.EUT_Textures.EUT_SPan_L } .EUT_Textures.EUT_SPan_R g.EUT_Textures.EUT_Fill ].EUT_Textures.EUT_FillColor W.EUT_Textures.EUT_TL [.EUT_Textures.EUT_TR x .EUT_Textures.EUT_BL T .EUT_Textures.EUT_BR R.EUT_Textures.EUT_Divider p0.BotPack.GreenFlag %Hp&HO,Hf,Ha,H\1N f0@@h0@@i0@j0@@Q @l0@@t0@m0@@n0@@o0@@q0@@Rz0@@s0bX@v0@[@IN!|0@{0@@@1@@e@~0@[@G3A1@@B1@@C1@@D1@@E1@@F1@@A@@K1@2H1M1@@Y@N1@C@@r@o@U1@C!@A!@R1@Sc} @T1jaV1_`~q Z1ak2Y2Q ^;4c*^1&Q Q ~Q :&j~Q :[jQ Q jQ   a1]c M?F mX&_F $:F , {=:6T:F 5R:{|=:6N :F 5R:|}=:6L:F 5R:}~=:6Z:F 5^:~=:6W :F 5R:@ =:6R :F 5C:@ F H{H"|G"}E"~D"B"@  c\ n1h1@@hi1o1m1r1p1J2wQ?l 2q1΃LnRr [Ql]?y1C){1FpqF,k%k&k%_ &_ &k,k&_ ,_ ,kF,_ s F&k%k&k%_ &_ &kF&_ s F%k%kF%_ s  @U'x1}1tH,tt?,dU'D?u1tU' R2zQJ}$P .-v(-N ziP ti. w t  y mw6`t !:w%-v' :t (s&<t (S?t G?,dh?:t (S:t (s,?t G?,d?%xCz? zOzzO&zi +$zJ! G$zM! c$zc $zO! =,zL! -N zU!zz?,\zai(zd\. 4 t < y  mzapSt [ %(zZ\z$apR6dt ; %(zV\z$apR6lt ; %(L-vzE\z$apR6ot ; %(~zE\zapRw %(zU\z$apR6it 9 %(zT\z$apR6ft 9 %(zS\z$apR6pt 9 %(zB\z$apR6et ! %(z{\z$apR6at ! %(zE!\u -f y N$z$apR6Zt ! %(r o$zapRx %(r  y $z$apR6^t _ %( $zapRx %(  z\?,  F2vdn,!!!!!!!!!!!!!!! CALC END STATSv%v,vkv\ }v_ v\|v)v%v, wv*qv{qPLAYERpqIqvv%{v,v\|v_ v\ }vkv%\B wB *B a/!"B a/!#wB *"{B PlayerB w*-N8stat_playeraccuracySS[?weap_accuracyEnforcerSR6d;Dweap_accuracyGES Bio RifleSR6l;Bweap_accuracyShock RifleSR6o;=weap_accuracyRipperSR6f9@weap_accuracyPulse GunSR6i9>weap_accuracyMinigunSR6p9Bweap_accuracyFlak CannonSR6e!Fweap_accuracyRocket LauncherSR6a!Cweap_accuracySniper RifleSR6Z!Kweap_accuracyEnhanced Shock RifleSR6`!Dweap_accuracyCustom WeaponSR6^_:weap_hitcountEnforcerSS}?weap_hitcountGES Bio RifleSSd=weap_hitcountShock RifleSSt8weap_hitcountRipperSSi;weap_hitcountPulse GunSSg9weap_hitcountMinigunSSn=weap_hitcountFlak CannonSSAAweap_hitcountRocket LauncherSSo>weap_hitcountSniper RifleSSpFweap_hitcountEnhanced Shock RifleSSA?weap_hitcountCustom WeaponSSv9weap_damagegivenEnforcerSS6SC>weap_damagegivenGES Bio RifleSS6TC<weap_damagegivenShock RifleSS6YC7weap_damagegivenRipperSS6]C:weap_damagegivenPulse GunSS6`C8weap_damagegivenMinigunSS6_C<weap_damagegivenFlak CannonSS6d C@weap_damagegivenRocket LauncherSS6cC=weap_damagegivenSniper RifleSS6eCEweap_damagegivenEnhanced Shock RifleSS6hC>weap_damagegivenCustom WeaponSS6iC[weap_shotcountEnforcerSS<6d;}`weap_shotcountGES Bio RifleSS<6l;d^weap_shotcountShock RifleSS<6o;tYweap_shotcountRipperSS<6f9i\weap_shotcountPulse GunSS<6i9gZweap_shotcountMinigunSS<6p9n^weap_shotcountFlak CannonSS<6e!Abweap_shotcountRocket LauncherSS<6a!o_weap_shotcountSniper RifleSS<6Z!pgweap_shotcountEnhanced Shock RifleSS<6`!A`weap_shotcountCustom WeaponSS<6^_vB B  ` ~1@A2B2C2D2N z1 N21]'!@ %e@ [r` *%` @ ` @ @ @ %@ ` @ %` @ %(@ l/a0 o  :o`  10uo` @@|w|*F||q!b\ .|w\ *\ -'\ u\ X9- -ZV\ :\ ` --Z|%&&?%..|  J, %&&?%..|  J, &%%?%..|  J, &%%?%..|  J, ||yu-(o-'d'  w1PQ ;:P:zw*Lflag_returnedSPS:z4w*Lflag_returnedSPS:z &P*znwn*:n(_%n(_$:n(j%n(j$Lna/!#.n v.na/!".n?M.n.n':P%]-*V^ ] ^"rPnP<W6uPC\\w*Iflag_savedSPS:z&?&-Yn-Z..n  J, 6{PC K,P**&?&n-Z..n  J,  K,P**:P&^-*V] ^ ^"drPnP<W6uPC\\dw*Iflag_savedSPS:z%?&-n-Z..n  J,  K,P**6{PC%?&gn-Z..n  J,  K,P**nnh -R :P?rP-Pa/!#- '+rP*rP* n wn*na/!# -Z.n$:Pq. n-Z -R + :6TPR, -P $h %&..n  J%  %?&&%..n  J, 9 %?,&%..n  J,  %?,&%..n  J,+ ( $ &%..n  J&% V &?&%&..n  J,%  &?,%&..n  J,% % &?,%&..n  J,+ ~ :6TPR,..n  J,  na/!".n?M.n.n'nn?} w*Lflag_capturedSPS:zw*Lflag_capturedSPS:z  %P*zz!/a0 Q zQ AzP10- ?%/:Pxteamscorelimit-xtimelimit  G2qv|-} qN.q4rN*-}N*N-$.N!Z?N-(N M!Z*'V wV *V -3:V :N>V a/!#-m(wV NV a/!".V  !Z-m'V V -mN-'N M!l*'.N!l-}L?rwr*ra/!U/:.r:N.r- U .r rrV U rwr*vra/!U/:.r:NN.rW .r vW V rr6q -} xT r H2Av<wf*f-ABf\w\*3:f:\fa/!"2f,#wf*.fD*!o$pAw\* wf*wf*w\**:f:\\O w\*w\fBA:\(C&-u..\  o %ABf\:f:\+:\(C& w\f-u..\  o &ABf\ |1*X2*W!F*?XO>N AC*?X*?OGa>N AC*?*?O>N AC-*?*?O>NACO?N B*OE**a^ y_*%*y?,z* a^ '6*$6*=,6*$2U*? *O**O&**#a12345678901234567890y_***?,z_?,* aPlayer'*6*?,y?,z_?,* aTotal'y*?,y?,*aTotaly_*(yy?,z_?,* aUlt'xyy?,*a###y_*(xy?,z_?,* aMon'Wxy?,*(Wy?,z_?,* aLud'ZWy?,*(Zy?,z_?,* aHoS'[Zy?,*([y?,z_?,* aKSp'\[y?,*(\y?,z_?,* aRam'^\y?,*(^y?,z_?,* aDom'a^y?,*(ay?,z_?,* aUns'bay?,*(by?,z_?,* aGod'dby?,*(dy?,z_?,* aWkS'kdy?,*(ky?,z_?,* aCov'tky?,*(ty?,z_?,* aSls'wty?,*(wy?,z_?,* aCoW'wy?,*(y?,z_?,* aFkM'~y?,*(~y?,z_?, y $* aHdH'  $* aHsT' k~y?,. = t d y}$r :}, :}^*}M }$< :}, q:}y2 wq*{qPlayer:q%2 q-q-:`^q`2 :`, < }z Y:`}$u :}, :}_*}P }$? :}, q:}y5 wq*{qPlayer:q&5 q-q-:H_qH5 :H, ? }} Z:H*aTESTy_X z_?,D X }$ :}:`D X <}_O*:}^D } X z_?,_<`}$a :}:HD X <}_O*:}_D }    m}$ :}, :}X*}t }$L :}, q:}yB wq*{qPlayerB q-q-:FXqFB :F, L } f:F*aTESTy_X z_?,D X X z_?,}$:}:FD X <}_O*:}XD }    O2k1V|T k1o1T  P2mu*W mqa, a,  a, a, a, a, a ,a%6VW f , a&6CW f ,a,6FW f ",a,6dW ~ M,a,6fW ~ ,a,6gW ~m%w*Wpppppp , spree, spree_wks, SW  V wV *tV a/!SV  amV  a,-y Kam**..V  ,hV V . Q2{V|6T x6T x ,$z 4$z <$z $w*Wpppppp , spree, spree_meg, Sz $6Sz $6Qz $6Zw*Wpppppp , spree, spree_lud, Sz $ $ $ $ $ $ $ $ $ $ $ $6vw*Vpppppp , spree, spree_hs, Sz w$6vaw*Vpppppp , spree, spree_hs, S6T x$z   S2ur 7ruk ru*k?& wu* wk* wukuDu@k6T @x$S6jDx?,{DS:6T Dx:I-y ':6T Dxu**(!O6jDx?,6T Dx$6jDx u-k-3:u:ku?&r:u%ru*r]-w]*+kb]3Vu ] V"6ZD^D(j\zww*flag_coverSDS@u<@:D(j, K, u**+:D(j, K, u**+ K, u**kb]3Vu ] L"6ZD^D(j\zw*flag_coverSDS@u<@s:D(j, K, u**:D(j, K, u** K, u**rwk*^-xkw]r~xRED~wRED6W DRD(_\Yw*flag_sealSDS@u<Cr:D(_, K, u** :u&ru* ^-w^*x kb^3Vu ^ V"6ZD^D(j\zw*flag_coverSDS@u<@ :D(j, K, u**x [ :D(j, K, u**x  K, u** kb^3Vu ^ L"6ZD^D(j\ze w*flag_coverSDS@u<@ :D(j, K, u**  :D(j, K, u**  K, u** wk*]-xkw^ ~xBLUE~wBLUE6W DRD(_\Yi w*flag_sealSDS@u<C :D(_, K, u** wk*wk*:@(_%@(_$k wk*wk*:@(j%@(j$ - wuk wu*k-k?&kruk Z2OWD .  t . y@$R:@, :@O*@-@$:@, ]:@pw]*{]Player:]%]-]-:KO]K:K, @Zv:K@$U:@, :@M*@0@$:@, ]:@pw]*{]Player:]&]-]-:`M]`:`, @]:`( % m@$c:@, :@r*@>@$:@, ]:@p w]*{]Player ]-]-:ar]a :a, @kA:a( ZO?XO>P AWO?XO?OGa>P AWO?O?O>P AWAO?O?O>PAWO?P BOW!OOEOOa_ YaO1OY?,a?,O a_ 'Ocya?,jO? OOOOO&OO#a12345678901234567890YarO?,yya?,OryO aPlayer'OrY?,yO aAVG 'dO?,YPO$Oa### YaOdY?,yO OZdYPOZY?,yO OVZYPOVY?,yO OEVYPOEY?,yO OUEYPOUY?,yO OTUYPOTY?,yO OSTYPOSY?,yO OBSYPOBY?,yO O{BYPO{Y?,y y $O O $Og O E!{YPO$OaTESTYa^ya?,y^. c t F y@$ :@:Ky^<@aQO:@Oy@s ^ya?,a<K@$C :@:`y^<@aQO:@My@  m^ya?,@$ :@:ay^<@aQO:@ry@m   U2X |݌2X % & , %, -, 2, 7, <, A, Y, -\'W$ ^, c, h, m, ,-\'W$ , , , , ,-\'W$ , , , , ,-\'W$ , , , , ,-\'W$ , 0X ,-\'W$ [2oK6p uro*uA !m A !p A !H A !t A !oWA  W-wW*&Wa/!NHwo*No-W-3:o:WioU Wo<J6R iC\W'-Y w.o*.o-:W%^-VW ^ W"o<Yo You Denied the Red Team!w*flag_deniedSiSU 6piC\[~-ZA~wA*gA..A  J, AA. K,o**N:W&]-NVW ] W"o<Yo!You Denied the Blue Team!w*flag_deniedSiSU 6piC\[1-ZA1wA*A..A  J, AA K,o**Hw.o*-Y Lo t %t ,Lt Lo t %t &t t ,Lo`*!I =L@.WP?W  woW wo*ioU WA !~ A !OiO:iO,iO$~w*flak_monkeySiSU .o  K,po Is A FlakMonkey!!!!(i(B o..o  ,e A !AioU Wi(S :i(S,w*head_hunterSiSU .o  K, i(S$po Is A HeadHunter!!!!(i(s o..o  ,f wo*wo*oa/!#oa/!+{5oZP_SUPERSHOCKRIFLE A !D WioU WiS :iS,iS$ w*combo_whoreSiSU .o  K,po Is A ComboWhore!!!!(i( o..o  ,g wW* wo*|WoWA  W2X2}L2b=&eg#-p '4-p (bwb*wb*Eb:b%%%p%b:b&&%p&bba/!"ba/!#wb*"{bPlayerELb^wb*&ba/!NED %6N ERED &Ei bE\ b\a'b ^]-rEi bED %Ei *]-wE\ *E\ * ]R^-RrEi bED %Ei *^-wE\ *E\ * EGbEYbba/!"JzEcB.bBB~B:EcB{Ec-a wx*:E(R,Mx`Ec zM!DISABLEDE|E(R${M&!E|_1M,zE|E|E(R$E(R$E(RFbb%EqbEq%Ez%sbws*}s-Ezsss<bbH% -{"-k"mtimelimit_-L_wH*Ha!Y wv*wv*v-HVH* f2X a_Y~l.. _ t-r0' .. y-s0' .. m-b' .. |X ?X 0X $X X 'h X X X $WX lXX l  \2g1~n8g1h1$-@ %w    ]2d].a"d.wd*&da/!N.dP?d d6T"R$6N "R$6W "R$6L"R$6Z"^$6R "C$"(_$"(j$"O %6p"C$6u"C$"(S$"G%"Y%"I%"[%"(C$6T "x$6j"x"c"|"(R$"D %6{"C$"i *"\ *"}%"d%"t%"g%"i%"n%"A%"o%"p%"A%6d";$6l";$6o";$6i"9$6f"9$6p"9$6e"!$6a"!$6Z"!$6`"!$6S"$6Q"$6Z"$6v"$6V"f$6C"f$6F"f$6d"~$6f"~$6g"~$"(s$"($"(B $"O$"S$"z%"q%6S"C%6T"C%6Y"C%6`"C%6]"C%6_"C%6d "C%6c"C%6e"C%6h"C%"N$"v%6i"C%6^"_$6_"@ 6l"@ * _2\`JMatch Started7-D-M '-n' M2#O~L ] .-Z zJ] @J.  tz=:6S@ :6Q@ :6Z@ :6v@ :6V@ f:6C@ f:6F@ f:6d@ ~:6f@ ~:6g@ ~:@ (j:@ (_  y  mz=:6S@ :6Q@ :6Z@ :6v@ :6V@ f:6C@ f:6F@ f:6d@ ~:6f@ ~:6g@ ~ 8#? #O#d#O&#J $#J! $#M! $#c $#O! =,#L! !-Z #U!##?,]#aJ(#y]# aRz(#x].  t#aR6S@ (#W]#aR6Q@ (#Z]#aR6Z@ (#[]#aR6v@ (#\]#aR6V@ f(#^]#aR6C@ f(#a]#aR6F@ f(#b]#aR6d@ ~(#d]#aR6f@ ~(#k]#aR6g@ ~(#t]#aR@ (j(#w]#aR@ (_(#]#aR@ ((#~]#aR@ (B (#k] y k$#aR@ (s( $:@ (s&#aR@ (S(#5aS:@ (s,:@ (S(   y  m#aR6S@ (#W]#aR6Q@ (#Z]#aR6Z@ (#[]#aR6v@ (#\]#aR6V@ f(#^]#aR6C@ f(#a]#aR6F@ f(#b]#aR6d@ ~(#d]#aR6f@ ~(#k]#aR6g@ ~(#t]#a0(#w]#a0(#]#aR@ ((#~]#aR@ (B (#k] y $#aR@ (s(  $ :@ (s&#aR@ (S( #5aS:@ (s,:@ (S(   `2bP_D a2Dy]r-(r`rtrwrzDwD*r xDDDjrj Errrd h2 DG .fAs@-F-Pj?K"-I-p"-T-a^%]&z{/|D0FE0eQ0f`0gb0}c0~e0Af0Bh0Cj0\m0en0oo0rq0Bz0C{0G@1LA1OB1TC1XD1ZE1-S-~.I J1KI!-f-MXl0^F1eK/-[-Z-`-[ M1 % ,(6T R$6N  R$6W  R$6L R$6Z ^$6R  C$ (_$ (j$ O %6p C$6u C$ (S$ G% Y% I% [% (C$6T  x$6j x D %6{ C$ c | (R$ i * \ * }% d% t% g% i% n% A% o% p% A%6d ;$6l ;$6o ;$6i 9$6f 9$6p 9$6e !$6a !$6Z !$6` !$6S $6Q $6Z $6v $6V f$6C f$6F f$6d ~$6f ~$6g ~$ (s$ ($ (B $ O$ S$ z% q%6S C%6T C%6Y C%6` C%6] C%6_ C%6d  C%6c C%6e C%6h C% N$ v%6i C%6^ _$6_ @ 6l @ * ^ c2d2e2Z g2+RdO.a  h .EUT_Textures.EUT_Fill g .EUT_Textures.EUT_HeadShots   BHwO*Oa l2Nt6, b.ppZ.Alt_Denied 'Erb*b `.ppZ.Alt_HeadHunter 'r`*` a.ppZ.Alt_FlackMonkey 'ra*a ].ppZ.Alt_ComboWhore '!r]*] ^.ppZ.Alt_KillingSpree 'lr^*^ _.ppZ.Alt_Rampage 'r_*_ c.ppZ.Alt_Dominating 'rc*c h.ppZ.Alt_UnStoppable 'Erh*h j.ppZ.Alt_Godlike 'rj*j W.ppZ.Alt_WhickedSick 'rW*W V.ppZ.Alt_red_team_is_the_winner '*rV*V U.ppZ.Alt_Flawless_victory 'yrU*U T.ppZ.Alt_blue_team_is_the_winner 'rT*T S.ppZ.Alt_Last_Second_Save 'rS*S R.ppZ.Alt_Red_Team_Scores 'lrR*R Q.ppZ.Alt_Red_Team_takes_lead 'rQ*Q P.ppZ.Alt_Red_Team_increases_their_lead 'rP*P O.ppZ.Alt_red_team_Dominating 'lrO*O N.ppZ.Alt_Blue_Team_Scores 'rN*N L.ppZ.Alt_Blue_Team_takes_the_lead 'rL*L K.ppZ.Alt_Blue_Team_increases_their_lead 'orK*K J.ppZ.Alt_blue_team_Dominating 'rJ*J G.ppZ.Alt_HatTrick ' rG*G F.ppZ.Alt_HitSound 'PrF*F E.ppZ.Alt_HitSound_F 'rE*E k.ppZ.Alt_Double_Kill 'rk*k m.ppZ.Alt_MultiKill '+rm*m n.ppZ.Alt_megakill 'rrn*n o.ppZ.Alt_UltraKill 'ro*o p.ppZ.Alt_MonsterKill_F ' rp*p q.ppZ.Alt_LudicrousKill 'R rq*q s.ppZ.Alt_HolyShit_F ' rs*s t.ppZ.Alt_Ownage ' rt*t  _ @^2NvcG. & th%#hN&cheh&eNeO [cO [ce?eO [cO [+eOcOceeOcO+eOcO,?eOcOceeOWcOcOhOhOWh$E 7 yh%4hN&cheh&eNeO [cO [cePeO [cO [+eOcOceeOcO+eOcO,?eOcOcee`WcOcOhOhOWh5E B mE  j@o2O+zNDp-y I -i' xk ym zn {o |p }q @s AtUkXmYnZo\p]q^sctSW% (^& (_, (c, (h, (j%(W^&(W_,(Wc,(Wh,(Wj{ -ZdRfNgQiLoP}KAOjJhbRVMTKUJSIGbaV`T]GFEE::$a @O%T$/ a0 k |{O,Ov"k  OT10S&/ a0 |"w|"*SD @10-Nra cwr*CTF Stat Link Created:Vr!'y&Smart Capture the Flagx-a/a0 d !owxd IpToCountry LocatedVx!'w10 l _1V rk5*V <K6TV RV D %V i *V \ *L(wL*pLLa/!"La/!#wL*"{LPlayer:L:V wLV wp\ *6LpRw*-flag_assistR6LpR\]'p\ *L<[L6ppYou get R[ bonus pts for the assist!W:p(_%LppppYou killed Rp(_ people sealing off the base. You get S:p(_:C bonus pts!p(_$:p(j%LppppYou killed Rp(j people covering your FC. You get S:p(j:@ bonus pts!p(j$LL s2f M\.~S:l S~S:9l Sf f ~f NAME=l f ~f NAME=,~l ?{l ~l ?{FailedParse{FailedParse~f FACE=l f ~f FACE=,}~l ?b l ~l ?g~b .b b ~b .&zb FailedParseb FailedParseb FailedParsezb IVAN'( j2XQkG. & ti%#iX&aibi&bXbM [aM [ab?bM [aM [+bMaMabbMaM+bMaM,?bMaMabbOdaMaMiMiMdi$E 7 yi%4iX&aibi&bXbM [aM [abPbM [aM [+bMaMabbMaM+bMaM,?bMaMabb`daMaMiMiMdi5E B mE  n2bF>%<rb*"zbPlayer KbKID?KG?KGKY?,d%,d, K[, :6TKR:6LKR,:6ZK^:6N KR:6uKC :6pKC:6W KR:6R KC,:6{KCJb q2iJBh<ri*"ziPlayer xij%u :6dx;:6lx;:6ox;:6px9:6ix9:6fx9:6ax!:6ex!:6Zx!:6`x!:6^x_:6dx;%j:6lx;%j :6ox;%j4:6px9%j[:6ix9%j:6fx9%j:6ax!%j:6ex!%j:6Zx!%j:6`x!%jE:6^x_%jx[u j t2|-o M~}|p z}FailedParse_FAILEDPARSE^Your Client Failed to Parse at Prelogin CorrectlyClient Failed PreLogin with a Failure to Parse Options|!'~_^{-o _ILLEGALFACE^Ivan is not an authorized Face稨Client Attempted to PreLogin with Face}--p |!'~_^ u2 21W1 40p2w As-bp %p w &Qp Mp &Mw Mr [Qr [QM+Mr [Qr [+MrQrQMMrQr+MrQr,?MrQrQMM; QrQrp rp r p  r2x2]@HFFppF\FlagCap\RKFppF\AssistsBonus\R[FppF\FlagKill\RJFppF\CoversBonus\R@FppF\SealsBonus\RCFppF\DeniedBonus\RYFppF\SavesBonus\RWFppF\bEnhancedSprees\T-yFppF\bEnhancedMessages\T-ZFppF\bShowIPS\T-PFppF\bLogMods\T-OFppF\bCheckDefaults\T-yFppF\HitSoundSounds\T-uFppF\DemoRequest\T-wFppF\AnnouncerLevel\RIFppF\RedTeamName\AFppF\BlueTeamName\@F F@w2|E^lM+r|*Smart Capture the Flag Capture the Flag-~ -t::$--|--~ |Bpppppp| , game, FlagCap, RK|Gpppppp| , game, AssistsBonus, R[|Cpppppp| , game, FlagKill, RJ|Fpppppp| , game, CoversBonus, R@|Epppppp| , game, SealsBonus, RC|Fpppppp| , game, DeniedBonus, RY|Epppppp| , game, SavesBonus, RW|Kpppppp| , game, bEnhancedSprees, T-y|Mpppppp| , game, bEnhancedMessages, T-Z|Fpppppp| , game, bHitSounds, T-u|Hpppppp| , game, bDemoRequest, T-w|Fpppppp| , game, BlueTeamName, @|Epppppp| , game, RedTeamName, ASmart Capture the Flag y2Ne@UtdVz~Vz.&-q"`-yd tUT_SHIELDBELTz?` UDAMAGEz?` WARHEADLAUNCHERz?` UT_INVISIBILITYz?` HEALTHPACKz?` 5ARMOR2z?` ]UT_JUMPBOOTSz?` @Nzt:t&rN*'N @zh,,7f,(,d@!hB!fD!,(,de,,F!ed bUT_SHIELDBELTz?hz? UDAMAGEz?fz? WARHEADLAUNCHER~%~:Tz ~v"z?@!z?~ \UT_INVISIBILITYz?B!z? HEALTHPACKz?D!z? ARMOR2z?ez? UT_JUMPBOOTSz?F!z? 9@Nzt:t&RrN*'rN @z tv2Ywc. 4 t{%1{&`{l{&l:6Sl^ :6Ql^ :6Zl^ :6vl^ :6S`^ :6Q`^ :6Z`^ :6v`^ `lMl^ [`^ [+l^`^`ll^`^+l^`^,?l^`^`llO@`^`^{^{^@{$a S y{%P{&`{l{& l:6Sl^ :6Ql^ :6Zl^ :6vl^ :6S`^ :6Q`^ :6Z`^ :6v`^ `lll^ [`^ [+l^`^`ll^`^+l^`^,?l^`^`lln@`^`^{^{^@{Ca ^ ma  z2OwN^m%rO* r0*- grO*r0*rO* lOG!0s$P0G!zH!5OH! ENFORCER DOUBLEENFORCER ZP_ENFORCERl}6SlC6SlC[o-u w!>:0:$! P[  0s$ O0!<s k UT_BIORIFLEld6TlC6TlC[<-u w!l:0:$! P[  0s$ O0!Bs k SHOCKRIFLElt6YlC6YlC[-u w!DP[:0:$! P[  0s$ O0!?s k SUPERSHOCKRIFLE ZP_SHOCKRIFLE {ZP_SUPERSHOCKRIFLElA6hlC6hlC[-u x:0:$! P[  0s$ O0!;s k PULSEGUNlg6`lC6`lC[-u w E!qB:0:$! P[  0s$ O0!3s  !_:0:$! P[  0s$ O0!3s  k ZRIPPERli6]lC6]lC[ -u w ~!\{:0:$! P[  0s$ O0!(s W !O:0:$! P[  0s$ O0!(s W T!AQ:0:$! P[  0s$ O0!(s W k $MINIGUN2ln6_lC6_lC[-u !w!>!:0:$! P[  0s$ O0!:s k y UT_FLAKCANNON6_l@ ?&lA6d lC6d lC[6_l@ 6ll@ 0  w6ll@ 0%6_l@ ?&lA6d lC6d lC[6_l@ 6ll@ 0 -u w  !O :0:$! P[  0s$ O0!2s v s !~p :0:$! P[  0s$ O0!2s v k UT_EIGHTBALLlo6clC6clC[ -u w G !DD :0:$! P[  0s$ O0!/s  !@ :0:$! P[  0s$ O0!/s  k SNIPERRIFLE ZP_SNIPERRIFLElp6elC6elC[& -u w !> :0:$! P[  0s$ O0!!s   !A :0:$! P[  0s$ O0!!s  k IMPACTHAMMER' -u  w!4 :0:$! P[  0s$ O0!4s k )TRANSLOCATOR -u &w!s&:0:$! P[  0s$ O0!9s k hI!e-Mlv6ilC6ilC[-u w !>:0:$! P[  0s$ O0!!s e b!A_:0:$! P[  0s$ O0!!s e k  }2I1 > I1H1'( ~2h I ǐ6p6h 6p6h 6p6h ?jSb$ph '( d|2AZVc. 4 tE%1EA&fEeE&eA:6Se_ :6Qe_ :6Ze_ :6ve_ :6Sf_ :6Qf_ :6Zf_ :6vf_ feMe_ [f_ [+e_f_fee_f_+e_f_,?e_f_feeODf_f_E_E_DE$a S yE%PEA&fEeE& eA:6Se_ :6Qe_ :6Ze_ :6ve_ :6Sf_ :6Qf_ :6Zf_ :6vf_ fele_ [f_ [+e_f_fee_f_+e_f_,?e_f_feenDf_f_E_E_DECa ^ ma  A3p@3{ X \(r{* rV!* :X!% >{a/!" :X!&o!B o!( o!2 o!/ o!! o!; o!9 o!? o!< o!3 o!: o!L o!4S{..{  ,{N$C{V!o  yF3B3K!f;-b % K!&S U &UK!:6SUX :6QUX :6ZUX :6vUX :6SSX :6QSX :6ZSX :6vSX SU9UX [SX [+UXSXSUUXSX+UXSX,?UXSXSUU;Y!SXSX X XY!  J!L!J3E3LC k rL* rI* \rL*rI*rL*  -uUaa !Bb,3bLIL &!(b,4bLIL |!2b,5bLIL !/b,6bLIL (!!b,7bLIL ~!;b,8bLIL !9b,9bLIL *!?b,:bLIL !<b,;bLIL !3b,<bLIL ,!:b,GbLIL !4b,IbLIL  Ua:LN&LN$ 5L ENFORCER DOUBLEENFORCER wZP_ENFORCERb, bLIL-N' UT_BIORIFLEb, bLIL-N' SHOCKRIFLE SUPERSHOCKRIFLE ZP_SHOCKRIFLE ZP_SUPERSHOCKRIFLEb, bLIL-N' PULSEGUNb,bLIL-N' CRIPPERb,bLIL-N' MINIGUN2b,bLIL-N' UT_FLAKCANNONb,bLIL-N' uUT_EIGHTBALLb,bLIL-N' SNIPERRIFLE ZP_SNIPERRIFLEb,bLIL-N' U IMPACTHAMMERb,KbLIL-N' TRANSLOCATORb,MbLIL-N'  -u -N,LIL N@ v  N3+  O3V  P3R3P#  Q3_+=!L3PU P!B P!( P!2 P!/ P!! P!; P!9 P!? P!< P!3 P!: P!4'( FT3R0, eJ!wS*!S- } Hw} *1} a/!S-\rR*R-.} 0*S .} "0RS 1-\,rR*R-.} 0*S 1.} "0RSW $W$-\( %,RS*1 $W$-\( %,RS*1 G$W$-\( %,RS*1 $W$-\( %,RS*1 $W$-\( %,RS*1 +$W$-\( %,RS*1 1} } 5 W3`m| Kz`-'-{"'/a0 Z!!xBZ!A*10w* p``-a*w* p``a* X3[3z U%U}re *%e Ue U]e Ure *]Match Ended for Time Limit!U,e U/a0 @:@e 10_@]@@VwV*FVVq!bS.VwS*S-'S_SX- -ZVS:Se --ZV%&&?%..V  J, %&&?%..V  J, \&%%?%..V  J, &%%?%..V  J, VV^_-(@-'d' _3[!Yd r[!* [!a \3@e Y3]! 3/]!a/!#]!a/!S'1( a3i}z _ ri* Owi*d is Xiq}g,gR\\$c\ $:p%d ....Client Connected[IP]s  $=p%d ....Spectator Connected[IP]s  \$:%d [ERROR]: CRI == None[IP]s  $2%Auto Destroying FlockPawn:Vi $2%d [IP]s [MMI]g /$<%d [IP]s [Client MouseY]g |$<%d [IP]s [Client MouseX]g $c1%d [IP]s [BI]gYi  ]3a!5 -Va!~Va!.& e3I_6U rI* VIUcI0****************************************_0 $I*ppIllegal Hud Detected -@-1 $I;ppIllegal Mod Menu Item Detected -@-^!1 <$I3pIllagal Face Texture Detected -^!-1 y$I,ppMouseY Settings Changed @-1 $I-ppIllegal Tweaks Detected -@-1 $I-ppIllegal Tweaks Detected -@-1 3$I-ppIllegal Tweaks Detected -@-1 q$I-ppIllegal Tweaks Detected -@-1 $I1ppMouse Input Settings Changed @-1 $ IEppIllegal Time Variation between Client and Server @-1 D$ I*ppIllegal Hook Detected @-1 $ I-ppIllegal LodBias Settings @-1 $ I&ppIllegal Spectator @-1 $ I-ppIllegal Mouse Y Settings @-1 .$cI&ppIllegal Info Sent @-1 IhIf You Feel This was In Error Contact The Server AdministratorI$p^_I0****************************************YI @c!e!@f3{ 1dKq r{ * Ow{ *i{ lX{ }s , }B ,B REE$cE $ $ $ $ $ $ $ $ $07****************************************I7ppp%[EUT CHEAT] - s  - B i[IP]l07****************************************_{ Es B o $ -j 07****************************************I7ppp%[EUT CHEAT] - s  - B i[IP]l07****************************************_{ Es B  $ $ $ $ 07****************************************I7ppp%[EUT CHEAT] - s  - B i[IP]l07****************************************_{ Es B o l$c07****************************************H7ppp%[EUT CHEAT] - BI - B i[IP]l07****************************************_{ Es B o  h3nSfF -z N.uw.n t1.n$BHw.n { 1.n$BSB Z-H N."w.n y1.n$BHXXw.n _1.n$BSB -G N.w.n m1.n$BHw.n C 1.n$BSB  [@j3Ud&E[I%I}U[~p/*?:<>|,"UI&[p[_u[p[UI&I[ @m3u*7D.&}uM0upL0uu q!p!@o3l3%Bp!ppppS-*S0,-*S0,o!pppp*S0,:*S0,.*S0,p!o! /n3RA>:a/!t:R-(' bs3|/Vv>eb%]b,(SwbD*rbD|/bb cu3x/Whv=ec%]c,(SwcD*rcDx/cc g@v3t/X\b<Hgt/@~g:gg~g:g w3r/S,3r/ $-cw-y-dw-s"-[w-t"-fw-o"-Zw-w-hw-m"-iw-O-jw-u"mw_"-lw-g" 3$-cH-q-dH-u!-[H-h!-fH-x!-ZH-s-hH-{!-iH-V-jH-g!mHN"-lH-C" $-cR-Y-dR-N%-[R-K%-fR-P%-ZR-U-hR-V%-iR-T-jR-H%mRe%-lR-_%  y3VP=V $N.HpCheck Defaults/Tweaking..............Tw-yHpLog/Check Mod Items..................Tw-OHpEnhancedSprees ......................Tw-yHpEnhancedMessages.....................Tw-ZHpEnhancedDeathMessages................Tw-uHpShowIPS..............................Tw-PHpHitSounds...... .....................Tw-uHpDemo Requests........................Tw-wGpAnnouncerLevel.......................RwIGpMax Trace............................SwK"HpTeam Beacons.........................Tw-p"GpMin Mouse Y..........................Uw_"HpKick Speed Hack......................Tw-u"HpReport Messages......................Tw-t"HpAuto Taunts..........................Tw-s"HpAntiTimer............................Tw-q"HpStat Link............................Tw-NHpAuto Record Tourney..................Tw-o"HpKick MinY............................Tw-m"HpNo Overtime..........................Tw-k"HpIpToCountry..........................Tw-aHpbUsesCustomWeapon....................Tw-MHpbNoFlockPawns........................Tw-g"HpbNoDroppedFlags......................Tw-L?pbPauseJoin...........................T-n#pCTF.....:T-z #pTDM.....:T-H #pDM......:T-G 3*******************************************SV $N.HpCheck Defaults/Tweaking..............TH-qHpLog/Check Mod Items..................TH-VHpEnhancedSprees ......................TH-SHpEnhancedMessages.....................TH-V HpShowIPS..............................TH-WHpHitSoundSounds ......................TH-MHpDemo Requests........................TH-sGpAnnouncerLevel ......................RHQGpMax Trace............................SHJ"HpTeam Beacons.........................TH-m!GpMin Mouse Y..........................UHN"HpKick Speed Hack......................TH-g!HpReport Messages......................TH-h!HpAuto Taunts..........................TH-u!HpAntiTimer............................TH-i!HpStat Link............................TH-THpAuto Record Tourney..................TH-x!HpKick MinY............................TH-{!HpNo Overtime..........................TH-SHpIpToCountry..........................TH-SHpbUsesCustomWeapon....................TH-RHpbSuddenDeathOverTime.................TH-~!HpbNoFlockPawns........................TH-C"?pbPauseJoin...........................T-n#pCTF.....:T-z #pTDM.....:T-H #pDM......:T-G 3*******************************************SV $N.HpCheck Defaults/Tweaking..............TR-YHpLog/Check Mod Items..................TR-THpEnhancedSprees ......................TR-eHpEnhancedMessages.....................TR-vHpShowIPS..............................TR-UHpHitSoundSounds ......................TR-VHpDemo Requests........................TR-UGpAnnouncerLevel ......................RRLGpMax Trace............................SRc%HpTeam Beacons.........................TR-M%GpMin Mouse Y..........................URe%HpKick Speed Hack......................TR-H%HpReport Messages......................TR-K%HpAuto Taunts..........................TR-N%HpAntiTimer............................TR-L%HpStat Link............................TR-OHpAuto Record Tourney..................TR-P%HpKick MinY............................TR-V%HpNo Overtime..........................TR-[%HpIpToCountry..........................TR-FHpbUsesCustomWeapon....................TR-MHpbNoFlockPawns........................TR-_%?pbPauseJoin...........................T-n#pCTF.....:T-z #pTDM.....:T-H #pDM......:T-G 3*******************************************SV  t@{3x3i rN *WN tN xwt*WppW,ttt6W H+:,Za?''r*aErF*Fa\0cr*a[0r*.a d/a/T"$::$C:w.* .%BotPack.TimeMessage 8.. MNL)O *!Engine.Mutator%\s,{\ N,D * O=~s,:OD sD s:OD \rO *O D O t O D N%Engine.MutatorN\s1N *mwm*D O u O VmwD *rN *N D N s D Unknown Mutator in use: Vm!^mmY }3QIa/!Na/!L[ypppppV~V..unr?game=EUTSource.SmartCTFGame?mutator=i(Level Restart to Authorized CTF Gametype!^ a/!Ra/!Na/!a/! L^ypppppV~V..unr?game=EUTSource.EUTTeamGamePlus?mutator=i(Level Restart to Authorized TDM Gametype!^ a/!ta/!a/! a/!L`ypppppV~V..unr?game=EUTSource.EUTDeathMatchPlus?mutator=i(Level Restart to Authorized DM Gametype!^  ~3O-z (-H (-G (a/!-z 'w.1w-M= a~>' |a/! a/!N-H 'H.YzH-M= a~>' Ra/!a/!Na/!R-G 'R.\PR-M= a~>' -z -H -G Q  40 T"=O9 r* r* ;r.* {r8*8..8q B8y8U-Xx8tN8{n!6c8 m6}  6\8 m6  6Q8 m6@  6H8 m6B  6D8 m6I  6C8 m6J  68 m6K  6~8 m6L  6|8 m6M  6z8 m6m  6y8 m6l  8-B F-a-Ky$-e!8-M -e!'T"$-M 8-`8-nU.Fn -M 8-`8-nU.Fn 8x a:8x ,8x $8y E$8y$a ^$8y$a :.8(_&  K,H..rH* k!=%Hl!=&Hn!F` w*&a/!N  %wB*B-  &:D ,D .- 7w.*8-tF-k7{.L7:L,.a!b@.7-LF-k-L'. sshot.Auto ScreenShot Taken 3Y/Sp K.6w*-M  BbwK* w* KQw8*X$Q:X:8kGw:X8(Y* wK*:X8(YK:X8(YK:X8(YKXu::$wK*wK*wK*-M s!KK@X$:X, P:XKwP*wPKg.Pwg* -M g-(g-(:X\!gwg*rg*g*X=wK*wK* -M CKK*wK*wK* -M DKK*Y/  B4Z/GE8BhIZ/@:h% :h, chchb D4 500 @4qE@)K._wK*rK* wD* -M KDwK*rK* wC* -M KC!rK*rK* r* r* r* r8*K-'q ::$wK*wK*wK*-M Ks!K'$:, P:KwP*wPKg.Pwg*g-'g-'rg* -M g:\!wg*3:g:K:D , -Kbgg@gBg[ @Fcg[ BFcwg*3:g:KKbg:X,g@gBg%F-d 8-Ivqg$g[ @Fcg[ BFcH:g:$g$g$g$ g$g$g$g$g$g-(g?g$ wg wg g  :X, - - -F-o  - --a$ :,  w:K*P:K wP* wP*Pa/!Nqq?q&qqb!P t$C q?^?,q%5wP*KPqiwP*KPqK( % $C q?^q&wP*JP"  wP*JP" J( qaPDDq6qD?,C ?, ?,qaP( :P:KP s $q%qaKDDq=qD?,C ?, ?,Dq aK(  $q&qaJDDq=qD?,C ?, ?,Dq aJ( q" - - - - --aY"q?,FC q?^$" :,B:. wB*q:BqY"C  :B:BB B-q ?,  B-q ?, q ?,C ?,  w*-::$ - --a?~qKFpFGFQ }K:X,X:K%g-U-<qq?U~B?U~B-U??qq?UB2w*6G{+z6E{D?8G?8G8Y?,d%,d- - --F  --a aq-aF aq -f  Nqq  T/ 520F4R/F2R/ 9RED6Qy6Qy jBLUE6Qy6Qy GREEN6Qy6Qy b G4P/R/P/ 1 TRUE XON)ShowBoots: ON-a'-a'b ^0 hFALSE OFF)ShowBoots: OFF-a(-a(b )pShowBoots: T-a H4N/\,-N/ 1 TRUE YON)ShowLeader: ON-r '-r 'b _0 iFALSE OFF)ShowLeader: OFF-r (-r (b )pShowLeader: T-r  J4L/l*L/ 1 TRUE YON)ShowBeacon: ON-d '-d 'b _0 iFALSE OFF)ShowBeacon: OFF-d (-d (b )pShowBeacon: T-d  BK4J/P(J/ 1 TRUE UON)UseDot: ON-_ '-_ 'b [0 eFALSE OFF)UseDot: OFF-_ (-_ (b )pUseDot: T-_  M4H/Ql{%H/ 1 TRUE UON)AutoSS: ON-k'-k'b [0 eFALSE OFF)AutoSS: OFF-k(-k(b )pAutoSS: T-k C4OhW'r8* rF* r* Q%d.%R %[.*G$wgww*w-wa/!T-U'wa/!~o?w-A#'-"'m?wQwP:wa/!U-V'I#=wPR PR ,dgww_-}.?-{(/w}*i}W}-{'/|./w|*i|W|-{'-{$MA?,MA@4aiCMCMCC-U6$AWM!-"m #<m?b(mA4aiCMBMCCB-A#o ף<o?b(oABM4aiCMBMCBCB6-VACM4aiCMBMCCCBr--R %R ,zR z?&;A6R M6R MD:6,d:6,dq!vb(b%?@z6C?,?@zJa MR ?,MR ?,@BABR f--A?u?,@A?,M?,u~BAu-,2`?s?`b'b(sb(b%`A4a CBCCCB ,2`?s?`b'b(sb(b%` .%DA?,Du?,? --A??,u?,@ A?,M?,uAu4a CB@CCB --U  r8*8.." .-.,QDA?,Du?,? .,8zDA?,Du?,?"F-x --A??u~BG A?,M?,uB w8* w*w*t8L ttAu4a|!CBCBI r*r*  :,:%  :,q! .tDA?,Du?,?;F-h w*--A??u~BA?,M?, F-xu>CuBAu4aICBCBJ#ML#$':G,G $c A?, -$c c ?, ?, X$c c ?, ?, $c c ?, ?, c u?, K#J#:G&&@K#w"y"4aIBBw"y"BBGL#;F-a-V--A??u~BA?,M?,6F-hF-xu~CqF-hF-xu>CuBAu4aICBCBCB.:I#DA?,Du?,?- - -F-`  --a.o!k!l!=FG- - - - w*-awF*FG&-{6G{@"FG,-|I6E{ N4F/DM"F/ 1 TRUE XON)HitSounds: ON` $` $b ^0 hFALSE OFF)HitSounds: OFF` $` $b )pHitSounds: R`  P4D/X.i D/ 1 TRUE UON)ShowFC: ON-o '-o 'b [0 eFALSE OFF)ShowFC: OFF-o (-o (b )pShowFCs: T-o  @R4zC#?7~z.zz}z~z.&z @S4Q4o J|)EClient Commands: (Type directly into console or bind to key!))-AutoSS on/off Turns auto SS on/off)4ShowPing on/off Turns Ping Display on/off)4ShowTime on/off Turns Time Display on/off);ShowTeams on/off Turns Team Count Display on/off);ShowBoots on/off Turns Boot Count Display on/off)=ShowBeacon on/off Turns Team Beacon Display on/off):ShowFC on/off Turns Flag Carrier Display on/off)BShowWeaponAccuracy on/off Turns Accuracy Display on/off)/UseDot on/off Turns Cross Dot on/off)=EText: on/off Turns Colored Teamsay Messages on/off)<HitSoundSounds: on/off Turns HitSoundSounds on/off):Scope: 1,2,3,or 4 Toggle Through default Scopes)@Spectate auto Reconnect as Spectator if Spots Available)+QuickJoin auto Reconnect as Player)!F2 Advanced Server Stats)!F3 Advanced Player Stats):ShowTeamInfo Advanced Team Info / bind to any keyT/ T4}.eLU}. z1pEUT_Textures.EUT_Scope1G$G$b)(pScope texture Set: CpS 2pEUT_Textures.Sample1G$G$b)(pScope texture Set: CpS V3pEUT_Textures.Sample2G$G$b)(pScope texture Set: CpS 4pBotPack.RReticleG$G$b)#Scope texture Set: DefaultS P5pEUT_Textures.EUTReticleG$G$b)*Scope texture Set: Default Hidden)L337 Scope ActiveS  U4{.W1{. \0GJ0GJ0)%Show Accuracy/Efficiency: Offb/ 1GJ1GJ1)Show Accuracy: Onb/ 2GJ2GJ2)Show Efficiency: Onb/ )4pShowWeaponAccuracyuracy/Efficiency: SG/ V4y.] y. 1 TRUE XON)ShowTeams: ON-` '-` 'b ^0 hFALSE OFF)ShowTeams: OFF-` (-` (b )pShowTeams: T-`  W4w.jwq w. 1 TRUE TON)EText: ON-{'-{'b Z0 dFALSE OFF)EText: OFF-{(-{(b )pEText: T-{ X4u.TXu. 1 TRUE XON)Show Time: ON-h'-h'b ^0 hFALSE OFF)Show Time: OFF-h(-h(b )pShow Time: T-h Y4s.Y9Es. 1 TRUE XON)Show Ping: ON-x'-x'b ^0 hFALSE OFF)Show Ping: OFF-x(-x(b )pShow Ping: T-x )+0V7p..EUT_Textures.EUT_Scope1  r @U0 40[4 21\4J|-~"MJGFE}"zFFailedParseuFAILEDPARSEpYour Client Failed to Parse at Prelogin CorrectlyClient Failed PreLogin with a Failure to Parse OptionsE!'JGup{-~"uILLEGALFACEpIvan is not an authorized Face稨Client Attempted to PreLogin with FaceF--}"E!'JGup k]4t MA.~h:@#h~h:9@#ht t ~t NAME=u t ~t NAME=,~u ?Cu ~u ?CFailedParseCFailedParse~t FACE=u t ~t FACE=,}~u ?^ u ~u ?g~^ .^ ^ ~^ .&z^ FailedParse^ FailedParse^ FailedParsez^ IVAN'( c4zjIz(none){z~sz {w m~w ,w w ~w ,pppppp , game, GoodMutator, w Engine.Mutator^.zw  u e4W.xzH%spps:::VW. i4d4Ke6FI.- .%(-Y \&pppp , game, realstart-Y '' _4^+XNDp-S I -i' x y} zr {| |{ }y @w AvUX}YrZ|\{]y^wcvSu% (_& (^, (], (\, ([%(W_&(W^,(W],(W\,(W[{ -V d}fHgiIoF}NAGjSheRwMxKzJ{ITbfVgTnGWEe::$a @^%Y$/ a0 D#|{^,^d!D# ^Y10X&/ a0 c!wc!*XD @10-THa cwH*TDM Stat Link Created:VH!'y(EUT Tournament Team GameV-S/a0 F#!oU[F#U10 f4Nd) e.ppS.Alt_Denied 'Ere*e g.ppS.Alt_HeadHunter 'rg*g f.ppS.Alt_FlackMonkey 'rf*f n.ppS.Alt_ComboWhore '!rn*n _.ppS.Alt_KillingSpree 'lr_*_ ^.ppS.Alt_Rampage 'r^*^ ].ppS.Alt_Dominating 'r]*] \.ppS.Alt_UnStoppable 'Er\*\ [.ppS.Alt_Godlike 'r[*[ u.ppS.Alt_WhickedSick 'ru*u w.ppS.Alt_red_team_is_the_winner '*rw*w z.ppS.Alt_Flawless_victory 'yrz*z x.ppS.Alt_blue_team_is_the_winner 'rx*x {.ppS.Alt_Last_Second_Save 'r{*{ }.ppS.Alt_Red_Team_Scores 'lr}*} .ppS.Alt_Red_Team_takes_lead 'r* F.ppS.Alt_Red_Team_increases_their_lead 'rF*F G.ppS.Alt_red_team_Dominating 'lrG*G H.ppS.Alt_Blue_Team_Scores 'rH*H I.ppS.Alt_Blue_Team_takes_the_lead 'rI*I N.ppS.Alt_Blue_Team_increases_their_lead 'orN*N S.ppS.Alt_blue_team_Dominating 'rS*S T.ppS.Alt_HatTrick ' rT*T W.ppS.Alt_HitSound 'PrW*W e.ppS.Alt_HitSound_F 're*e .ppS.Alt_Double_Kill 'r* }.ppS.Alt_MultiKill '+r}*} r.ppS.Alt_megakill 'rrr*r |.ppS.Alt_UltraKill 'r|*| {.ppS.Alt_MonsterKill_F ' r{*{ y.ppS.Alt_LudicrousKill 'R ry*y w.ppS.Alt_HolyShit_F ' rw*w v.ppS.Alt_Ownage ' rv*v  g4+DzE .fL sK-F-Wj?J"-I-m!-T-Szi/|h/Fg/ef/fe/gb/}^/~]/A\/B[/CV/\S/eA/oo.rn.Bm.Cl.Gk.Lj.Oi.Th.Xg.Zf.-S-A0I b.Kz"-f-RXU/^e.en/-[-V -`-[ a.+% +,(+O %+(C$+}%+d%+t%+g%+i%+n%+A%+o%+p%+A%+z%+G%+Y%+c+|+(R$+q%6V+f$6C+f$6F+f$6d+~$6f+~$6g+~$6d+;$6l+;$6o+;$6i+9$6f+9$6p+9$6e+!$6a+!$6Z+!$6`+!$+e$+d$+(s$+($+(B $+(S$6J +r$6b+r6S+$6Q+$6Z+$6v+$+[%+I%6a+E%6`+E%6]+E%6W+E%6\+E%6Y+E%6o +E%6V+E%6U+E%6R+E%+f$+v%6Q+E%6^+_$6P+e 6P+e *+2  s4R.PYE,-Y  K  R.V. r4P.@`7JP. %% p C5 B& Bp C5 `, Bp C5 ~, Bp C5 , Cp C5 ,  Cp C5 , @Cp C5 , `Cp C5 , p @C5 2,  Bp @C5  h4HyfLXH-(H`HtHwHzHwH*H xHHHjHj EHHHd k4bzZD n4L4j Qz2I. !C\ h   S!~EF-{\ \P\   |!k\ ]\%***z !A !u-M zzQ Qz\ g   !O-M zzQ Qz\ g   \ g  F-{a\ h a\ \j :j w*?,zz &&a\ h a\ j :j w*?,&zz c%2c,(r6c*6c\6c%6cj 6c*6c?\\-6cz&6c\i%j z c-c%nc,}cc&c96,\6,%6,j 6,*6,?\\-6,z06,\i%j z l4M#]W[ 4M#.M#4O %4(C$4}%4d%4t%4g%4i%4n%4A%4o%4p%4A%4z%4G%4Y%4c4|4(R$4q%6V4f$6C4f$6F4f$6d4~$6f4~$6g4~$6d4;$6l4;$6o4;$6i49$6f49$6p49$6e4!$6a4!$6Z4!$6`4!$4e$4d$4(s$4($4(B $4(S$6J 4r$6b4r6S4$6Q4$6Z4$6v4$4[%4I%6a4E%6`4E%6]4E%6W4E%6\4E%6Y4E%6o 4E%6V4E%6U4E%6R4E%4f$4v%6Q4E%6^4_$6P4e 6P4e * r @{4J.MO"r J.3r %r  p#JD?r ?,<r r ,<{r , w ppw 0Sr w pw Sr J, w ppw 0SJw pw SJw  A5K.oQfD,-Y  K K.L. p4\hfJMatch Started7-D-M '-n'  o4v4\+' w4 u4Xc]X@O#?C.XaN#P#|-X aN#(O#P# ]@t4@.~g$@.y-  ~4Ad;]K%K}A[~p/*?:<>|,"AK&]p]_u]p]AK&K] @P#E5D*/.&}DB.DpA.DD S#@ x4AJ!wF*F%AF.ADFDA?,DA?P?,?F?  B5F.DIC,-Y  K  F.G.  F5uA7C"-Y  K   @5UR.3 QD?UUTUb DU~BTE=U1w*[:,-U$O?Q?:[&EUOU?b UU[TUUO?,TU?b ?,TUX:[, U>a @?T?,@?T?,@ABUOa @?T?,@?T?,@A<[AB:[J[UOU?b U4a CTBTCBCB8-w*M:U?Q?M&E?,@TUU?,`TU$UU4a CTCTCCC@M,dUx%I wI *I a/!xwI [.I r:[J*:[J[w:[JKr[1::[J:[:[J[xx,dI I o[jCThBTx&cx, rxJ*UUb&?U?Q?x&EU?b ND?x&?,,@Qx&,, U(a jh?N?QBBYYwxJ[JMx3:,-U$UzUUb&?U?Q?x&EU?b xJ-UxJTYND?x&?,,@Qx&,, U(a jh?N?QBBxj@?T?,h@?T?,@x& x,  wxJ*O?Q?x&E?,T wxJ[UOU?b ?,TUt :,-U$ U x, U&a jhAB U.a jhA?xAB wxJ*UOU?b ?,4TUV#BT?xJ?xJBU-a V#ATBBCAx E@4%%JS#ppppS-*S0,-*S0,Q#pppp*S0,:*S0,.*S0,S#Q# G5{-H5BEE%=E, 36{E%{-EE L5Yne?2a~@ :::Y~@ :::pp , @ Y@ @ Y,pp , @ 0a/!RC%0C.pppppp , teamscore, SC, SDC.C z4MKhurM*uI !m I !p I !H I !t I !MY I  wM* wY *wMY I !~ I !OKMVY Ke:Ke,Ke${w*flak_monkeySKSV.M  K,pM Is A FlakMonkey!!!!(K(B M..M  ,eI !AKMVY K(S:K(S,w*head_hunterSKSV.M  K, K(S$pM Is A HeadHunter!!!!(K(sM..M  ,fwM*wM*Ma/!#Ma/!+{5MZP_SUPERSHOCKRIFLEI !DY KdKMVY :Kd,Kd$w*combo_whoreSKSV.M  K,pM Is A ComboWhore!!!!(K(M..M  ,gwY * wM*|Y MY I  H5U#|Nx2U# % & , %, -, 2, 7, <, A, Y, -|'M$ ^, c, h, m, ,-|'M$ , , , , ,-|'M$ , , , , ,-|'M$ , , , , ,-|'M$ , 0U#,-|'M$  I5|r~|7r|U r|*U?&%w|* wU* w|U|a |X#U6J X#r$S6ba r?,{a S:6J a r:Q-S ':6J a r|**(!O6ba r?,6J a r$6ba r%|-U-3:|:U|?&{- w|U w|*U-U?&Ur|U-  U-r|*|-.r|U r|*:U?&:|:U:|?& ?%:U?&|?&d- ?%Pw|*|-/:|xteamscorelimit-S-~! % -Z#%&mSuddenDeath P5qNLwq*:q:$L:q:$q$ O5s-I>C@ pppppppp@ :::s-, t-, Sv-, x- r-Q5jr8r6qj%* Z?D6nj%D\&6m j%%[Z?6m j%[Z6Rj%6m j%6fj%6Dj%%\[\?6Rj%?6Rj%6m j%6fj%6Dj%BIstat_playerscore6{j%SD6qj%Istat_playerfrags6{j%S6Rj%6fj%Istat_playerkills6{j%S6Rj%Istat_playerdeaths6{j%S6m j%Istat_playersuicides6{j%S6fj%Istat_playerteamkills6{j%S6Dj%Istat_playerefficiency6{j%U\Istat_playertime_on_server6{j%U6nj%Istat_playerttl6{j%U[ ^5p-N׶p- ZP_SUPERSHOCKRIFLE @SUPERSHOCKRIFLE6m  SZP_SNIPERRIFLE qSNIPERRIFLE6M  ~ENFORCER DOUBLEENFORCER ZP_ENFORCER6}  UT_BIORIFLE6  SHOCKRIFLE ZP_SHOCKRIFLE6@  PULSEGUN6B  0RIPPER6I  KMINIGUN26J  kUT_FLAKCANNON6K  UT_EIGHTBALL6L  r- R5o-p5`&o-x %x , 6{x %f,!x hx 'rx 6{x %x &n  U5W 55"pp , game_start @C5BN 8B?k?ck??D=B Djj>jL>k?&?,jk?,?,ju kBB>?Bu ?Bu B$Bb&?,h,crc*cGrh*hG,B&acu u BBBFQBh?Bu ?, F}?Bu ?, F|F-_ B&ahu u BBB-'B [5q@33+~q:qq~q:q W5kX5Y5`5^m21^a/!#i.^@i0.0.0.0i@ipppppppp , player, IP, S^, i @T5l-u=8r* r8*(i 6iY#i9 8jCaj-i-Y#i'w.C*.C-.C@@wC*Fl-C(4 r*-(' m5W#5׵-VW#~VW#.& Ct5n-P0n- r{ w{ *{ -{ rm{ { { @r J5r{ʅv6J rr6J rr )$ .$ 6$t $w*Wpppppp , spree, spree_meg, Srt $6Srt $6Qrt $6Zrw*Wpppppp , spree, spree_lud, Srt $ $ $ $ $ $ $ $ $ $ $ $6vrw*Vpppppp , spree, spree_hs, Srt q$6vr[w*Vpppppp , spree, spree_hs, Sr6J rr$t   a5d5]ߌtVwV*~V->rf*1VffVVVR %^ &^ ^ R R ^ ^ ^ %i^ _R ^ %R ^ %(^ R @@VjwV*FVc .VCwc *?- -V Vc :c R --V V%&..V  J, &%..V  J, c -' rc fc *4c fc XVq!bVVd' @j5@]5f5F^( g5h5 e5Z#[ xBa-%Z#b(b(:~>vZ#b(b(:~> R b5av8<wm*m-a`m[w[*3:m:[ma/!"2m,#wm*.mD*!o$pAw[* wm*wm*w[**:m:[[O w[*w[m`a:[(C&-M..[  o %a`m[:m:[+:[(C& w[m-M..[  o &a`m[ i5KH)CKKapa#: jf#_jKab#jf#kK?,_j?,Kk?d#[K%k_Kaa#Kk?d#[K&Kab#KKK p5Z UzKs![#?%l \#[#,l \#Z ?c-Z ?d-Z D?,l z]#%c $RD<F?]#MRZ ?Z cDo:?RnZ cZ l c RRccD #?k7a m?,Bm?c#,ABk?,m ~@[-Uuf Uqb, b,  b, b, b, b, b ,b%6Vf f , b&6Cf f ,b,6Ff f ",b,6df ~ M,b,6ff ~ ,b,6gf ~U%w*Wpppppp , spree, spree_wks, Sf  g wg *tg a/!Sg  bUg  b,-S KbU**..g  ,hg g . r5yJ ^h<ry*"zyPlayer tyU%g#:6dt;:6lt;:6ot;:6pt9:6it9:6ft9:6at!:6et!:6Zt!:6`t!:6^t_:6dt;%U:6lt;%U :6ot;%U4:6pt9%U[:6it9%U:6ft9%U:6at!%U:6et!%U:6Zt!%U:6`t!%UE:6^t_%Ut[g#U v5n ,-d~n transloc4~n dom_ %zn translocatePHJl-6S P%(n lU-W-`--Y  K $zn flag_takenzn flag_pickedupPHJl-6S P%'bbzn flag_capturedPHJl-6S P%( l5pcAݨp(paTESTS-i#::a.ppwa*HpSaD?Dp??i#'  A6`s`\)`a/!, lH`pppppp , player, Disconnect, S`6ol%-Y  K f,!lhl 'rl6{l% S-s5^e7toV}~V}.&-i!`-qo tUT_SHIELDBELT}?` UDAMAGE}?` WARHEADLAUNCHER}?` UT_INVISIBILITY}?` HEALTHPACK}?` 5ARMOR2}?` ]UT_JUMPBOOTS}?` @^}:&r^*'^ @}v,,7u,(,dn#vq#us#,(,dr,,v#ro bUT_SHIELDBELT}?v}? UDAMAGE}?u}? WARHEADLAUNCHERp%p:Y} pd!}?n#}?p \UT_INVISIBILITY}?q#}? HEALTHPACK}?s#}? ARMOR2}?r}? UT_JUMPBOOTS}?v#}? 9@^}:&Rr^*'r^ @} {5ax5~5]w'OOppO\bEnhancedSprees\T-SOppO\bEnhancedMessages\T-V OppO\bShowIPS\T-WOppO\bLogMods\T-VOppO\bCheckDefaults\T-qOppO\HitSoundSounds\T-MOppO\DemoRequest\T-sOppO\AnnouncerLevel\RQOppO\RedTeamName\L OppO\BlueTeamName\KO u5a PXva a a ?,7a h?-?%a ?X?%a ?X!-?a ?,??hh %a ?,ha  O@}5kx?,gr8*$8-`8-n k$k-'kEkkaTESTA-B w.*wB?,BS?%k?,wB?,BwB?,B[w[*{[wB{[wB{[wB{[wB\ %6\ ,\ %g-f!-f!'z!\ .{\ .z!-G$'kwk\ . ka\ .(z\ .6wB?&\ 8-`8-M .%-G$k-(kcBk K{8[ Y8[ }Y,2YY,2kwkk aY(wB?&kwkkaEUT SOURCE(wB?&kwkk4aType ShowHelp In Console For Extended Commands(wB?&kC$?Gk*k?,C$?,wckk$kGk-(kcBk G6|#tR'(|#a/!, |#E- |5mE-rm*EUT Tournament Team Game Tournament Team Game-~#-z::$--m--~#mKppppppm , game, bEnhancedSprees, T-SmMppppppm , game, bEnhancedMessages, T-V mFppppppm , game, bHitSounds, T-MmHppppppm , game, bDemoRequest, T-smFppppppm , game, BlueTeamName, KmEppppppm , game, RedTeamName, L EUT Tournament Team Game B6XF=<rX*"zXPlayer qXqID?D?qG?qGqY?,d%,d, q[, X?,2?:6Vqf,d?:6Cqf,d?:6Fqf,d?:q(s,d?:6Sq, ?:6Qq, ?:6Zq, ?:6vq, JX C6Bd\!!!!!!!!!!!!!!! CALC END STATSB%B,BwB[  B^ B[ ~B)B%JB, @wB*FBDFDF@{FPLAYERsFIFBB%B,B[ ~B^ B[  BwBQ[ K wK *K a/!"K a/!#wK *"{K PlayerK w*-T8stat_playeraccuracySS[?weap_accuracyEnforcerSR6d;Dweap_accuracyGES Bio RifleSR6l;Bweap_accuracyShock RifleSR6o;=weap_accuracyRipperSR6f9@weap_accuracyPulse GunSR6i9>weap_accuracyMinigunSR6p9Bweap_accuracyFlak CannonSR6e!Fweap_accuracyRocket LauncherSR6a!Cweap_accuracySniper RifleSR6Z!Kweap_accuracyEnhanced Shock RifleSR6`!Dweap_accuracyCustom WeaponSR6^_:weap_hitcountEnforcerSS}?weap_hitcountGES Bio RifleSSd=weap_hitcountShock RifleSSt8weap_hitcountRipperSSi;weap_hitcountPulse GunSSg9weap_hitcountMinigunSSn=weap_hitcountFlak CannonSSAAweap_hitcountRocket LauncherSSo>weap_hitcountSniper RifleSSpFweap_hitcountEnhanced Shock RifleSSA?weap_hitcountCustom WeaponSSv9weap_damagegivenEnforcerSS6aE>weap_damagegivenGES Bio RifleSS6`E<weap_damagegivenShock RifleSS6]E7weap_damagegivenRipperSS6\E:weap_damagegivenPulse GunSS6WE8weap_damagegivenMinigunSS6YE<weap_damagegivenFlak CannonSS6o E@weap_damagegivenRocket LauncherSS6VE=weap_damagegivenSniper RifleSS6UEEweap_damagegivenEnhanced Shock RifleSS6RE>weap_damagegivenCustom WeaponSS6QE[weap_shotcountEnforcerSS<6d;}`weap_shotcountGES Bio RifleSS<6l;d^weap_shotcountShock RifleSS<6o;tYweap_shotcountRipperSS<6f9i\weap_shotcountPulse GunSS<6i9gZweap_shotcountMinigunSS<6p9n^weap_shotcountFlak CannonSS<6e!Abweap_shotcountRocket LauncherSS<6a!o_weap_shotcountSniper RifleSS<6Z!pgweap_shotcountEnhanced Shock RifleSS<6`!A`weap_shotcountCustom WeaponSS<6^_vK K 1 D6m.!mm?,dD?|,m  t6#H?%-Y  K oH#6fo% #@-C--6S o%-6S o%( Q6.L(f .b&?,B$h#.l.?T.?T.?,k .?,n.?, q.?, t.?PC B| -.$.L@@T.`D@@k .`D.^aPT?,.`Dk ?,.`D\C\C.$.$.@@T@@k .&aPTk CAC.HHCl.?,C ?.?,.4aPl.?,A@@ A.QHCluA.?,.?,| .4aPl.?,A@@ A.H.?,C ?.?,HCT.4aP.?,T A A@@.QuA.?,.?,| HCT.4aP.?,T A A@@.@$.$.GClGCT.4aP@l@TJCTBTB.b&?,B$.$.HCl@q.-aPltC CEC@@XB.@nHCT.>aP.?PC TBHCXB@@.,HCl@qtC .OaP.?.?PC CGC@@XB.=@n.?PC HCT.>aP.?PC T#CGCXB@@. M-N-l#6. % 6. PFw?6. ?,I@?,w?6. ?,I@?,J . l#w|   .1 p$tIJD0@|  ((m#J? N9|   R-.qo#J-m#JgJo#?,0>.*JCl?,2@k T. .@$[| | ./apppXSD[.SD?, [?, D[.%JCl@k T. .5appppR: SDg.SD?, g?, Dg.h# E6ws7Lqw,w%w&w%^ &^ &w,w&^ ,^ ,ww,^ k w&w%w&w%^ &^ &ww&^ k w%w%ww%^ k  I6Rw[m%rR* r-*- grR*r-*rR* jRK$-r$F-K$zL$5RL$ ENFORCER DOUBLEENFORCER ZP_ENFORCERj}6ajE6ajEVo-D ]!>:-:$! FV  -r$ R-!<r k UT_BIORIFLEjd6`jE6`jEV<-D ]!l:-:$! FV  -r$ R-!Br k SHOCKRIFLEjt6]jE6]jEV-D ]!DFV:-:$! FV  -r$ R-!?r k SUPERSHOCKRIFLE ZP_SHOCKRIFLE {ZP_SUPERSHOCKRIFLEjA6RjE6RjEV-D x:-:$! FV  -r$ R-!;r k PULSEGUNjg6WjE6WjEV-D ] E!qB:-:$! FV  -r$ R-!3r  !_:-:$! FV  -r$ R-!3r  k ZRIPPERji6\jE6\jEV -D ] ~!\{:-:$! FV  -r$ R-!(r W !O:-:$! FV  -r$ R-!(r W T!AQ:-:$! FV  -r$ R-!(r W k $MINIGUN2jn6YjE6YjEV-D !]!>!:-:$! FV  -r$ R-!:r k y UT_FLAKCANNON6Pje ?&jA6o jE6o jEV6Pje 6Pje -  w6Pje -%6Pje ?&jA6o jE6o jEV6Pje 6Pje - -D ]  !O :-:$! FV  -r$ R-!2r v s !~p :-:$! FV  -r$ R-!2r v k UT_EIGHTBALLjo6VjE6VjEV -D ] G !DD :-:$! FV  -r$ R-!/r  !@ :-:$! FV  -r$ R-!/r  k SNIPERRIFLE ZP_SNIPERRIFLEjp6UjE6UjEV& -D ] !> :-:$! FV  -r$ R-!!r   !A :-:$! FV  -r$ R-!!r  k IMPACTHAMMER' -D  ]!4 :-:$! FV  -r$ R-!4r k )TRANSLOCATOR -D &]!s&:-:$! FV  -r$ R-!9r k hz"e-Rjv6QjE6QjEV-D ] !>:-:$! FV  -r$ R-!!r e b!A_:-:$! FV  -r$ R-!!r e k  @6nNW&-a-a(U-a'.-(-( K6ULE--(C-'.-(-a( L6S0a0.-.-(_.-'-(-a( M6s,Y BF Ys, J6r, !r,p,'( N6q,TF Tq, S6I~}?0rQ*rQ* r * .a/!,Q?,Z e $QBQQ QQ  -H#QQ:l,C$lIn I?IH?I?,n ?I?,n I$IX I n Il [:l,C$[wQ*QQ]re*ele.j :e:lele.j n I?IH?I?,n ?I?,n I$Ib&?,J$Ien Il :l,C$wQ*QQrP*P.j LIQJ$w,  P6o,jF jo, gh}jmLJwh*J %hhC$ R6n,]F ]n, T6l,e!F el, O6x r"6q6x 6q6x 6q6x ?jXb$qx '( V6k,X&\F Xk, qX6i,W+ҾF Wi, W6} $(r}* rP$* :S$% >}a/!" :S$&j!B j!( j!2 j!/ j!! j!; j!9 j!? j!< j!3 j!: j!L j!4S}..}  ,}f$C}P$j  Z6e,W0KF De, g6J|C_N$JJ$J {J~BUzJeJ{Jj,Je{J4ag,CzBzBCBJQUJ%h,De?,zD{?,zz?JN$ \6c,Q5F Qc, R$^6a,o:%F oa, [6NC) rN* rF* \rN*rF*rN*  -DUcc !Bd,=dNFN &!(d,>dNFN |!2d,?dNFN !/d,@dNFN (!!d,AdNFN ~!;d,BdNFN !9d,CdNFN *!?d,DdNFN !<d,EdNFN !3d,FdNFN ,!:d,HdNFN !4d,JdNFN  Uc:Nf&Nf$ 5N ENFORCER DOUBLEENFORCER wZP_ENFORCERd,dNFN-I' UT_BIORIFLEd,dNFN-I' SHOCKRIFLE SUPERSHOCKRIFLE ZP_SHOCKRIFLE ZP_SUPERSHOCKRIFLEd,dNFN-I' PULSEGUNd,dNFN-I' CRIPPERd,dNFN-I' MINIGUN2d,dNFN-I' UT_FLAKCANNONd,dNFN-I' uUT_EIGHTBALLd,dNFN-I' SNIPERRIFLE ZP_SNIPERRIFLEd,dNFN-I' U IMPACTHAMMERd,LdNFN-I' TRANSLOCATORd,NdNFN-I'  -D -I,NFN `6_,l?F l_, I@b6\,PDF P\, a6FUDF!B F!( F!2 F!/ F!! F!; F!9 F!? F!< F!3 F!: F!4'( d6[,RIpF R[, p6U {&LR$U U $jU ~BUU dU jU `,U djU 4a^,CBCBU QUU %:],Dd?,Dj?,?U R$ f6pN9&-F -F (7-F ' h6Y,wVB@|Y,Y.a/!,.$You are already a Spectator! 8-p ."Changing to Spectator Mode.Disconnect.(b"OverrideClassBotpack.CHSpectator'.Reconnect@.Spectator Spots Full. i6X,qm].a/!,|X,.Joining Server.b"OverrideClass'.Reconnect e6D0 GJ!w}*!}- g Hwg *1g a/!S-|rD*D-.g 0*} .g "0D} 1-|,rD*D-.g 0*} 1.g "0D}M $M$-|( %,D}*1 $M$-|( %,D}*1 G$M$-|( %,D}*1 $M$-|( %,D}*1 $M$-|( %,D}*1 +$M$-|( %,D}*1 1g g 5 k6V,rzDjK-KBYou Must Be Logged In As An Admin To Access This Debugger! V, 1KInject UserFlag 1K Load Debugger Activated!-f 'B ?0KInject UserFlag 0K"Load Debugger DeActivated!-f (B  l6bm Tzb-'-Z'/a0 n$!xBn$A*10w* pb`-a*w* pb`a* m6Q,tF GQ, z6YoT$YY$W, ]$j Y~BUb b$ $j Y?,Ub YGYj :a$YgYGj Y4am$CbBbCBYQUY%:a$DG?, bDj ?,bb?u:]$YC'j j ~BbYGj Y4am$CbBbCBYQUY%:]$DG?, bDj ?,bb?YT$ o6P,\F \P, n6O,z2 X&c %q &q q c c q zO,SuddenDeathwc Won The Match In Sudden Deathwc q i5wi*wi*i-):ic iQ Q iiQ OiIQ IQ iiirQ *iwi*wi*i->rQ *1iQ Q iiiT2rc *q ,c q wMatch Ended for Time Limit!w@@iwi*Fie .iwe *- -V Ve :e c --V iZ%&..i  J, &%..i  J, e -'re Q e *e Q e Xiq!biiud' c {6gC" @a/!Rjgfs$E$D$ Z-Y  K bHgZHfb Z 6Db%6m Z%gfs$E$D$-6S Z%-6S Z%( G@v6hr6v$ -b3/v$a/!#v$a/!S'1( }6P zW_$+r2*r.*_a52\r2*Nar * ..a ZP_SUPERSHOCKRIFLE SUPERSHOCKRIFLE82?%2!Bv 2 -I6LQv 2-I'M2?%2!B2v -Iv 2M"2?%2!B2v -I6LQv 2-I'MM2!V v -I(A?P  O Y?6LQiAY?,di?%i6m Ci6m  ZP_SNIPERRIFLE SNIPERRIFLEh%r?26K 6K ?%hD?26K 6K ?h6M ?26K 6K ?%6axC6K ?26K ?2A?P  pY?6xQ:6ax6xQDYiAY?,dwi?%i6M Ci6ax$6M  ENFORCER DOUBLEENFORCER ZP_ENFORCERh%\?26{ 6{ ?%hD?26{ 6{ ?h6} ?26{ 6{ ?%6rxC6{ ?26{ ?2A?P  }Y?6lQ:6rx6lQDYiAY?,dai?%i6} Ci6rx$6}  WUT_BIORIFLEh%&?26| 6| ?%hD?26| 6| ?h6 ?26| 6| ?%6pxC6| ?26| ?2A?P  dY?6mQ:6px6mQDYiAY?,d+i?%i6 Ci6px$6  fSHOCKRIFLE 2 ZP_SHOCKRIFLEh% ?26} 6} ?%hD?26} 6} ?h6@ k ?26} 6} ?%6lxC6} ?26} ?2A?P  tY?6nQ:6lx6nQDYiAY?,d i?%i6@ Ci6lx$6@  PULSEGUNh% ?26A 6A ?%hD?26A 6A ?h6B 2 ?26A 6A ?%6kxC6A ?26A ?2A?P  gY?6qQ:6kx6qQDYiAY?,d i?%i6B Ci6kx$6B  RIPPERh% ?26C 6C ?%hD?26C 6C ?h6I  ?26C 6C ?%6jxC6C ?26C ?2A?P  iY?6rQ:6jx6rQDYiAY?,d i?%i6I Ci6jx$6I  MINIGUN2h%T?26E 6E ?%hD?26E 6E ?h6J ?26E 6E ?%6cxC6E ?26E ?2A?P  nY?6uQ:6cx6uQDYiAY?,dYi?%i6J Ci6cx$6J  QUT_FLAKCANNONh% ?26F 6F ?%hD?26F 6F ?h6K ?26F 6F ?%6^xC6F ?26F ?2A?P  AY?6vQ:6^x6vQDYiAY?,d%i?%i6K Ci6^x$6K  UT_EIGHTBALLh%?26I 6I ?%hD?26I 6I ?h6L U?26I 6I ?%6`xC6I ?26I ?2A?P  oY?6wQ:6`x6wQDYiAY?,di?%i6L Ci6`x$6L   K -fh%?26M 6M ?%hD?26M 6M ?h6l 4?26M 6M ?%6bxC6M ?26M ?2A?P  vY?6yQ:6bx6yQDYiAY?,di?%i6l Ci6bx$6l  _ |6vhv (-x$X`&^J-t$X6ov%^XX6pv%@@ -x$-t$6Tv%&pppppp , spree, 6Tv%,%,k, S6{v%6Tv%6Tv%&pppppp , spree, 6Tv%,%,k, S6{v%6Tv%&6pv%X U7jfkR"j v @j,!6Uj%`6Uv%6Uv%%y`, `, dspree_kill`,dspree_Rampage`,dspree_dom`,dspree_unsdspree_godpppppp , spree, d, S6{v% [ I,y7 -K'C$.a/!,.?,P.?,P.B....6.?,P.?,P`....... flyI, $ $r * .. s F r e q f n g m } l ~ k A j B i C H- X g \ e e d o c r b B ` C ^ G ] L \ O [ T Z X Y Z X | V z G- ^ -iw% (W*% (% (W3w& (W*& (& (Wmw, (W*, (, (Ww, (W*, (, (Ww, (W*, (, (Ww U* x UCw X* y Xtw Y* z Yw Z* { Zw \* | \w ]* } ]8w ^* @ ^iw c* A cw S* t# S  -[w d* Jj" dw f* Ji" f?w g* Jf" gpw i* Je" iw o* Jd" ow }* Jc" } w A* Jb" A4 w j* Ja" je w I* J`" I w h* J]" h w J* J[" J w R* JZ" R) w M* JR" MZ w K* JO" K% *& *, *, * w b* z# b w V* y# V7 w T* w# Th w G* o k% G w E* o j% E x $ y$ -j#'  G,y6y$5 0c-Vy$~Vy$.& @}$]F7y+I)3]q 6]qOay+]q g6O #<(^|$?,q ?,?,I@}+6O6O^|$?,~+6O6O^|+?,' !G7$s1&"$?% $v+'$( NDv+b#rH *rH * XH  6XH  -A%IX.DDlm`-A%slDsmDH  $Db(b(g~>?, E$Db(b(C'~>?, o$Db(b(X ~>?, $Db(b(E'~>?, Db(b(X ~>?,DP qDDm+ $D5a֨H SH noD(ln?,mo?,D,aѨH SH (` ]$D1apH  (Leader)noD(ln?,mo?,D(apH  (Leader)(`  R%\+L7@Y%@N7K 6%K P &K hK ?LK P &aDK ?K ]K aTEST\+S%S%?, R7@HB}.  t]$~:]:@&s]J=:]&7:J:@w:J{*sJ-:J{:s{r:s{*sJ-s:J{:s{-:J{:s{r:s{*sJ--:J{:s{-:J{:s{.?:J{:s{r:s{*sJJTG:s{:s{:]{:]{G]%{ m y]$j:]:@&s]J=:]&#:J:@:J{:s{sJ|:J{:s{-:J{:s{sJ:J{:s{-:J{:s{.?:J{:s{sJJG:s{:s{:]{:]{G]{ x m{  PO7L+S7WL9g%.J=U W$:U :g%wU *B U wU *B U B {B B pB WP &WUW?LWP &aDW?W]WE'WaU }%@ Wp n WaU (Wa###########PL+-O'wU *U a/!NWX W#p }%P?, n Wa***Flag Carrier***(WX Wp n @ WaLocation:(Wm)Wp Pn @ W aB (WX Wp n @ ?,W aHealth:(WQW#p Pn @ ?,.  t # yWaS:J q(1 . m1 WX Wp n @ ?,W aArmor:(WQW#p Pn @ ?,.  t  yWaS:J z(  m  T7[GF%J&.B$_$E:_, :_{*_ _$&:_, x :_y*wx *{x Player*:x :J&x -x -:B{x B:B, &_MHB[P [[aPreLoadDataB+C&GC&?,?,_$#:_:BH& AEG6[D&:_%EGL[:_{H&ED&?&_ X7N&a M&.. _ t-O'' .. y-O)' .. m-P)' .. N&?GN&M&  _7~j-Y  K TH~\Hf%^T \ pppppppppppp , kill, S~, x+, Sf%, F,, WH,6RT%6m \%"-i&pppp , first_blood, S~-i&'fT\hT-6S \%pppp , flag_kill, S~-6S \%( r+7Za?''r*aErk*kaC,cr*aA,r*.a s*r*Q&$::$C:w.* .%BotPack.TimeMessage 7.. Y7+ eP .a  ].EUT_Textures.EUTSmallFont  Z7B wP *P a [7 0l* 256Q&=  r* r* ;r.* {r7*7..7q B7y7U-Xx7tN7{D%6c7 m6}  6\7 m6  6Q7 m6@  6H7 m6B  6D7 m6I  6C7 m6J  67 m6K  6~7 m6L  6|7 m6M  6z7 m6m  6y7 m6l  7-B G-a-Ky$-z$7-M -z$'Q&$-M 7-`7-nU.Gn -M 7-`7-nU.Gn 7x a:7x ,7x $7y E$7y$a ^$7y$a :.7(_&  K,r..rr* ~$=%r@%=&rD%G` N:D ,D p.- w.*7-tG-k{.L:L,.a!b@.-LG-k-L'. sshot.Auto ScreenShot Taken \7_*SQ.6w*-K  BbwQ* w* QQw7*x$Q:x:7kGw:x7(Y* wQ*:x7(YQ:x7(YQ:x7(YQxu::$wQ*wQ*wQ*-K T%QQ@x$:x, k :xQwk *wk Qh.k wh* -K h-(h-(:xu$hwh*rh*h*x=wQ*wQ* -K hQQ*wQ*wQ* -K iQQ*_*   40b7mBXOmk%Ek, ;6{k%Ek6{k%m6qk%m6Uk%%6Tk%&6Rk%%6m k%%6fk%%6Dk%%6pk%6ok%6nk%-6S k%( ]7yE5(6 Q._wQ*rQ* wi* -K QiwQ*rQ* wh* -K Qh!rQ*rQ* r* r* r* r7*Q-'y ::$wQ*wQ*wQ*-K QT%Q'N$:N, k :NQwk *wk Qh.k wh*h-'h-'rh* -K h:Nu$wh*3:h:Q:D , -Qbhh@hBh[ @Gch[ BGcwh*3:h:QQbh:X,h@hBh%G-d 7-Ivyh$h[ @Gch[ BGcH:h:$h$h$h$ h$h$h$h$h$h-(h?h$ wh wh h N!:X,y -w*::$- - --a?~yQGpGGGQ }QG:X,XjQ%g-U-<yy?U~BoU~B-Uooyy?UBb w*6G{+z6E{D?7G?7G7Y?,d%,d - - --F  --a ay -ak ay ) -f  Nyy  ^7 21g7^*kApppppp , info, True_Server_IP, ^* `7OcC'r7* rG* r* t%K*%\ %F**@$ggwg*g-ga/!T-v'ga/!~Q?g-n&'-l&'L?gtgP:ga/!U-w'q&=gP\ P\ ,dggg_-c.?-_(/wc*Gcxc-_'/`./w`*G`x`-_'-_$Kw?,Kw@4aGCKCKCC-v6$wxK!-l&L #<L?b(Lw4aGCKBKCCB-n&Q ף<Q?b(QwBK4aGCKBKCBCB6-wwCK4aGCKBKCCCBr--\ %\ ,[\ [?&;w6\ K6\ KD:6,d:6,dR%vb(b%?@[6C?,?@[Ja K\ ?,K\ ?,@BAB\ f--w?`?,@w?,K?,`~Bw`-,2~?R?~b'b(Rb(b%~A4a CBCCCB ,2~?R?~b'b(Rb(b%~ .%Dw?,D`?,? --w??,`?,@ w?,K?,`w`4a CB@CCB --v  r7*7.." .-.,tDw?,D`?,? .,7zDw?,D`?,?"G-x --w??`~BG w?,K?,`B w7* w*w*]7L ]]w`4ap%CBCBI r*r*  :,:%  :,R% .]Dw?,D`?,?;G-h w*--w??`~Bw?,K?, G-x`>C`Bw`4aOCBCBu&My&$':@,@ $g w?, -$g g ?, ?, X$g g ?, ?, $g g ?, ?, g `?, v&u&:@&&@v&a&d&4aOBBa&d&BB@y&;G-a-w--w??`~Bw?,K?,6G-hG-x`~CqG-hG-x`>C`Bw`4aOCBCBCB.:q&Dw?,D`?,?- - -G-`  --a.oz%~$@%=GG- - - - w*-awG*GG&-{6G{B&GG,-|O6E{ [*B|-Y&MBA@V&z@FailedParsefFAILEDPARSEgYour Client Failed to Parse at Prelogin CorrectlyClient Failed PreLogin with a Failure to Parse Options!'BAfg{-Y&fILLEGALFACEgIvan is not an authorized Face稨Client Attempted to PreLogin with Face@--V&!'BAfg d7T M4.~n:[&n~n:9[&nT T ~T NAME=Q T ~T NAME=,~Q ?}Q ~Q ?}FailedParse}FailedParse~T FACE=Q T ~T FACE=,}~Q ?S Q ~Q ?g~S .S S ~S .&zS FailedParseS FailedParseS FailedParsezS IVAN'( Q  S*PtBy@ P%;P, 6{P%P%kspree_dbl&kspree_mult,kspree_ult,kspree_monU**get Engine.GameEngine ServerActors### ___________________________________!G### !G### # # ### ### ### # ### ### !G### # # # # # # # # # !G### # # # ### # # # # ### !G### # # # # # ### # # !G### ### # ### # # # # ### !G### ___________________________________!G###!Gp### - Version : g&!G### ___________________________________!Gpppppp , info, Log_Standard, UTStatspppppp , info, Log_Version, g&pppppp , info, Game_Name,  pppppp , info, Game_Version,  pppppp , info, Absolute_Time, v-\|$get UdpServerUplink douplinkT'pppppp , info, Server_Public, 1pppppp , info, Server_Public, 0/a0 Z&Z&a/!x -S&'10pppppp , game, insta, T-S&/ a0 KkjwK*LK ~K //,LL~L:k10kL @h7@e7b>D %j7v+C.ND-e I -i' xD yC zB {~ |x }q @m AlUDXCYBZ~\x]q^mclSK% (F& (G, (H, (I, (E%(WF&(WG,(WH,(WI,(WE -vdPfTgQiUoR}VASjWh]RLMMKNJOIXb\V[TtGYEZ/::$a @v%V$/ a0 ]&v,vC%]& vV10W&/ a0 }$w}$*WD @10-s+(-q+(-p+(-o+(-n+(?-Oha c<wh*DM Stat Link Created:Vh!'y`EUT Tournament DeathMatch-F/a0 _&!oZ_&10 l7Ns;+ ].ppT.Alt_Denied 'Er]*] [.ppT.Alt_HeadHunter 'r[*[ \.ppT.Alt_FlackMonkey 'r\*\ t.ppT.Alt_ComboWhore '!rt*t F.ppT.Alt_KillingSpree 'lrF*F G.ppT.Alt_Rampage 'rG*G H.ppT.Alt_Dominating 'rH*H I.ppT.Alt_UnStoppable 'ErI*I E.ppT.Alt_Godlike 'rE*E K.ppT.Alt_WhickedSick 'rK*K L.ppT.Alt_red_team_is_the_winner '*rL*L N.ppT.Alt_Flawless_victory 'yrN*N M.ppT.Alt_blue_team_is_the_winner 'rM*M O.ppT.Alt_Last_Second_Save 'rO*O P.ppT.Alt_Red_Team_Scores 'lrP*P Q.ppT.Alt_Red_Team_takes_lead 'rQ*Q R.ppT.Alt_Red_Team_increases_their_lead 'rR*R S.ppT.Alt_red_team_Dominating 'lrS*S T.ppT.Alt_Blue_Team_Scores 'rT*T U.ppT.Alt_Blue_Team_takes_the_lead 'rU*U V.ppT.Alt_Blue_Team_increases_their_lead 'orV*V W.ppT.Alt_blue_team_Dominating 'rW*W X.ppT.Alt_HatTrick ' rX*X Y.ppT.Alt_HitSound 'PrY*Y Z.ppT.Alt_HitSound_F 'rZ*Z D.ppT.Alt_Double_Kill 'rD*D C.ppT.Alt_MultiKill '+rC*C B.ppT.Alt_megakill 'rrB*B ~.ppT.Alt_UltraKill 'r~*~ x.ppT.Alt_MonsterKill_F ' rx*x q.ppT.Alt_LudicrousKill 'R rq*q m.ppT.Alt_HolyShit_F ' rm*m l.ppT.Alt_Ownage ' rl*l  m7,DF.-F-Uj?c%-G#-M%-T-FzR+|Q+FO+eJ+fH+gG+}F+~E+AA+B*C|*\z*ex*oo*rn*Bm*Ck*Gj*Li*Oh*Tg*Xf*Ze*-S-b+g%I b*KR&-f-MX{*^d*eV+-[-v-`-[ a*,%,,(,O %,(C$,}%,d%,t%,g%,i%,n%,A%,o%,p%,A%,z%,G%,Y%,c,|,(R$,q%6V,f$6C,f$6F,f$6d,~$6f,~$6g,~$6d,;$6l,;$6o,;$6i,9$6f,9$6p,9$6e,!$6a,!$6Z,!$6`,!$,p$,q$,(s$,($,(B $,(S$6N ,b$6n,b6S,$6Q,$6Z,$6v,$,[%,I%6r,D%6s,D%6t,D%6w,D%6u,D%6v,D%6f ,D%6y,D%6z,D%6{,D%,o$,v%6|,D%6^,_$6W,C 6@,C *, n7QyvtYh-(h`hthwhzQwQ*h xQQQjhj Ehhhd o7z][,3zz3O %3(C$3}%3d%3t%3g%3i%3n%3A%3o%3p%3A%3z%3G%3Y%3c3|3(R$3q%6V3f$6C3f$6F3f$6d3~$6f3~$6g3~$6d3;$6l3;$6o3;$6i39$6f39$6p39$6e3!$6a3!$6Z3!$6`3!$3p$3q$3(s$3($3(B $3(S$6N 3b$6n3b6S3$6Q3$6Z3$6v3$3[%3I%6r3D%6s3D%6t3D%6w3D%6u3D%6v3D%6f 3D%6y3D%6z3D%6{3D%3o$3v%6|3D%6^3_$6W3C 6@3C **zvg% p7J*~fJ*I* q7\gJMatch Started7-D-M '-n'  w7=G v@r7KKhurK*u~!m ~!p ~!H ~!t ~!Ki ~ wK* wi *wKi ~!~ ~!OJKji Jp:Jp,Jp${w*flak_monkeySJSj.K  K,pK Is A FlakMonkey!!!!(J(B K..K  ,e~!AJKji J(S:J(S,w*head_hunterSJSj.K  K, J(S$pK Is A HeadHunter!!!!(J(sK..K  ,fwK*wK*Ka/!#Ka/!+{5KZP_SUPERSHOCKRIFLE~!Di JqJKji :Jq,Jq$w*combo_whoreSJSj.K  K,pK Is A ComboWhore!!!!(J(K..K  ,gwi * wK*|i Ki ~ u7m&|Wlx2m& % & , %, -, 2, 7, <, A, Y, -Z'o$ ^, c, h, m, ,-Z'o$ , , , , ,-Z'o$ , , , , ,-Z'o$ , , , , ,-Z'o$ , 0m&,-Z'o$ |7uj8vA%A}u[~p/*?:<>|,"uA&vpv_uvpvuA&Av  v7Er|o7rE| rE*|?&wE* w|* wE|Ei Eo&|6N o&b$S6ni b?,{i S:6N i b:L-e ':6N i bE**(!O6ni b?,6N i b$6ni bE-|-E?&D- wE| wE*|-|?&|rE| @x7G{Jv6N Gb6N Gb )$ .$ 6$t $w*Wpppppp , spree, spree_meg, SGt $6SGt $6QGt $6ZGw*Wpppppp , spree, spree_lud, SGt $ $ $ $ $ $ $ $ $ $ $ $6vGw*Vpppppp , spree, spree_hs, SGt q$6vG[w*Vpppppp , spree, spree_hs, SG6N Gb$t  z7tv#/<w]*]-ts]| w| * w]* w| ]| O w| *w| ]st-V+:| (C&..|  o %ts]|  J8b*+.&}bA*bp@*bb @{7J=ƌ#-p '4-p (JwJ*wJ*UJJa/!"Ja/!#wJ*"{JPlayerULJUGJUYJJ?ggDJvJJa/!"<zUcu.Juu~u:Ucu{Uc-F wZ*:U(R,]Z`Ucz]!DISABLEDU|U(R${]&!U|{)],|zU|U|U(R$U(R$U(RFJJ%UqJUq%Uz%kJwk*ok-Uzkkk.JJH% -B%-[%mtimelimitwY*Y* 7t&O R1t&Yt& k@{)hukHZ hqe, e,  e, e, e, e, e ,e%6VZ f , e&6CZ f ,e,6FZ f ",e,6dZ ~ M,e,6fZ ~ ,e,6gZ ~h%w*Wpppppp , spree, spree_wks, SZ  S wS *tS a/!SS  ehS  e,-e Keh**..S  ,hS S . v E8c7G Q+}f2s) !Cj h   S!~EG-{j \Pj   |!kj ]j%***b  !A !u-K zb | |b j g   !O-K zb | |b j g   j g  G-{aj h aj \G :G w*?,zb  &&aj h aj G :G w*?,&zb  x%2x,(r6x*6xj6x%6xG 6x*6x?jj-6xb &6xji%G b  x-x%nx,}xx&x96,j6,%6,G 6,*6,?jj-6,b 06,ji%G b  B8jJh<rj*"zjPlayer fjL%{&:6df;:6lf;:6of;:6pf9:6if9:6ff9:6af!:6ef!:6Zf!:6`f!:6^f_:6df;%L:6lf;%L :6of;%L4:6pf9%L[:6if9%L:6ff9%L:6af!%L:6ef!%L:6Zf!%L:6`f!%LE:6^f_%Lf[{&L z&@G8RetdVu~Vu.&-L%`-Yd tUT_SHIELDBELTu?` UDAMAGEu?` WARHEADLAUNCHERu?` UT_INVISIBILITYu?` HEALTHPACKu?` 5ARMOR2u?` ]UT_JUMPBOOTSu?` @Ruu:u&rR*'R @ui,,7h,(,dA'iF'hG',(,df,,H'fd bUT_SHIELDBELTu?iu? UDAMAGEu?hu? WARHEADLAUNCHER}%}:Vu }C%u?A'u?} \UT_INVISIBILITYu?F'u? HEALTHPACKu?G'u? ARMOR2u?fu? UT_JUMPBOOTSu?H'u? 9@Ruu:u&RrR*'rR @u K8H8% vz&ppppS-*S0,-*S0,s&pppp*S0,:*S0,.*S0,p& ppppp&-z&-s&  }&x`Hcxpp../}&/[EUT]xxj% px.tmp px.log   F8M8\r' N8 L8yc|s]y@&?o)ya~&B'k)y a~&(&B' uUQ8R8B'm)U8 O8oJtwh *h %oPooh oQo?,@o?P,h oh  oaSDh I'J'opoI'?,Bo?P,h ?,@J'?,oaSDh ( V8X I8[8]}HCCppC\bEnhancedSprees\T-eCppC\bEnhancedMessages\T-vCppC\bShowIPS\T-UCppC\bLogMods\T-TCppC\bCheckDefaults\T-YCppC\HitSoundSounds\T-VCppC\DemoRequest\T-UCppC\AnnouncerLevel\RLC C@W8SRw DD?SS^Sq DS~B^f=S1w*k:,-S$G?D?:k&fSGS?q SSk^SSG?,^S?q ?,^SX:k, S>a @?^?,@?^?,@ABSOa @?^?,@?^?,@A<kAB:kTkSGS?q S4a C^B^CBCB8-w*q:S?D?q&f?,@^SS?,`^S$SS4a C^C^CCC@q,dSp%z wz *z a/!xwz k.z r:kT*:kTkw:kTKrk1::kT:k:kTkpp,dz z okoC^gB^p&cp, rpT*SSb&?S?D?p&fS?q rD?p&?,,@sp&,, S(a og?r?sBBYYwpTkJqp3:,-S$SzSSb&?S?D?p&fS?q pT-SpT^YrD?p&?,,@sp&,, S(a og?r?sBBpo@?^?,g@?^?,@p& p,  wpT*G?D?p&f?,^ wpTkSGS?q ?,^St :,-S$ S p, S&a ogAB S.a ogA?pAB wpT*SGS?q ?,4^ST'B^?pT?pTBS-a T'A^BBCAp  Z8T E)>.rT *EUT Tournament DeathMatch Tournament DeathMatch-K'-|::$-- T --K'T KppppppT  , game, bEnhancedSprees, T-eT MppppppT  , game, bEnhancedMessages, T-vT FppppppT  , game, bHitSounds, T-VT HppppppT  , game, bDemoRequest, T-UEUT Tournament DeathMatch ]8MFE<rM*"zMPlayer AMAID?D?AG?AGAY?,d%,d, A[, M?,2?:6VAf,d?:6CAf,d?:6FAf,d?:A(s,d?:6SA, ?:6QA, ?:6ZA, ?:6vA, JM ^8^ddG!!!!!!!!!!!!!!! CALC END STATS^%^,^^^^ ^^ ^G ^L A^C^L  B^)^%^, w^*h ^Dh Dh L'?h M'L'?,<N'h M'?,<{h PLAYERuDN'h th Ih ^^%^,^^^ ^^ ^^L  B^C^L A^G ^ L m Ewm *.m a/!"m a/!#.wm *"{m Playerm .w*-O8stat_playeraccuracySS[?weap_accuracyEnforcerSR6d;Dweap_accuracyGES Bio RifleSR6l;Bweap_accuracyShock RifleSR6o;=weap_accuracyRipperSR6f9@weap_accuracyPulse GunSR6i9>weap_accuracyMinigunSR6p9Bweap_accuracyFlak CannonSR6e!Fweap_accuracyRocket LauncherSR6a!Cweap_accuracySniper RifleSR6Z!Kweap_accuracyEnhanced Shock RifleSR6`!Dweap_accuracyCustom WeaponSR6^_:weap_hitcountEnforcerSS}?weap_hitcountGES Bio RifleSSd=weap_hitcountShock RifleSSt8weap_hitcountRipperSSi;weap_hitcountPulse GunSSg9weap_hitcountMinigunSSn=weap_hitcountFlak CannonSSAAweap_hitcountRocket LauncherSSo>weap_hitcountSniper RifleSSpFweap_hitcountEnhanced Shock RifleSSA?weap_hitcountCustom WeaponSSv9weap_damagegivenEnforcerSS6rD>weap_damagegivenGES Bio RifleSS6sD<weap_damagegivenShock RifleSS6tD7weap_damagegivenRipperSS6uD:weap_damagegivenPulse GunSS6wD8weap_damagegivenMinigunSS6vD<weap_damagegivenFlak CannonSS6f D@weap_damagegivenRocket LauncherSS6yD=weap_damagegivenSniper RifleSS6zDEweap_damagegivenEnhanced Shock RifleSS6{D>weap_damagegivenCustom WeaponSS6|D[weap_shotcountEnforcerSS<6d;}`weap_shotcountGES Bio RifleSS<6l;d^weap_shotcountShock RifleSS<6o;tYweap_shotcountRipperSS<6f9i\weap_shotcountPulse GunSS<6i9gZweap_shotcountMinigunSS<6p9n^weap_shotcountFlak CannonSS<6e!Abweap_shotcountRocket LauncherSS<6a!o_weap_shotcountSniper RifleSS<6Z!pgweap_shotcountEnhanced Shock RifleSS<6`!A`weap_shotcountCustom WeaponSS<6^_vm m ` _8KtqK,C%C&C%G &G &C,C&G ,G ,CK,G ` K&C%C&C%G &G &CK&G ` K%C%CK%G `  `8HuDH,%&%&%&&,&,&,,H,_ , BH&%&%&%&&H&_ & BBH%%H%_ %  a8^!^^?,dD?Q)^ ]b8[w(Em%r[* r/*- gr[*r/*r[* k[P'/v$N/P'zR'5[R' ENFORCER DOUBLEENFORCER ZP_ENFORCERk}6rkD6rkDXo- [!>:/:$! NX  /v$ [/!<v k UT_BIORIFLEkd6skD6skDX<- [!l:/:$! NX  /v$ [/!Bv k SHOCKRIFLEkt6tkD6tkDX- [!DNX:/:$! NX  /v$ [/!?v k SUPERSHOCKRIFLE ZP_SHOCKRIFLE {ZP_SUPERSHOCKRIFLEkA6{kD6{kDX- x:/:$! NX  /v$ [/!;v k PULSEGUNkg6wkD6wkDX- [ E!qB:/:$! NX  /v$ [/!3v  !_:/:$! NX  /v$ [/!3v  k ZRIPPERki6ukD6ukDX - [ ~!\{:/:$! NX  /v$ [/!(v W !O:/:$! NX  /v$ [/!(v W T!AQ:/:$! NX  /v$ [/!(v W k $MINIGUN2kn6vkD6vkDX- ![!>!:/:$! NX  /v$ [/!:v k y UT_FLAKCANNON6WkC ?&kA6f kD6f kDX6WkC 6@kC /  w6@kC /%6WkC ?&kA6f kD6f kDX6WkC 6@kC / - [  !O :/:$! NX  /v$ [/!2v v s !~p :/:$! NX  /v$ [/!2v v k UT_EIGHTBALLko6ykD6ykDX - [ G !DD :/:$! NX  /v$ [/!/v  !@ :/:$! NX  /v$ [/!/v  k SNIPERRIFLE ZP_SNIPERRIFLEkp6zkD6zkDX& - [ !> :/:$! NX  /v$ [/!!v   !A :/:$! NX  /v$ [/!!v  k IMPACTHAMMER' -  [!4 :/:$! NX  /v$ [/!4v k )TRANSLOCATOR - &[!s&:/:$! NX  /v$ [/!9v k hR&e-Mkv6|kD6|kDX- [ !>:/:$! NX  /v$ [/!!v e b!A_:/:$! NX  /v$ [/!!v e k  e8G) G)F)'( f8i 6k6i 6k6i 6k6i ?jWb$ki '( kh8d =(rd* rV'* :Y'% >da/!" :Y'&}!B }!( }!2 }!/ }!! }!; }!9 }!? }!< }!3 }!: }!L }!4Sd..d  ,do$CdV'}  j8MCL rM* rN* \rM*rN*rM*  -UXX !Bc,=cMNM &!(c,>cMNM |!2c,?cMNM !/c,@cMNM (!!c,AcMNM ~!;c,BcMNM !9c,CcMNM *!?c,DcMNM !<c,EcMNM !3c,FcMNM ,!:c,HcMNM !4c,JcMNM  UX:Mo&Mo$ 5M ENFORCER DOUBLEENFORCER wZP_ENFORCERc,cMNM-^' UT_BIORIFLEc,cMNM-^' SHOCKRIFLE SUPERSHOCKRIFLE ZP_SHOCKRIFLE ZP_SUPERSHOCKRIFLEc,cMNM-^' PULSEGUNc,cMNM-^' CRIPPERc,cMNM-^' MINIGUN2c,cMNM-^' UT_FLAKCANNONc,cMNM-^' uUT_EIGHTBALLc,cMNM-^' SNIPERRIFLE ZP_SNIPERRIFLEc,cMNM-^' U IMPACTHAMMERc,LcMNM-^' TRANSLOCATORc,NcMNM-^'  - -^,MNM q8}(ikap V{}(v1C)D)H)K)L)M)R)S)T)X)Y)[)e)j) \8WNY݈ 8W?J?cJ??D=W Dss>sL>J?&?,sJ?,?,sv JBW>?Wv ?Wv W$Wb&?,j,oro*oGrj*jG,W&aov v BBWGQWh?Wv ?, G}?Wv ?, G|G-_ W&ajv v BBW-'W ^@p8Js8{(hip z{( v++/a0 v0 10va zwv*vvba y8z({Mip yz( k8`Un:`!B `!( `!2 `!/ `!! `!; `!9 `!? `!< `!3 `!: `!4'( m8v(u8r* r7*(d 6di'd9 7jMat(s(i'd'w.M*.M-.M@@wM*Fv(M(4 r*-(' t8b0F=J!wc*!c- L HwL *1L a/!S-Zrb*b-.L 0*c .L "0bc 1-Z,rb*b-.L 0*c 1.L "0bco $o$-Z( %,bc*1 $o$-Z( %,bc*1 G$o$-Z( %,bc*1 $o$-Z( %,bc*1 $o$-Z( %,bc*1 +$o$-Z( %,bc*1 1L L 5 ML9w(d4hRc'ppA&G&MnnP{c'np ww(n D9d'Aq-DC%Cd'&_CaC&ad'a&I_&I_a+a&I_&I+a__aa_+a_,?a__aa;b'__CCb'C w8Wm'KzW-'-B%'/a0 h'!xBh'A*10w* pW`-a*w* pW`a* {8}8zMnwn*n-na/!,>rc *1nc c nnnnwn*n- wc n1nc nc c nHMatch Ended for Time Limit!nnzHHc @@HpGame ended at Unwn*FnR .nwR *|-VR rR c R -'rR c R *R c R Xnq!bnn)d' C9@v88FĐ( @9A9 ~8k'[rxBn(%k'b(b(:~>vk'b(b(:~> nI9D|iG. & ty%#yD&gymy&mDmJ&IgJ&Igm?mJ&IgJ&I+mJgJgmmJgJ+mJgJ,?mJgJgmmOgJgJyJyJy$E 7 yy%4yD&gymy&mDmJ&IgJ&IgmPmJ&IgJ&I+mJgJgmmJgJ+mJgJ,?mJgJgmm`gJgJyJyJy5E B mE  B9QHCQQapp': Yu'{YQaq'Yu'VQ?,{Y?,QV?s'[Q%V{Qap'QV?s'[Q&Qaq'QQQ |8o', =S3/o'a/!#o'a/!S'1( F9r'57 @T-Vr'~Vr'.& M9MvBaG. & tu%#uM&puqu&qMqL&IpL&Ipq?qL&IpL&I+qLpLpqqLpL+qLpL,?qLpLpqqOIpLpLuLuLIu$E 7 yu%4uM&puqu&qMqL&IpL&IpqPqL&IpL&I+qLpLpqqLpL+qLpL,?qLpLpqq`IpLpLuLuLIu5E B mE  t'@U9f(}f:p xf(m'q(m' 5$b$8  \9VF.`re( $ g$t'D?V&G?V&GV&Y?,d%,dj t' E9cchc(caTEST](z'::|.ccw|*HcS|D?Dc??z'' y'](O9Q9T9|]9^(w,fp w^(c( N9x Plvx x x ?,7x h?-?%x ?X?%x ?X!-?x ?,??hh %x ?,hx  R9V9dx ?,gr7*$7-`7-n d$d-'dEddaTESTV(~ w.*qB?,~S?%d?,qB?,~qB?,~VwV*{Vq~{Vq~{Vq~{Vq~i %6i ,i %g-{$-{$'Y%i .{i .Y%-A('dqdi . dai .(zi .6q~?&i 7-`7-M .%-A(d-(dBd K{7[ R7[ }R,2RR,2dqdd aR(q~?&dqddaEUT SOURCE(q~?&dqdd4aType ShowHelp In Console For Extended Commands(q~?&d~'?ld*d?,~'?,qdd$dld-(dBd W9lt9:rQbw'.-y'z~w':? :~::~&:-CU$U$TF~U~ $:W* 5$:V* Q$:R* m$:Q* =,:N* -y':]::?,y:a~(:Cy. " t * y ` m:"aS~&I(c :Ay:aSD~(:@y.  t:"aS~&G(:Py:"aS~&Y(:Qy: aST(:Fy:"aS~&[(:^ y:'aR6T~&R(:_ y:'aR6L~&R(:e y:'aR6Z~&^(:G y:'aR6N ~&R(:v y:'aR6u~&C(:Jy:'aR6p~&C(:t y:'aR6W ~&R(:e y:'aR6R ~&C(N&-F:Zy:!a~&c(~:Zy:aDisabled(`  y ] m:"aS~&G(:Py:"aS~&Y(:Qy: aST(:Fy:"aS~&[(:^ y:'aR6L~&R(:e y*&-F:Zy:!a~&c(Z:Zy:aDisabled(`  ^9Y(-e=}},d}BLp 1Y(Z([(} '~ c&c~ ..Rr~ *[Console Error] No Console ~ - r~ *[Console] Creating root~ o*~ - '~ N~ M  R 40_9 10`9 ".EUTLockedMenuItem"a9# "obj dependencies package=S_Swat"Y9nqʥW&-a-a(U-a'.-(-( d9U|ȦE--(C-'.-(-a( e9Sa0.-.-(_.-'-(-a( f9N(YG YN( c9 "Dependencies of s_SWAT"g9M(T0G TM( h9, "get OpenGLDrv.OpenGLRenderDevice lodbias"i9L(jG jL( j9 "BotPack.Chair"k9K(]G ]K( l9 "get engine.input mousey"m9J(erG eJ(  n9n vDEsR.&rR* R U R t t R y R m  n { 6 n _6 n C 6  { n { 6  _n _6 3 C n C 6 rn *Failed to load EUT ScoreBoard!V!^n n ScoreBoard Loaded:Vn !'Hud class Loaded :VR!'b(R@a oqw@*@@O o9I(X۪G XI( p9P+t ******************************************* ******************** pp * ^ * pp * Release _ *  ******************** *******************************************pVersion ............................ ^pVersion #............................_-z @P$-H @P$-G @P$k#rN*N./ a0 P|{wP*:NkN(YPNk10 q9H(WQG WH( @:$E'7$M$~E$$a`BE$%$B?,Y $ a`'6$$6$=,6$$2&$? $~$R$~&$$#a12345678901234567890BEw$?,UY E?,$wU$ aPlayer'$wB?,U$ aRanking'CwB?,$aRankingBE$CB?,U$ aScore'ACB?,$aScoreBE$AB?,U$ aKills'@AB?,$aKillsBE$@B?,U$ aDeaths'P@B?,$aDeathsBE$PB?,U$ a Eff 'QPB?,$a Eff BE$QB?,U$ aAcc'FQB?,. V t$a###BE$FB?,U$ aCps'^ FB?,$^ B?,U$ aAss'_ ^ B?,$_ B?,U$ aCov'e _ B?,$e B?,U$ aGbs'G e B?,$G B?,U$ aSvs'v G B?,$v B?,U$ aDen'Jv B?,$JB?,U$ aSls't JB?,$t B?,U$ aFkl'e t B?,$e B?,U$aIP Address 'Ze B?,Q ^ y N m$a###BE$FB?,U$ a---'^ FB?,$^ B?,U$ a---'_ ^ B?,$_ B?,U$ a---'e _ B?,$e B?,U$ a---'G e B?,$G B?,U$ a---'v G B?,$v B?,U$ a---'Jv B?,$JB?,U$ a---'t JB?,$t B?,U$ a---'e t B?,$e B?,U$aIP Address 'Ze B?,Q . n t y$ :, :L*~ $m :, h:Qc wh*{hPlayer:h%c h-h-:ILhIc :I, m  v:I$ :, :J* $p :, h:Qf wh*{hPlayer:h&f h-h-:KJhKf :K, p  :K$aTESTBE` Y E?,U` $ ::IU` <Er$:LU ` Y E?,E<I$ ::KU` <Er$:JUA   m$ :, :* $}:, h:Qswh*{hPlayersh-h-:LhLs:L, } A:L` Y E?,$::LU` <Er$:U  s9G(WʫG DG(  r9C!::$a @  u9F(Q8G QF( v9B53wp*p`pap* w9E(oG oE( x9C(u-[JuwJ*^Ja/![J[EUT]C(!JJC(!' y9D(lG lD( z9E7*%{{'Krp*pa l p}&{'p`{E****************************************p Ep -[@w@*@a/![@[EUT]E!@@E!' {9R(PG PR( |9C:P' $rR*R.- ?wp*p`pap*wN*N-H#'e%#e,(CeDGeUyrC*C-  wG*eD*eUaeU*eR%eS#eRCaC*wC*-neR,Ca/!,N-`eReR%eD*eD*o eDtwo *o ao o FeD-'eDo$eDa(((eSeD eR&CCeD%~awN*wC*CN(_$eDa eS;N-neR,eDo$eD%veD8wN*wC*CN(_$N-neD*eD*o eDwo *o ao o eD-'eDo$eDa(((eD%eC wC*Ca/!d -l稨@%Auto Destroying FlockPawn:VC!'CaCa/!#@ WC@ SC Ca/!#w. .C*Ca/![@ WCe%e,(weD*edeD.CeR%Ga ]C C rG*@}.C$ 0Ca/!,@}.C$rCa/!,G-C'@}.C$eUGea(%eRX(G-^%-cGM+$ Gu%get engine.input mouseyGM.EUTLockedMenuItemGv%obj dependencies package=S_SwatGw%Dependencies of s_SWATGx%get OpenGLDrv.OpenGLRenderDevice lodbiasGA&^GG&_G-d%-dA%. A, AGV AT(AG~*BotPack.ChairG-i%-H G-l%-z G-m%-G Gp  C, @ /CCC7 }9S(RG RS(  L:K]!V.P(M~Ea####O(B(a?,?,]?,B(?&a?, av)'] ~a###############Za] at)']a]aSV 'ZZ?&] .  ta]Z ag)'a]Z?, af)'a]Z?, ac)'a]Z?, ab)'a]Z?, ad)'a]Z?, aZ)'a]Z?, aW)'a]Z?, aV)'a]Z?,  a%Z 'a]Z?,  a&Z 'a]Z?,  a,Z ']a]ZaSV '#a]Z?,aS6O$&B'#a]Z?,aS6Q$&B'#a]Z?,aS6b$&B'#a]Z?,aS6`$&B'#a]Z?,aS6e$&B'#a]Z?,aS6i$&B'#a]Z?,aS6k$&B'#a]Z?, .app,&J S,& x'#a]Z?, ,app&&J S&& x'#a]Z?, ,app%&J S%& x'Y ]Z?,   ya]Z a@''a]Z?, a|&'a]Z?, a%Z 'a]Z?, a&Z 'a]Z?, a,Z ']a]ZaSV '#a]Z?,aSV '#a]Z?,.app,&r S,& v'#a]Z?,,app&&r S&& v'#a]Z?,,app%&r S%& v'Y ]Z?,   ma]Z a@''a]Z?, a|&'a]Z?, a%Z 'a]Z?, a&Z 'a]Z?, a,Z ']a]ZaSV '#a]Z?,aSV '#a]Z?,.app,&t S,& u'#a]Z?,,app&&t S&& u'#a]Z?,,app%&t S%& u'Y ]Z?,   9pZ9&-F -F (7-F ' A:U(wB@|U(Y.a/!,.$You are already a Spectator! 7-p ."Changing to Spectator Mode.Disconnect.(b"OverrideClassBotpack.CHSpectator'.Reconnect@.Spectator Spots Full. CB:W(qԱ.a/!,|W(.Joining Server.b"OverrideClass'.Reconnect ~9Kw ( rK*(1-i@}K$P}~P. }{P,}~P.{{}&}~{.H{,|% |,d}|}'%||}'H@1K$IMH'| D:\(rMDjQ-QBYou Must Be Logged In As An Admin To Access This Debugger! \( 1QInject UserFlag 1Q Load Debugger Activated!-f 'B ?0QInject UserFlag 0Q"Load Debugger DeActivated!-f (B  }F:_(tG G_( E:x'w*n rx'* l~|.||~|.&lz|IVAN@1x'$IV| H:`(\zG \`( I:v'1,2 rv'* @1v'd(i(j( S:B{riBMB~EBBa####g(GB,B?,B?,B a})'B] B~BBa########oYYY?&[-h(Q B?,N B?,G?&Q B?,N B?,G?&BaU H|'LB?,?,?,IQ oLHLIIHLIU U }U &BaU H|'`U nBQ N B a|)'B]BQ oN B aU 'B] BQ N YB ax)'B]BQ oN Y{nBan'B aw&'B] BQ N Y?,B aw)'B]B#Q oN Y?,U{nBan'gB aw&' Pl(h@vOhs v%:|hw%$ SWq!hs x%qJh&$ LBq!hs get engine.input mousey{hJ$MMY P:@Y:Q:a T K:j'x-- rj'* @}j'p(r( \:o(bLo( $q!Z   T:f'yU.A rf'* @ Vf'UL V:Fza/A rF* ?Fa/!,@1F$ SP W:b{w1m-rN*N.Grb* rN* ]rb* mb:k&&@1b$ YMRk&~( $ $ h$mN(C(j&m-h@1b$ MVUj&6dmN;@)6lmN;A)6omN;J)6pmN9~)6imN9N)6fmN9U)6amN!B*6emN!)6ZmN!C*6`mN!D*6^mN_E*k   ]:pMW .epMp~Eppa####u(e'Zp?,S p?,?,e'?&p#Zp?,?,p ar)'p] p~ppa########J WWW?&pZS p aq)'p]pZJ S pae'p] pZS Wp ap)'p]pZJ S Wl$:l, w:le* :le- l'l^p/apppSe  [Rl'h)]'r. mpa##############J Wp] pZS W?,paBest FPH #1:'p]p#ZJ S W?,pCapppp%W  S%W   %W 'p] pZS W?,paBest FPH #2:'p]p#ZJ S W?,pCapppp&W  S&W   &W 'p] pZS W?,paBest FPH #3:'p]p#ZJ S W?,pFapppp,W  S,W   ,W ' Z:h:g'aH)g' $ $ $$ig'X{6cX m6\X m6QX m6HX m6DX m6CX m6X m6~X m6|X m6zX m6yX mXtXq '   _:[:i  a:`*G;(% -Cq!G{' `:y CYy X*y $y y 'Q'y y y $  b:U kU ~PU U MU ar&Z'['U %U Z'?,['U ar&' eVF-C@  E)] avi b .. z t-C'&..`SmartCTF Stats Plus y-W&'&..`EUTTeamGame Stats Plus  m-D'&..`EUTDeathMatch Stats Plus k] ] ?U b C] {] b 'K] b E] b M] b {] b ( d:+^:~.a  E) &BT0w~*~a h)@e:@f:@u:^:DG0e'`a? E 6+.ca?''r*aErC*Cay(cr*a|(r*.a n)u)x&$::$Ca?'Cw.* .%BotPack.TimeMessage 6.. g:@t)@v)@X:EA6ESh&@%|E, SERVERDEMO-S(DemoRecording already in session -ZS)DemoRecording Requests Turned Off @R--ZXE, Xph&XX@ dXppdemorec "X"pDemoRec: DemoRec initiated by:SSDemorecording Initiated x&={< r* r* ;r.* {r6*6..6q B6y6U-Xx6tN6{^'6c6 m6}  6\6 m6  6Q6 m6@  6H6 m6B  6D6 m6I  6C6 m6J  66 m6K  6~6 m6L  6|6 m6M  6z6 m6m  6y6 m6l  6-B P-a-Ky$-`'6-M -`''x&$-M 6-`6-nU.Pn -M 6-`6-nU.Pn 6x a:6x ,6x $6y E$6y$a ^$6y$a :.6(_&  K,^'P` :D ,D .- :w.*6-tP-k:{.L::L,.a!b@.:-LP-k-L'. sshot.Auto ScreenShot Taken o:L*SX.6w*-X  BbwX* w* XQw6*d$Q:d:6kGw:d6(Y* wX*:d6(YX:d6(YX:d6(YXdu::$wX*wX*wX*-X \'XX@d$:d, l :dXwl *wl XA.l wA* -X A-(A-(:dn'AwA*rA*A*d=wX*wX* -X @XX*wX*wX* -X BXX*L*  n:^=4:&f&@%$wY *$a/!tR%R-^w^*^a/!#^a/!,.^- r^*^Y ^^y$^nw^*^*^^3wY *Y aY *a($-f-2ppppdemorec "f&-"DemoRec: DemoRec initiated by: auto Recorder t:i:_~B@FrX*X..a&q!Dk(-d%-.-Q({'X-j#aJ p:a E%&X._wX*rX* wB* -X XBwX*rX* w@* -X X@!rX*rX* r* r* r* r6*X-'a  ::$wX*wX*wX*-X X\'X'u$:u, l :uXwl *wl XA.l wA*A-'A-'rA* -X A:un'wA*:D , yXbAA@ABvA%P-r 6-G#(A6vva A$A[ @PcA[ BPc9:A:$A$A$A$ A$}A$A$A$A$A-(A?A$ wA wA A u:X,a w*-::$ - --a?~a XPpPGPQ }X":X,XEX%g-U-<a a ?U~BJU~B-UJJa a ?UB=w*6G{+z6E{D?6G?6G6Y?,d%,de-aC aa  -f  Na a   ^tr-^%h: %$TWpZoneInfo-AmbientBrightness0 :: R : ,$TWpZoneInfo-AmbientSaturation255 :: R *: %$TWpLevelInfo-AmbientBrightness0 :: R : ,$TWpLevelInfo-AmbientSaturation255 :: R : %$TWpWaterZone-AmbientBrightness0 :: R P: ,$TWpWaterZone-AmbientSaturation255 :: R  -$TWpWaterTexture-bInvisibleFalse :: T - ?&$TWpTexture-DrawScale1 :: U _ -$TWpTexture-bTransparentFalse :: T - -$TWpTexture-bInvisibleFalse :: T - -$TWpTexture-bFakeBackdropFalse :: T -v ?$TWpSuperShockRifle-FireAdjust1 :: U  ?$TWpSniperRifle-FireAdjust1 :: U 1 ?$TWpShockRifle-FireAdjust1 :: U  ?$TWpMiniGun2-FireAdjust1 :: U  ?$TWpPulseGun-FireAdjust0 :: U Cw  $TWpShockBeam-MeshShockbm :: V w  $TWpShockBeam-TextureEffects.jenergy2 :: V   G>$TWpShockBeam-DrawScale0.44 :: U f q=>$TWpShockBeam-LifeSpan0.27 :: U w  $TWpSuperShockBeam-MeshSShockbm :: V 6w  $TWpSuperShockBeamm-TextureEffects.jenergy3 :: V  G>$TWpSuperShockBeam-DrawScale0.44 :: U  q=>$TWpSuperShockBeam-LifeSpan0.27 :: U Q w  $TWpPBolt-MeshPBolt :: V  w  $TWpPBolt-TextureSkins.pbolt0 :: V   -$TWpWaterTexture-bInvisibleTrue :: T -c : ,$TWpActor-Fatness128 :: R   ?$TWpPlayerShadow-DrawScale.50 :: U ( w  $TWpPlayerShadow-TextureEnergyMark :: V  : ,$TWpTMale1-AmbientGlow17 :: R  : ,$TWpTMale2-AmbientGlow17 :: R 5 : ,$TWpTFemale1-AmbientGlow17 :: R  : ,$TWpTFemale2-AmbientGlow17 :: R  w  $TWpUdamage-TextureGoldSkin2 :: V F  ?$TWpActor-DrawScale1 :: U   ?$TWpActor-LODBias1 :: U  w  $TWpPlayerStart-TextureS_Player :: V X -$TWpPlayerStart-bHiddenTrue :: T -: :$$TWpUT_ShieldBeltEffect-LightType0 :: R  -$TWpUT_ShieldBeltEffect-bUnlitTrue :: T -w  $TWpTranslocOutEffect-TextureSkins.TPEffect :: V w  $TWpTranslocatorTarget-MeshLodMesh'Module' :: V ^: ,$TWpTranslocatorTarget-SoundRadius20 :: R : ,d$TWpTranslocatorTarget-SoundVolume100 :: R +:  %$TWpTranslocatorTarget-LightBrightness0 :: R  : :$$TWpTranslocatorTarget-LightType0 :: R  ?$TWpCTFFlag-DrawScale.60 :: U Bw  $TWpCTFFlag-Mesh.pflag :: V : ,$TWpCTFFlag-LightRadius6 :: R : , $TWpCTFFlag-LightEffect13 :: R 2r      rr       |:r:GD8a<^#'_a@@ E(s:O>R'r6* rP* r* G%Z*%O %c**H$mgwm*m-ma/!T-H'ma/!~D?m-K&'-O&'F?mGmP:ma/!U-I'F&=mPO PO ,dgmm_-r.?-u(/wr*erLr-u'/t./wt*etLt-u'-u$E?,E@4aeCECECC-H6$LE!-O&F #<F?b(F4aeCEBECCB-K&D ף<D?b(DBE4aeCEBECBCB6-ICE4aeCEBECCCBr--O %O ,yO y?&;6O E6O ED:6,d:6,dDvb(b%?@y6C?,?@yJa EO ?,EO ?,@BABO f--?w?,@?,E?,w~Bw-,2a?@?ab'b(@b(b%aA4a CBCCCB ,2a?@?ab'b(@b(b%a .%D?,Dw?,? --??,w?,@ ?,E?,ww4a CB@CCB --H  r6*6.." .-.,GD?,Dw?,? .,6zD?,Dw?,?"P-x --??w~BG ?,E?,wB w6* w*w*k6L kkw4aS'CBCBI r*r*  :,:%  :,D .kD?,Dw?,?;P-h w*--??w~B?,E?, P-xw>CwBw4arCBCB@&My%$':H,H $\ ?, -$\ \ ?, ?, X$\ \ ?, ?, $\ \ ?, ?, \ w?, %@&:H&&@%U&T&4arBBU&T&BBHy%;P-a-I--??w~B?,E?,6P-hP-xw~CqP-hP-xw>CwBw4arCBCBCB.:F&D?,Dw?,?<- - - - w*-a<wP*PG&-{6G{D'<<PG,-|r6E{ z:]( q!G  q:M*_@-z  ww*w-Lrc&  b&,wB*zEBwE*wH.EwvBw*)M*Bc&b&EO*P*' {:P\3eB%^&.l(F.^&  P.F rBB%]wP*P.F rBSwP*e&Pde&S{P%V {P&V {P,V {P,V {P,V {P,V {P,V {P,V {P,V {P, V PpV~V.MLocking:PB@ [Z-Chq!D @;w:ZK<[\a>)'a?] E,~:@Y*e B.cY*X&wX&-N- -\%Ks get windrv.windowsclient usejoystick-N -\%$JSJs u%}$J}$s get engine.input mousex}*s get ini:Engine.Engine.ViewportManager Brightness C;:Y$ a@e E }:~ I,)5~ ,  ~ ,@|~ ~ %aa~ ,@A~ %~ %zrT*zTrG*zGrA* :aTGA@' z&$rT*XT- pT  wpT  ' ,rT*pT  ' ,rT*pT  ' ,rT*pT  ' N,,rT*pT  ' ,arT*pT  ' ,rT*pT  ' $,rT*rG* >aTG  '   @@ E;P | 6::$ ::$ -  -P(-P(-O(_-l%J$p-i%J$-m%J$q!Y  A;XJm >rk Xw.X*.X] xk h B.X]xk h B- .X }Ixk h Bwk h  wh *.X.X ?, x&.X.X .X.X%.X .X.X%;w.X*.X .Xrh X.X %k Xxk h BXxk h B  F; "get engine.input mousex"G; "get engine.input mousey"J;4 "get ini:Engine.Engine.ViewportManager Brightness"D;q*|1.q* ,  s, 5,  r, L,  q, c, n, z, m, , l, , k, , j, , i, , s, , r, , q, 2, n, I, m, `, l, w, k, , j, , i, ,3 g, ,4 e, ,5 d, ,6 c, ,7 b, /,8 `, F,9 ^, ],: ], t,; \, ,< [, ,= g, ,> e, ,? d, ,@ c, ,A b, ,B `, ,,C ^, C,D ], Z,E \, q,F [, ,G Z, ,H Z, ,I Y, ,J Y, ,K X, ,L X, ,M V, ),N V,   @p ( "get windrv.windowsclient usejoystick"P;L&sFca%a:u*za@L&a:~P&:~@:~@L&a@P&-K'a  L; M; @T;I&qbI&~I&.& Q;v*Iq rA* IE&IapA (I)II~%wA*fAwA*fA{fIE&Iapp (f):(*Ia: (I)II~%Iv*I aK+(  Y;sn`\,\\,s\{s$sssC+@+saD+( ~%av:TRY` aD?TT\T_ DT~B\A=T1w*b:,-T$A ?a?:b&ATA T?_ TTb\TTA ?,\T?_ ?,\TX:b, T>a @?\?,@?\?,@ABTOa @?\?,@?\?,@A<bAB:bQbTA T?_ T4a C\B\CBCB8-w*M:T?a?M&A?,@\TT?,`\T$TT4a C\C\CCC@M,dT{%j wj *j a/!xwj b.j r:bQ*:bQbw:bQKrb1::bQ:b:bQb{{,dj j obMC\OB\{&c{, r{Q*TTb&?T?a?{&AT?_ GD?{&?,,@E{&,, T(a MO?G?EBBYYw{QbJM{3:,-T$TzTTb&?T?a?{&AT?_ {Q-T{Q\YGD?{&?,,@E{&,, T(a MO?G?EBB{M@?\?,O@?\?,@{& {,  w{Q*A ?a?{&A?,\ w{QbTA T?_ ?,\Tt :,-T$ T {, T&a MOAB T.a MOA?{AB w{Q*TA T?_ ?,4\Tn%B\?{Q?{QBT-a n%A\BBCA{ A\;s6}]Es?Lsm-ss?Lsm aDs?sm szDsaTESTa{%si)s?sm ZaDsaTESTa|%ws?L{pA|@{@|@sa#aI+A$a{%|%?&{?| @];e;z)w\$z, p0Sz"Sz f S;_;i?Hr[ *Bw[ *m[ ssw[ *m[ zmppp[  : o%pppp[  (m): o%  a;J [ m@M+ y@g;d;MV5` .zS` KJz, zp0zv` , yPMyAM` , g=` ,  ` %g$  g=` `  4&VJan G,VFeb Z,VMar m,VApr ,VMay ,VJun ,VJul ,VAug , VSep , VOct , VNov , VDec `  6%[ Sunday K&[ Monday b,[ Tuesday {,[ Wednesday ,[ Thursday ,[ Friday ,[ Saturday ppppppppRg:zy , [ , VS` , S`  k%wJ*owh%P+S+T+h% H%.w k% 'm j&.w j% 'm  !i;>@JI>-'>m>y>?L>m aD>?>mq>>aTestxA 6>=,6>$6>$df.>,>?,A ?9::$a/!t+.->gapp.faz z '6.->iapp: faz z '6>mapp:, faz z '6>=,6>$6>$d>,>?,A ?>2aѨfa'6>=,6>$6>$d>%>?,A >*appf - M'> >A -`#f%-`#'$f%>aѨH$00:00'H =f,<W C?f?,<>*appH$):H :):W 'XW =fH =:W ,<v=:H ,<W =:W :H ,<H =:H :v,<>=appppx,):v:):H :):W 'G{f>-'>aTestxA >?>?DA ?,D>=>I2::$>aѨF$y,'D> aF$'wf*f%>-'>aTestxA >?>?DA ?,D>=>W> az,'>-(>>6>$x6>$x6>$x>,>?,P>?,>aѨAutoSS:Tn-t W;RNq 8R?r?cr??D=R DCC>CL>r?&?,Cr?,?,C_ rBR>?R_ ?R_ R$Rb&?,O,krk*kGrO*OG,R&ak_ _ BBRPQRh?R_ ?, P}?R_ ?, P|P-_ R&aO_ _ BBR-'R p;lT)FN..+rN* l6l=,6l$6l$dlaNlaTesta%hlhU+lhN%lh6l=,6l$6l$dl9aѨppSN Points or SNMinlaTesta%hl lh k;r]%n;=.+:z,p#z$z X++$w.1*6O$B.1\a'6`$B.1\Y6Q$B.1\]'6b$B.1\z6e$B.1\W'6i$B.1\[6k$B.1\\%J%.1\|%x%.1\ }&J&.1\|&x&.1\ },J,.1\|,x,.1\ }w.Y*%r%.Y[ ~%v%.Y[  &r&.Y[ ~&v&.Y[  ,r,.Y[ ~,v,.Y[  w.\*%t%.\L A%u%.\L  B&t&.\L A&u&.\L  B,t,.\L A,u,.\L  B l;r;|RC|HY|?L|m-||?L|m aD|?|m /D|-'|aTestY+Z%x#hB@D|?,2]%|{X%|u|Z%|aX%'|x#T||-(|]% h;_+uRv8r* r6*(P 6Pw$P9 6jCa+@,w$P'w.C*.C-.C@@wC*F_+C(4 r*-('  u;Q%A@H%HQ%&kHjH&jQ%|j@k@kj}j@k@+j@k@kj}}j@k@+j@k@,?j@k@kjj2U%k@k@H@H@U%H C b%B,q+0B, %`% & &,b% 4,W+ B,b% G, L, Q, V, [, `, e, j, x, W% ,`% , , ,W%   J<'Lf_-z -Bq-F.'$Dqwq*qa/!N'I'$'J?, d ' ?'D,zqF'uq'?L'm-''?L'm aD'?'m szD}'O%'II'aqzJIn-TzDn|NONEFa/!"Dn|usI{Dn|{Dn|NONE;rD*D.ppnI .Dn| I{qVDDn|D.ppnI .Dn| 'Id '-('H'D?'-'II?DA$?,'O%'Id 'aq(-B'i'aadminyF%'JyHd ' aadmin('}-B-K(zqF'i'amore>>yF%'JyHd ' amore>>('}'F'aSDqzn'pd 'aSDq('C'aSDqzn'od 'aSDq(x '?'H'm&'V'?L'm &aD'?'i'a#########k+d-t+'W'$'"Id Jd?&'b{H'u'$'"Id Jd?&'b{Hk &D?F?q,<'F'$'iG '?'m ZaD1 n-SD?qnG?qnGqnY?,d%,d'aШTime:Sk Ping:SqnLLoss:RqFPH:SD?,<q?k Eff:Szn')Id Jd?&n'aѨTime:Sk Ping:SqnLLoss:RqFPH:SD?,<q?k Eff:S(x 'aШTime:Sk Ping:SqnLLoss:RqFPH:SD?,<q?k zn')Id Jd?&n'}aѨTime:Sk Ping:SqnLLoss:RqFPH:SD?,<q?k ( x;~;q;z;Fxy( {;|; y;Q[%zpQHL,%6QC<$@@n6QC?,@@ t;M,AGM, .%MP ?,1=M U&MP ?,1=M Z, {,M?,P ? ,M?, ,@DM?,P  , , ,@DMP ?, , MP ?,1=M , , , D, @DM?,P  I, N, v,MP ?,1=M ,MP ?,1=M   };NH{CNNapq$: vl$RvNap$vl$|N?,Rv?,N|?o$[N%|RNaq$N|?o$[N&Nap$NNN r$B<;R,Ih R, %l+~ !&r+~ /,]+~ =,^+~ K,[+~ n,p`+P!~ |,a+~ ,pc+P!~ ,d+~ , e+~ , Pf+~ , Pg+~ , Ph+~ 3, Pi+~ Q,Pj+~ _,u+~ m,w+~ {,z+~   F<G<@g$@ @<rc}ur({rErHr Dr?' M<Kh$..+rh$* b $E$`:E, :E@*E;E$:E, :EI*EhE$:E, w:E.*z :E.Ez -z -:b @z b E:b , z -z -{z Player:nIz n:n, EA:b ?LH@}An?g?X?V?U?Q?P?O?{?,H?,H@}Bn?g?X?V?U?Q?P?O?{?,H?, -K(Zb N6m <ZNtm {Om wZLO{w=:w&O<wNs.=:w&b t ?,?,}He?,H?, de?,HI-t ?,HF-t L?H?,|t  :b %W$H?, UHHC?,}?, QHH%HH?, nt HH?,PHHC?,}?,OHH%HH?,gt H%H?, HXHeJ?,}?, HVHeO-$,HH?, Hct e?Lm-& ?Lm aDb ?m /DD$aPlayerr W IHr ?,1I?, dW ?, aPlayer(CaDeaths`~,o?,}`?1o?, dW ?, aDeaths(FaFrags}#B-p?,}`?}#@1p?, dW ?, aFrags({t r ?,`?,W$H{UHH5?,}{QHHHH{n|HH{Hm PHHC?,}{Hm OHH%HH{Hm g|HH{HXHm <?,}{HVHm L-$HH{Hct m HH{H$\$t m E$:E:b b{H?,6r$y:E%b{H?,-M(:E:b &-M'L:E@Hb-Mr$?&EE$:E:n"a:EIr W b?,W W <EHr :E%b?,W n:EIHb:EEW$aSpectatorsr W .r ?,aSpectators( I<~ Pv~ ~ ~ ?,7~ h?-?%~ ?X?%~ ?X!-?~ ?,??hh %~ ?,h~   T,RSI xd$.n..RRd$@RvR?KR L<gxEփ?,gr6*$6-`6-n g$g-'gEggaTESTf,\ w.*|B?,\S?%g?,|B?,\|B?,\mwm*{m|\{m|\{m|\{m|\ %6 , %g-_'-_''X' .{ .X'-I$'g|g . ga .(z .6|\?& 6-`6-M .%-I$g-(gSBg K{6[ g6[ }g,2gg,2g|gg ag(|\?&g|ggaEUT SOURCE(|\?&g|gg4aType ShowHelp In Console For Extended Commands(|\?&gM$?Eg*g?,M$?,|Sgg$gEg-(gSBg i+XB:m.a  T, z @P<@Q<@R<@S<@T<@U<@V<@W<@ N<@R  Mr*-  & rP* @E@@@a u#wPG %^@Uw?, & E,^@U?,@w?, ^@Uw?,@^@ a (- @D@u#^@aѨp S /S (@@^wc%upp  +S{upp  S@ au( z,@F-j$~A2u'~,@Dhr#S~,hr#?,1=hs~,@Dh  ^`<u \<e,f$  L,c$  Z,^$  _, d, i, n, s, x, }, , , , , , ,[$  ,Z$  ,Y$  ,X$  ,W$  ,V$  ,U$  ,{#    m<X-j2P jX- r<o<Z-]7P ]Z- t<q<\-e<P e\- v<s<]-XAP X]- @u<^-WFgP W^- n<lJyK l_#_-b-e-_# H&.l x ' k,.l y ' ,.l z ' ,.l { ' ,.l | ' ,.l } ' , , , , , , , , $, ), ., 3, V,.l @ ' y,.l A'' ,e.l z# ' ,f.l y#'' ,g.l w#'' ,h.l t# '  !w<f-WKP Df- x<g-g- -&LHad Aj$ T,LHad Ag$ {,LHad A_$ ,LHad Af$ ,LHad Ac$ ,LHad A^$ , , , , , , , , , ", ', ,, S,LHad A[$ z,LHad AZ$ ,zsLLb,sY$L J,!zsLLd,GsX$L ,zsLL},sW$L ,zsLL,sV$L ,YzsLLD-sU$L ,zsLL{#sZ,L   y<h-QPNP Qh- ~<{<q-oUP oq- @}<z-lZ*P lz- D=ms_~Ym $t%t:m-ztBmt:_R:_B:_BmtBR-_'tW T$t%Qt:k-GztDmt:_R:_D:_DmtDR-_'QtW  <}-P_P P}- @A=~-RdP R~- I=R#q/}R#~R#.& C=pip9&-F -F (7-F ' E=-wo,B@|-Y.a/!,.$You are already a Spectator! 6-p ."Changing to Spectator Mode.Disconnect.(b"OverrideClassBotpack.CHSpectator'.Reconnect@.Spectator Spots Full. O=F=D.qݢ.a/!,|D..Joining Server.b"OverrideClass'.Reconnect T=vo{v%*v, vB*vv%Tv, vD*v1v%~v, vK*v[ H=E.rMDjX-XBYou Must Be Logged In As An Admin To Access This Debugger! E. 1XInject UserFlag 1X Load Debugger Activated!-f 'B ?0XInject UserFlag 0X"Load Debugger DeActivated!-f (B  J=H.tP GH. K=L=M.\xP \M. R=Q=Pj/a0 ~Y/w~*w~*Demo Record Spectator Found!'A ~ ~ *A  ~ { O tk ~ _O yk  { ~ { O tk & _~ _O yk G ~ C O mk h C ~ C O mk r~ *EUT: Failed to Load ScoreBoard for Demo!77w~ ~~~ w~*~a~*grO*OVA  rO*EUT: Failed to Load HUD for Demo!,,wO~~Ow~*~a~*aE#Hud class Loaded:VO!'10hE#%a A S.Sa=W@tzp,pp,WpHW$WWWO.N.WaQ.( B @g q1 rx"* g  g apx": (g )g g _.g  g ac.(  X.gB- 'm X=mk?,DC?D?,?D?, g- 'g Z=gk?,CC?D?,?D?,  g1 q1 *  I //************************************** // Class UTStatsLink // Extend Logging from UTStats to eliminate the need for dual packages // 06/27/07 extended from >> original package below. //************************************** // ============================================================================= // # # ### ### ### # ### ### // # # # # # # # # # // # # # ### # # # # ### // # # # # # ### # # // ### # ### # # # # ### // Beta 4.2 // ============================================================================= // UTStats Team: // * Azazel (Main PHP Coder) // * Toa (PHP Coder) // * AnthraX (Unrealscript Coder) // UTStats Forum: // * http://www.unrealadmin.org/forums/forumdisplay.php?f=173 // Released under the Unreal Open MOD License (included in zip package) // ============================================================================= class UTStatsLink extends StatLogFile; var bool bFirstBlood; var bool bGameStarted; var string ComboCode[4]; var string Buffer; var string Version; var string MutatorList; var float EndTime; var float WarmupTime; var int currentid; var int PHPos; struct PlayerInfo { var Pawn Pawn; var int ID, Spree, Combo, Kills, Deaths, Suicides, TeamKills; var float LastKill, EndTime, JoinTime; var bool bHasFlag; var string Login, IP; }; var PlayerInfo PI[33]; // ============================================================================= // Pregame functions // ============================================================================= function LogStandardInfo() { local int i; local string ServerActors; local mutator Mutator; local bool bInsta; //JM fix local WebServer ws; local string s; // Setup the buffer Buffer = ""; // Setup the PI structs for (i = 0; i < 32; ++i) PI[i].ID = -1; // Setup the Combo array ComboCode[0] = "spree_dbl"; ComboCode[1] = "spree_mult"; ComboCode[2] = "spree_ult"; ComboCode[3] = "spree_mon"; // Check the serveractors list ServerActors = Level.ConsoleCommand("get Engine.GameEngine ServerActors"); Log("### ___________________________________",'UTSTATS'); Log("### ",'UTSTATS'); Log("### # # ### ### ### # ### ### ",'UTSTATS'); Log("### # # # # # # # # # ",'UTSTATS'); Log("### # # # ### # # # # ### ",'UTSTATS'); Log("### # # # # # ### # # ",'UTSTATS'); Log("### ### # ### # # # # ### ",'UTSTATS'); Log("### ___________________________________",'UTSTATS'); Log("###",'UTSTATS'); Log("### - Version : "$Version,'UTSTATS'); Log("### ___________________________________",'UTSTATS'); LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Log_Standard"$Chr(9)$"UTStats"); LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Log_Version"$Chr(9)$Version); LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Game_Name"$Chr(9)$GameName); LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Game_Version"$Chr(9)$Level.EngineVersion); LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Absolute_Time"$Chr(9)$GetAbsoluteTime()); if (bWorld) { if( Level.ConsoleCommand("get UdpServerUplink douplink") ~= string(true) ) LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_Public"$Chr(9)$"1"); else LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_Public"$Chr(9)$"0"); } // Check for insta foreach AllActors(class'Mutator',Mutator) { if (Mutator.IsA('InstaGibDM')) bInsta = true; } LogEventString(GetTimeStamp()$Chr(9)$"game"$Chr(9)$"insta"$chr(9)$string(bInsta)); //JM Fix foreach Level.AllActors(class'WebServer', ws) { if (ws != none) { s = mid(ws.ServerURL,InStr(ws.ServerURL,"//") + 2); s = left(s,InStr(s,":")); break; } } LogIP(s); } function LogIP (string MyIP) { LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"True_Server_IP"$Chr(9)$MyIP); } // ============================================================================= // LogPlayerInfo ~ Called right after a player connects // ============================================================================= function LogPlayerInfo(Pawn Player) { local int i, j; Super.LogPlayerInfo(Player); // Setup a playerinfo struct for this player for (i=0;i<32;++i) { if (PI[i].ID == -1) // This slot is free break; } PI[i].ID = Player.PlayerReplicationInfo.PlayerID; PI[i].Pawn = Player; PI[i].Spree = 0; PI[i].Combo = 1; PI[i].Kills = 0; PI[i].Deaths = 0; PI[i].Suicides = 0; PI[i].TeamKills = 0; PI[i].LastKill = 0.0; PI[i].EndTime = 0.0; PI[i].JoinTime = Level.TimeSeconds; PI[i].bHasFlag = false; } // ============================================================================= // LogKill ~ Called for each killevent // ============================================================================= function LogKill( int KillerID, int VictimID, string KillerWeaponName, string VictimWeaponName, name DamageType ) { local int KID, VID; if (!bGameStarted && !GameStarted()) return; KID = GetID(KillerID); VID = GetID(VictimID); if ( KID == -1 || VID == -1 ) return; LogEventString(GetTimeStamp()$Chr(9)$"kill"$Chr(9)$KillerID$Chr(9)$KillerWeaponName$Chr(9)$VictimID$Chr(9)$VictimWeaponName$Chr(9)$DamageType); PI[KID].Kills++; PI[VID].Deaths++; if (!bFirstBlood) { LogEventString(GetTimeStamp()$chr(9)$"first_blood"$chr(9)$KillerID); bFirstBlood = true; } LogSpree (KID,VID); LogCombo(KID); if (PI[VID].bHasFlag) { LogEventString(GetTimeStamp()$chr(9)$"flag_kill"$chr(9)$KillerID); PI[VID].bHasFlag = false; } } // ============================================================================= // LogSpree ~ Handle killing sprees // Note: killing sprees get logged when they end. If someone has a killing spree // at the end of the game or while he disconnects, this function gets called // with KillerID 33 // ============================================================================= function LogSpree (int KillerID,int VictimID) { local int i; local string spree; if ( KillerID == -1 || VictimID == -1) return; if (KillerID != 33) PI[KillerID].Spree++; i = PI[VictimID].Spree; PI[VictimID].Spree = 0; if (i < 5) // No Spree return; else if (i<10) spree = "spree_kill"; else if (i<15) spree = "spree_Rampage"; else if (i<20) spree = "spree_dom"; else if (i<25) spree = "spree_uns"; else spree = "spree_god"; LogEventString(GetTimeStamp()$Chr(9)$"spree"$chr(9)$spree$chr(9)$PI[VictimID].ID); } // ============================================================================= // LogCombo ~ Handle combos // Note: combos get logged when they end. // ============================================================================= function LogCombo (int KillerID, optional bool bEndGame,optional bool bDisconnect) { local float Now; local int i; local string spree; if ( KillerID == -1 ) return; if (bEndGame) Now = EndTime; else if (bDisconnect) Now = PI[KillerID].EndTime; else Now = Level.TimeSeconds; if (Now - PI[KillerID].LastKill < 3.0) { if ((bEndGame || bDisconnect) && (PI[KillerID].Combo > 1)) // Combo was still going on when player disconnected LogEventString(GetTimeStamp()$chr(9)$"spree"$chr(9)$ComboCode[Clamp(PI[KillerID].Combo-2,0,3)]$chr(9)$PI[KillerID].ID); else PI[KillerID].Combo++; } else { if (PI[KillerID].Combo > 1) LogEventString(GetTimeStamp()$chr(9)$"spree"$chr(9)$ComboCode[Clamp(PI[KillerID].Combo-2,0,3)]$chr(9)$PI[KillerID].ID); PI[KillerID].Combo = 1; } PI[KillerID].LastKill = Now; } // ============================================================================= // LogTeamKill ~ :/ // ============================================================================= function LogTeamKill( int KillerID, int VictimID, string KillerWeaponName, string VictimWeaponName, name DamageType ) { local int KID, VID; if (!Level.Game.IsA('TeamGamePlus')) { LogKill(KillerID,VictimID,KillerWeaponName,VictimWeaponName,DamageType); return; } if (!bGameStarted && !GameStarted()) return; KID = GetID(KillerID); VID = GetID(VictimID); if ( KID == -1 || VID == -1 ) return; PI[KID].TeamKills++; PI[VID].Deaths++; super.LogTeamKill(KillerID,VictimID,KillerWeaponName,VictimWeaponName,DamageType); if (PI[VID].bHasFlag) PI[VID].bHasFlag = false; } // ============================================================================= // LogSuicide // ============================================================================= function LogSuicide (Pawn Killed, name DamageType, Pawn Instigator) { local int KLZ; if (!bGameStarted && !GameStarted()) return; KLZ = GetID(Killed.PlayerReplicationInfo.PlayerID); PI[KLZ].Suicides++; Super.LogSuicide(Killed,DamageType,Instigator); if (PI[KLZ].bHasFlag) PI[KLZ].bHasFlag = false; } // ============================================================================= // LogPlayerConnect ~ We don't like spectators // ============================================================================= function LogPlayerConnect(Pawn Player, optional string Checksum) { if (Player.IsA('Spectator')) return; super.LogPlayerConnect(Player,Checksum); } // ============================================================================= // LogPlayerDisconnect ~ Handle sprees/combos, then add to the buffer // ============================================================================= function LogPlayerDisconnect(Pawn Player) { local int i; if (Player.IsA('Spectator')) return; i = GetID(Player.PlayerReplicationInfo.PlayerID); LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"Disconnect"$Chr(9)$Player.PlayerReplicationInfo.PlayerID); PI[i].EndTime = Level.TimeSeconds; if (!bGameStarted && !GameStarted()) return; LogSpree(33,i); LogCombo(i,,true); AddToBuffer(i); PI[i].ID = -1; } // ============================================================================= // LogSpecialEvent ~ Any gametype-specific event goes trough this function // Note: we don't log translocation events as it's a lot of spam and it's not // usefull at all // ============================================================================= function LogSpecialEvent(string EventType, optional coerce string Arg1, optional coerce string Arg2, optional coerce string Arg3, optional coerce string Arg4) { local int i; local string event; if ((InStr(EventType,"transloc") != -1) || (InStr(EventType,"dom_") != -1) && (Level.Game.NumPlayers == 0)) { if (EventType=="translocate") { i = GetID(int(Arg1)); PI[i].bHasFlag = false; } } else { super.LogSpecialEvent(EventType,Arg1,Arg2,Arg3,Arg4); } if (!bGameStarted && !GameStarted()) return; if (EventType=="flag_taken" || EventType=="flag_pickedup") { i = GetID(int(Arg1)); PI[i].bHasFlag = true; } else if (EventType=="flag_captured") { i = GetID(int(Arg1)); PI[i].bHasFlag = false; } } // ============================================================================= // We're using the tick function to set IP's // ============================================================================= function Tick (float DeltaTime) { local Pawn NewPawn; super.Tick(DeltaTime); if (Level.Game.CurrentID > currentID) { for( NewPawn = Level.PawnList ; NewPawn!=None ; NewPawn = NewPawn.NextPawn ) { if(NewPawn.bIsPlayer && NewPawn.PlayerReplicationInfo.PlayerID == currentID) { SetIP(NewPawn); break; } } ++currentID; } } function SetIP( Pawn Player) { local string IP; local int i,j; local bool bReconnected; if (Player.IsA('PlayerPawn')) IP = PlayerPawn(Player).GetPlayerNetworkAddress(); else IP = "0.0.0.0"; IP = IPOnly(IP); LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"IP"$Chr(9)$Player.PlayerReplicationInfo.PlayerID$Chr(9)$IP); } function string IPOnly (string IP) { if (InStr(IP,":") != -1) IP = Left(IP,InStr(IP,":")); return IP; } // ============================================================================= // Game Start/End functions // ============================================================================= function LogGameStart() { LogEventString(GetTimeStamp()$Chr(9)$"game_start"); } function LogGameEnd( string Reason ) { local int i; EndTime = Level.TimeSeconds; Super.LogGameEnd(Reason); for (i=0;i<32;++i) { if (PI[i].ID != -1) // Player is still on the server { LogSpree(33,i); LogCombo(i,true); AddToBuffer(i); PI[i].ID = -1; } } ProcessBuffer(); } // ============================================================================= // Some lame code here. We want UTStats to log all playerstats at the end of the // game, not during the game. That's why we'll use a buffer. // ============================================================================= function AddToBuffer ( int PlayerID ) { local float Efficiency,TTL,TimeOnServer; local int i; if (PI[PlayerID].Pawn == none) return; TimeOnServer = Min(Level.TimeSeconds-PI[PlayerID].JoinTime,Level.TimeSeconds-WarmupTime); if (PI[PlayerID].Deaths != 0) TTL = TimeOnServer/(PI[PlayerID].Deaths) ; else TTL = TimeOnServer; if ((PI[PlayerID].Kills+PI[PlayerID].Deaths+PI[PlayerID].Suicides+PI[PlayerID].TeamKills) == 0) Efficiency = 0.0; else Efficiency = float(PI[PlayerID].Kills)/float(PI[PlayerID].Kills+PI[PlayerID].Deaths+PI[PlayerID].Suicides+PI[PlayerID].TeamKills)*100.0; //BufferLog("stat_player","accuracy",PI[PlayerID].ID,string(Accuracy)); BufferLog("stat_player","score",PI[PlayerID].ID,string(int(PI[PlayerID].Pawn.PlayerReplicationInfo.Score))); BufferLog("stat_player","frags",PI[PlayerID].ID,string(PI[PlayerID].Kills - PI[PlayerID].Suicides)); BufferLog("stat_player","kills",PI[PlayerID].ID,string(PI[PlayerID].Kills)); BufferLog("stat_player","deaths",PI[PlayerID].ID,string(PI[PlayerID].Deaths)); BufferLog("stat_player","suicides",PI[PlayerID].ID,string(PI[PlayerID].Suicides)); BufferLog("stat_player","teamkills",PI[PlayerID].ID,string(PI[PlayerID].TeamKills)); BufferLog("stat_player","efficiency",PI[PlayerID].ID,string(Efficiency)); BufferLog("stat_player","time_on_server",PI[PlayerID].ID,string(Level.TimeSeconds-PI[PlayerID].JoinTime)); BufferLog("stat_player","ttl",PI[PlayerID].ID,string(TTL)); } function BufferLog ( string Tag, string Type, int PlayerID, string Value ) { Buffer = Buffer$":::"$Tag$chr(9)$Type$chr(9)$string(PlayerID)$chr(9)$Value; } function ProcessBuffer () // This will cause extreme cpu usage on the server for a sec :) { local int index,i; while (InStr(Buffer,":::") != -1) { index = InStr(Buffer,":::"); LogEventString(GetTimeStamp()$chr(9)$Left(Buffer,index)); Buffer = Mid(Buffer,index+3); } LogEventString(GetTimeStamp()$chr(9)$Buffer); if (Level.Game.IsA('TeamGamePlus')) // Requested by the php-coders :o { for (i=0;i 0) return false; else { if (!bGameStarted) { WarmupTime = Level.TimeSeconds; LogEventString(GetTimeStamp()$Chr(9)$"game"$chr(9)$"realstart"); } bGameStarted = true; return true; } } // ============================================================================= // AddMutator ~ Add mutatorclass to our list // ============================================================================= function AddMutator (Mutator M) { MutatorList = MutatorList$":::"$M.class; } // ============================================================================= // LogMutatorList ~ Log the list // ============================================================================= function LogMutatorList() { local string Entry,Desc; local int Num; Entry = "(none)"; while (Entry != "") { if ((InStr(CAPS(MutatorList),CAPS(Entry)) != -1) && Desc != "") { if (InStr(Desc,",") != -1) Desc = Left(Desc,InStr(Desc,",")); LogEventString(GetTimeStamp()$chr(9)$"game"$chr(9)$"GoodMutator"$chr(9)$Desc); } GetNextIntDesc("Engine.Mutator",Num++,Entry,Desc); } } // ============================================================================= // Defaultproperties // ============================================================================= r_.c=_6DwE_?L_h-__?L_h aD_?_h szD_aTESTrB#_v )_?_h ZaD_aTESTrC#w_?L\pA[@\@[@_a#rU.| rB#C#?&\?[ @i=`)|>v$`, p0S`"S` x"f=u-W=j=i)/Dri*&zipi: C/  f@l=h=MLp5T .@ST KJ@, @p0@vT , fPMfAMT , N=T ,  T %N$  N=T T  4&JJan G,JFeb Z,JMar m,JApr ,JMay ,JJun ,JJul ,JAug , JSep , JOct , JNov , JDec T  6%w Sunday K&w Monday b,w Tuesday {,w Wednesday ,w Thursday ,w Friday ,w Saturday ppppppppRN:@f , w , JST , ST  k=io=n"-mX$:X:n"&TXU=:X&:U:n":UD:TDTU:UD:TD-:UD:TDTU:UD:TD-:UD:TD.?:UD:TDTUU7r":TD:TD:XD:XDr"X @g/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> SmartCTFGame <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class SmartCTFGame extends CTFGame config; #exec OBJ LOAD FILE=..\Sounds\EUT_Sounds.uax var EUTGameReplicationInfo MyCRI; var UTStatsLink StatLink; var Actor IpToCountry; var class _EndStatsClass; var Pawn FlagDropper; var Pawn FlagGrabs[40]; var Pawn FlagAssists[40]; var CTFFlag RedFlag, BlueFlag, FlagToReturn; var LowGrav lg; var bool bAltOvertime, bExpandSpree; var byte AKMS[40], FlakKills[40], ComboKills[40], WarheadCount, ExpandedSpreeSwitch; var int NumFlagGrabs[40], BestRanking[3], LowGravityAerialKillAdjuster; var sound _CaptureSound[4]; var sound _ReturnSound; var sound DeniedSound; var sound FlakMonkeySound; var sound HeadHunterSound; var sound ComboWhoreSound; var sound KillingSpreeSound; var sound RampageSound; var sound DominatingSound; var sound UnStoppableSound; var sound GodlikeSound; var sound WhickedSickSound; var sound RedTeamIsTheWinnerSound; var sound FlawlessVictorySound; var sound BlueTeamIsTheWinnerSound; var sound LastSecondSaveSound; var sound RedTeamScoresSound; var sound RedTeamTakesTheLeadSound; var sound RedTeamIncreasesThierLeadSound; var sound RedTeamDominatingSound; var sound BlueTeamScoresSound; var sound BlueTeamTakesTheLeadSound; var sound BlueTeamIncreasesThierLeadSound; var sound BlueTeamDominatingSound; var sound HatTrickSound; var sound HitSoundSound; var sound HitSoundFriendlySound; var sound DoubleKillSound; var sound MultiKillSound; var sound MegaKillSound; var sound UltraKillSound; var sound MonsterKillSoundF; var sound LudicriousKillSound; var sound HolyShitKillSound; var sound OwnageSound; var string BestPlayers[3]; var vector WarheadLocation[20]; var() config bool bEnhancedSprees; var() config bool bEnhancedMessages; var() config bool bShowIPS; var() config bool bLogMods; var() config bool bCheckDefaults; var() config bool bHitSounds; var() config bool bDemoRequest; var() config bool bKickSpeedHack; var() config bool bReport; var() config bool bScoreBoardEff; var() config bool bAutoTaunts; var() config bool bEnhancedDeathMessages; var() config bool bAntiTimer; var() config bool bTeamBeacon; var() config bool bStatLink; var() config bool bAlwaysRecordTourney; var() config bool bKickMinY; var() config bool bNoOverTime; var() config bool bIpToCountry; var() config bool bUsesCustomWeapon; var() config bool bNoFlockPawns; var() config bool bNoDroppedFlags; var() config byte FlagCap; var() config byte AssistsBonus; var() config byte FlagKill; var() config byte CoversBonus; var() config byte SealsBonus; var() config byte DeniedBonus; var() config byte SavesBonus; var() config byte AnnouncerLevel; var() config byte SetFOV; var() config float MinY; var() config float FlagSaveDistance; var() config float FlagDeniedDistance; var() config float FlagCoverVisibleDistance; var() config float FlagCoverHiddenDistance; var() config int TraceDistance; var() config string TransKillMessage; var() config string ImpactKillMessage; var() config string EnforcerKillMessage; var() config string BioKillMessage; var() config string ShockRifleKillMessage; var() config string PulseGunKillMessage; var() config string RipperKillMessage; var() config string MiniGunKillMessage; var() config string FlakCannonKillMessage; var() config string RocketLauncherKillMessage; var() config string SniperRifleKillMessage; var() config string CustomWeaponKillMessage; var() config string AerialKillBio; var() config string AerialKillRipper; var() config string AerialKillFlak; var() config string AerialKillRockets; var() config string AerialKillSniper; var() config string AerialKillSuper; var() config string AerialKillTrans; var() config string AerialKillCombo; var() config string AerialKillEnforcer; var() config string AerialKillPulse; var() config string AerialKillMini; var() config string AerialKillPiston; var() config string AerialKillCustom; var() config string RedTeamName, BlueTeamName; var() config string SoundPackage; var() config string CustomWeaponName; var() config string IpToCountryTexturePackage; var() config string MessageOfTheDay; struct _WeaponDamage { var int Enforcer, BioGun, ShockRifle, Ripper, MiniGun, PulseGun, FlakGun, EightBall, SniperRifle, SuperShockRifle, CustomWeapon; }; var _WeaponDamage WeaponDamage[40]; struct _MultiKills { var float MultiTime; var byte MultiLevel; }; var _MultiKills MultiKills[40]; struct _SplashKills { var float FlakTime; var Pawn LastHit; }; var _SplashKills SplashKills[40]; const MaxArray = 40; const MaxTries = 21; //------------------------------------- // PreLogin //------------------------------------- event PreLogin ( string Options, string Address, out string Error, out string FailCode ) { local string Face, Pad, PlayerName; local bool bCheckFace; bCheckFace = ParseFace(Options, Address, Face, Pad, PlayerName); if (Face == "FailedParse") { Error = "FAILEDPARSE"; FailCode = "Your Client Failed to Parse at Prelogin Correctly"; log("Client Failed PreLogin with a Failure to Parse Options"@Pad,'EUT'); Super.PreLogin(Options, Address, Error, FailCode); } else if (bCheckFace) { Error = "ILLEGALFACE"; FailCode = "Ivan is not an authorized Face"; log("Client Attempted to PreLogin with Face"@Face@"--"@PlayerName@Pad,'EUT'); } else Super.PreLogin(Options, Address, Error, FailCode); } //------------------------------------- // ParseFace //------------------------------------- function bool ParseFace(string Options, string Address, out string Face, out string Pad, out string PlayerName) { local string s; if (Instr(Address,":") != -1) Pad = Left(Address, InStr(Address,":")); else Pad = Address; Options = Caps(Options); if (Instr(Options, "NAME=") != -1) { s = Mid(Options, instr(Options, "NAME=") + 5); if (instr(s, "?") != -1) PlayerName = left(s, instr(s,"?")); else PlayerName = "FailedParse"; } else PlayerName = "FailedParse"; if(InStr(Options, "FACE=") != -1) { s = Mid(Options, instr(Options, "FACE=") + 5); if (instr(s, "?") != -1) { Face = left(s, instr(s,"?")); if (instr(Face, ".") != -1) Face = mid(Face, instr(Face, ".") + 1); else Face = "FailedParse"; } else Face = "FailedParse"; } else Face = "FailedParse"; if (Face == "IVAN") return true; return False; } //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { local int i; local Warheadlauncher WL; local Actor A; super(TeamGamePlus).PostBeginPlay(); PreCacheSounds(); ResetVars(); if (bEnhancedSprees) { DeathMessageClass = Class'EUTDeathMessagePlus'; MyCRI.bUsesSpreeSounds = true; class'EUTMultiKillMessage'.default.DoubleKillSound = DoubleKillSound; class'EUTMultiKillMessage'.default.MultiKillSound = MultiKillSound; class'EUTMultiKillMessage'.default.MegaKillSound = MegaKillSound; class'EUTMultiKillMessage'.default.UltraKillSound = UltraKillSound; class'EUTMultiKillMessage'.default.MonsterKillSoundF = MonsterKillSoundF; class'EUTMultiKillMessage'.default.LudicriousKillSound = LudicriousKillSound; class'EUTMultiKillMessage'.default.HolyShitKillSound = HolyShitKillSound; class'EUTMultiKillMessage'.default.OwnageSound = OwnageSound; MyCRI.DoubleKillSound = DoubleKillSound; MyCRI.MultiKillSound = MultiKillSound; MyCRI.MegaKillSound = MegaKillSound; MyCRI.UltraKillSound = UltraKillSound; MyCRI.MonsterKillSoundF = MonsterKillSoundF; MyCRI.LudicriousKillSound = LudicriousKillSound; MyCRI.HolyShitKillSound = HolyShitKillSound; MyCRI.OwnageSound = OwnageSound; MyCRI.WhickedSickSound = WhickedSickSound; class'KillingSpreeMessage'.default.SpreeSound[0] = KillingSpreeSound; class'KillingSpreeMessage'.default.SpreeSound[1] = RampageSound; class'KillingSpreeMessage'.default.SpreeSound[2] = DominatingSound; class'KillingSpreeMessage'.default.SpreeSound[3] = UnStoppableSound; class'KillingSpreeMessage'.default.SpreeSound[4] = GodlikeSound; MyCRI.SpreeSound[0] = KillingSpreeSound; MyCRI.SpreeSound[1] = RampageSound; MyCRI.SpreeSound[2] = DominatingSound; MyCRI.SpreeSound[3] = UnStoppableSound; MyCRI.SpreeSound[4] = GodlikeSound; } else DeathMessageClass=Class'DeathMessagePlus'; if (bEnhancedMessages) { MyCRI.RedTeamScoresSound = RedTeamScoresSound; MyCRI.BlueTeamScoresSound = BlueTeamScoresSound; MyCRI.RedTeamTakesTheLeadSound = RedTeamTakesTheLeadSound; MyCRI.BlueTeamTakesTheLeadSound = BlueTeamTakesTheLeadSound; MyCRI.RedTeamIncreasesThierLeadSound = RedTeamIncreasesThierLeadSound; MyCRI.BlueTeamIncreasesThierLeadSound = BlueTeamIncreasesThierLeadSound; MyCRI.RedTeamDominatingSound = RedTeamDominatingSound; MyCRI.BlueTeamDominatingSound = BlueTeamDominatingSound; MyCRI.DeniedSound = DeniedSound; MyCRI.RedTeamIsTheWinnerSound = RedTeamIsTheWinnerSound; MyCRI.BlueTeamIsTheWinnerSound = BlueTeamIsTheWinnerSound; MyCRI.FlawlessVictorySound = FlawlessVictorySound; MyCRI.LastSecondSaveSound = LastSecondSaveSound; MyCRI.HatTrickSound = HatTrickSound; } MyCRI.FlakMonkeySound = FlakMonkeySound; MyCRI.HeadHunterSound = HeadHunterSound; MyCRI.ComboWhoreSound = ComboWhoreSound; MyCRI.HitSoundSound = HitSoundSound; MyCRI.HitSoundFriendlySound = HitSoundFriendlySound; if (Level.NetMode == NM_Client) Spawn(Class'EUTDemoEnhancer'); i = 0; WarheadCount = 0; foreach level.allactors(class'Warheadlauncher', WL) { if (i < 20) { WarheadLocation[i] = WL.location; i++; WarheadCount++; } } LowGravityAerialKillAdjuster = 1; foreach Level.AllActors(class'LowGrav',lg) if (lg != none) LowGravityAerialKillAdjuster = 2.5; if (bStatLink) { StatLink = Spawn(Class'UTStatsLink'); if (StatLink != none) { Log("CTF Stat Link Created:"@StatLink,'EUT'); InitializeLogging(); } } else GameName = "Smart Capture the Flag"; if (bIpToCountry) { foreach AllActors(class'Actor', A, 'IpToCountry') { IpToCountry = A; log("IpToCountry Located"@IpToCountry,'EUT'); break; } } } //------------------------------------- // PreCacheSounds //------------------------------------- function PreCacheSounds() { DeniedSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Denied",class'sound',true)); if(DeniedSound == none) DeniedSound = sound'EUT_Sounds.Denied'; HeadHunterSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HeadHunter",class'sound',true)); if(HeadHunterSound == none) HeadHunterSound = sound'EUT_Sounds.HeadHunter'; FlakMonkeySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_FlackMonkey",class'sound',true)); if(FlakMonkeySound == none) FlakMonkeySound = sound'EUT_Sounds.FlackMonkey'; ComboWhoreSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_ComboWhore",class'sound',true)); if(ComboWhoreSound == none) ComboWhoreSound = sound'EUT_Sounds.ComboWhore'; KillingSpreeSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_KillingSpree",class'sound',true)); if(KillingSpreeSound == none) KillingSpreeSound = sound'EUT_Sounds.Killing_Spree'; RampageSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Rampage",class'sound',true)); if(RampageSound == none) RampageSound = sound'EUT_Sounds.Rampage'; DominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Dominating",class'sound',true)); if(DominatingSound == none) DominatingSound = sound'EUT_Sounds.Dominating'; UnStoppableSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_UnStoppable",class'sound',true)); if(UnStoppableSound == none) UnStoppableSound = sound'EUT_Sounds.UnStoppable'; GodlikeSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Godlike",class'sound',true)); if(GodlikeSound == none) GodlikeSound = sound'EUT_Sounds.Godlike'; WhickedSickSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_WhickedSick",class'sound',true)); if(WhickedSickSound == none) WhickedSickSound = sound'EUT_Sounds.WhickedSick'; RedTeamIsTheWinnerSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_red_team_is_the_winner",class'sound',true)); if(RedTeamIsTheWinnerSound == none) RedTeamIsTheWinnerSound = sound'EUT_Sounds.red_team_is_the_winner'; FlawlessVictorySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Flawless_victory",class'sound',true)); if(FlawlessVictorySound == none) FlawlessVictorySound = sound'EUT_Sounds.Flawless_victory'; BlueTeamIsTheWinnerSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_blue_team_is_the_winner",class'sound',true)); if(BlueTeamIsTheWinnerSound == none) BlueTeamIsTheWinnerSound = sound'EUT_Sounds.blue_team_is_the_winner'; LastSecondSaveSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Last_Second_Save",class'sound',true)); if(LastSecondSaveSound == none) LastSecondSaveSound = sound'EUT_Sounds.Last_Second_Save'; RedTeamScoresSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_Scores",class'sound',true)); if(RedTeamScoresSound == none) RedTeamScoresSound = sound'EUT_Sounds.Red_Team_Scores'; RedTeamTakesTheLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_takes_lead",class'sound',true)); if(RedTeamTakesTheLeadSound == none) RedTeamTakesTheLeadSound = sound'EUT_Sounds.Red_Team_takes_lead'; RedTeamIncreasesThierLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_increases_their_lead",class'sound',true)); if(RedTeamIncreasesThierLeadSound == none) RedTeamIncreasesThierLeadSound = sound'EUT_Sounds.Red_Team_increases_their_lead'; RedTeamDominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_red_team_Dominating",class'sound',true)); if(RedTeamDominatingSound == none) RedTeamDominatingSound = sound'EUT_Sounds.red_team_Dominating'; BlueTeamScoresSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_Scores",class'sound',true)); if(BlueTeamScoresSound == none) BlueTeamScoresSound = sound'EUT_Sounds.Blue_Team_Scores'; BlueTeamTakesTheLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_takes_the_lead",class'sound',true)); if(BlueTeamTakesTheLeadSound == none) BlueTeamTakesTheLeadSound = sound'EUT_Sounds.Blue_Team_takes_the_lead'; BlueTeamIncreasesThierLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_increases_their_lead",class'sound',true)); if(BlueTeamIncreasesThierLeadSound == none) BlueTeamIncreasesThierLeadSound = sound'EUT_Sounds.Blue_Team_increases_their_lead'; BlueTeamDominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_blue_team_Dominating",class'sound',true)); if(BlueTeamDominatingSound == none) BlueTeamDominatingSound = sound'EUT_Sounds.blue_team_Dominating'; HatTrickSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HatTrick",class'sound',true)); if(HatTrickSound == none) HatTrickSound = sound'EUT_Sounds.HatTrick'; HitSoundSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HitSound",class'sound',true)); if(HitSoundSound == none) HitSoundSound = sound'EUT_Sounds.HitSound'; HitSoundFriendlySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HitSound_F",class'sound',true)); if(HitSoundFriendlySound == none) HitSoundFriendlySound =sound'EUT_Sounds.HitSound_F'; DoubleKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Double_Kill",class'sound',true)); if(DoubleKillSound == none) DoubleKillSound = sound'EUT_Sounds.Double_Kill'; MultiKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_MultiKill",class'sound',true)); if(MultiKillSound == none) MultiKillSound = sound'EUT_Sounds.MultiKill'; MegaKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_megakill",class'sound',true)); if(MegaKillSound == none) MegaKillSound = sound'EUT_Sounds.megakill'; UltraKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_UltraKill",class'sound',true)); if(UltraKillSound == none) UltraKillSound = sound'EUT_Sounds.UltraKill'; MonsterKillSoundF = sound(DynamicLoadObject(SoundPackage$"."$"Alt_MonsterKill_F",class'sound',true)); if(MonsterKillSoundF == none) MonsterKillSoundF = sound'EUT_Sounds.MonsterKill_F'; LudicriousKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_LudicrousKill",class'sound',true)); if(LudicriousKillSound == none) LudicriousKillSound = sound'EUT_Sounds.LudicrousKill'; HolyShitKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HolyShit_F",class'sound',true)); if(HolyShitKillSound == none) HolyShitKillSound = sound'EUT_Sounds.HolyShit_F'; OwnageSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Ownage",class'sound',true)); if(OwnageSound == none) OwnageSound = sound'EUT_Sounds.Ownage'; } //------------------------------------- // ResetVars //------------------------------------- function ResetVars() { local int i; MyCRI = EUTGameReplicationInfo(GameReplicationInfo); MyCRI.RedTeamName = RedTeamName; MyCRI.BlueTeamName = BlueTeamName; MyCRI.bShowIPS = bShowIPS; MyCRI.TraceDistance = TraceDistance; MyCRI.bTeamBeacon = bTeamBeacon; MyCRI.bIpToCountry = bIpToCountry; RedFlag = MyCRI.FlagList[0]; BlueFlag = MyCRI.FlagList[1]; MyCRI.TransKillMessage = TransKillMessage; MyCRI.ImpactKillMessage = ImpactKillMessage; MyCRI.EnforcerKillMessage = EnforcerKillMessage; MyCRI.BioKillMessage = BioKillMessage; MyCRI.ShockRifleKillMessage = ShockRifleKillMessage; MyCRI.PulseGunKillMessage = PulseGunKillMessage; MyCRI.RipperKillMessage = RipperKillMessage; MyCRI.MiniGunKillMessage = MiniGunKillMessage; MyCRI.FlakCannonKillMessage = FlakCannonKillMessage; MyCRI.RocketLauncherKillMessage = RocketLauncherKillMessage; MyCRI.SniperRifleKillMessage = SniperRifleKillMessage; MyCRI.AerialKillBio = AerialKillBio; MyCRI.AerialKillRipper = AerialKillRipper; MyCRI.AerialKillFlak = AerialKillFlak; MyCRI.AerialKillRockets = AerialKillRockets; MyCRI.AerialKillSniper = AerialKillSniper; MyCRI.AerialKillSuper = AerialKillSuper; MyCRI.AerialKillTrans = AerialKillTrans; MyCRI.AerialKillCombo = AerialKillCombo; MyCRI.AerialKillEnforcer = AerialKillEnforcer; MyCRI.AerialKillPulse = AerialKillPulse; MyCRI.AerialKillMini = AerialKillMini; MyCRI.AerialKillPiston = AerialKillPiston; MyCRI.bScoreBoardEff = bScoreBoardEff; MyCRI.IpToCountryTexturePackage = IpToCountryTexturePackage; MyCRI.CustomWeaponName = CustomWeaponName; MyCRI.bUsesCustomWeapon = bUsesCustomWeapon; MyCRI.CustomWeaponKillMessage = CustomWeaponKillMessage; MyCRI.AerialKillCustom = AerialKillCustom; MyCRI.SetFOV = SetFOV; MyCRI.bEnhancedMessages = bEnhancedMessages; MyCRI.bTournament= bTournament; MyCRI.MessageOfTheDay = MessageOfTheDay; for (i = 0; i < MaxArray; i++) { MyCRI.IStats1[i].FlagCaps = 0; MyCRI.IStats1[i].FlagGrabs = 0; MyCRI.IStats1[i].BaseSeals = 0; MyCRI.IStats1[i].FlagAssists = 0; MyCRI.IStats3[i].FlagCovers = 0; MyCRI.IStats2[i].FlagKills = 0; MyCRI.SealsSpreeCount[i] = 0; MyCRI.CoversSpreeCount[i] = 0; MyCRI.TotalDamageAmmount[i] = 0; MyCRI.IStats2[i].FlagsDenied = 0; MyCRI.IStats2[i].FlagSaves = 0; MyCRI.HeadShotsCount[i] = 0; MyCRI.TotalKills[i] = 0; MyCRI.TotalDeaths[i] = 0; MyCRI.CurrentRanking[i] = 0; MyCRI.CurrentTotalAccuracy[i] = 0; MyCRI.ClientHitSound[i] = 0; MultiKills[i].MultiLevel = 0; MultiKills[i].MultiTime = 0; NumFlagGrabs[i] = 0; MyCRI.IStats2[i].GameSaves = 0; MyCRI.StoredPlayerIP[i] = ""; MyCRI.IPCTexture[i] = ""; MyCRI.ClientIdentified[i] = 0; FlagGrabs[i] = none; FlagAssists[i] = none; MyCRI.EnforcerHitCount[i] = 0; MyCRI.BioGunHitCount[i] = 0; MyCRI.ShockRifleHitCount[i] = 0; MyCRI.PulseGunHitCount[i] = 0; MyCRI.RipperHitCount[i] = 0; MyCRI.MiniGunHitCount[i] = 0; MyCRI.FlakGunHitCount[i] = 0; MyCRI.EightBallHitCount[i] = 0; MyCRI.SniperRifleHitCount[i] = 0; MyCRI.SuperShockRifleHitCount[i] = 0; MyCRI.PlayerAccuracy1[i].Enforcer = 0; MyCRI.PlayerAccuracy1[i].BioGun = 0; MyCRI.PlayerAccuracy1[i].ShockRifle = 0; MyCRI.PlayerAccuracy2[i].PulseGun = 0; MyCRI.PlayerAccuracy2[i].Ripper = 0; MyCRI.PlayerAccuracy2[i].MiniGun = 0; MyCRI.PlayerAccuracy3[i].FlakCannon = 0; MyCRI.PlayerAccuracy3[i].EightBall = 0; MyCRI.PlayerAccuracy3[i].SniperRifle = 0; MyCRI.PlayerAccuracy3[i].InstaGib = 0; MyCRI.KillingSpree[i].UltraKills = 0; MyCRI.KillingSpree[i].MonsterKills = 0; MyCRI.KillingSpree[i].LudicriousKills = 0; MyCRI.KillingSpree[i].HolyShitKills = 0; MyCRI.MultiKills1[i].KillingSpree = 0; MyCRI.MultiKills1[i].Rampage = 0; MyCRI.MultiKills1[i].Dominating = 0; MyCRI.MultiKills2[i].UnStoppable = 0; MyCRI.MultiKills2[i].Godlike = 0; MyCRI.MultiKills2[i].Ownage = 0; MyCRI.HeadHunterCount[i] = 0; MyCRI.ComboWhoreCount[i] = 0; MyCRI.FlakMonkeyCount[i] = 0; FlakKills[i] = 0; ComboKills[i] = 0; MyCRI.ArmorAmmount[i] = 0; MyCRI.HealthAmmount[i] = 0; WeaponDamage[i].Enforcer = 0; WeaponDamage[i].BioGun = 0; WeaponDamage[i].ShockRifle = 0; WeaponDamage[i].PulseGun = 0; WeaponDamage[i].Ripper = 0; WeaponDamage[i].MiniGun = 0; WeaponDamage[i].FlakGun = 0; WeaponDamage[i].EightBall = 0; WeaponDamage[i].SniperRifle = 0; WeaponDamage[i].SuperShockRifle = 0; AKMS[i] = 0; MyCRI.CustomWeaponHitCount[i] = 0; WeaponDamage[i].CustomWeapon = 0; MyCRI.PlayerAccuracy4[i].CustomWeapon = 0; SplashKills[i].FlakTime = 0; SplashKills[i].LastHit = none; } } //------------------------------------- // InitializeLogging //------------------------------------- function InitializeLogging() { local Mutator M; StatLink.bWorld = False; StatLink.StartLog(); StatLink.LogStandardInfo(); StatLink.LogServerInfo(); StatLink.LogMapParameters(); for (M = Level.Game.BaseMutator; M != None; M = M.NextMutator) StatLink.AddMutator(M); StatLink.LogMutatorList(); Level.Game.LogGameParameters(StatLink); Level.Game.LocalLog = StatLink; Level.Game.LocalLogFileName = StatLink.GetLogFileName(); } //------------------------------------- // InitGameReplicationInfo //------------------------------------- function InitGameReplicationInfo() { Super.InitGameReplicationInfo(); ResetVars(); } //------------------------------------- // StartMatch //------------------------------------- function StartMatch() { Super.StartMatch(); log("Match Started"); if (bTournament) { ResetVars(); MyCRI.bWarmupSwitch = true; } MyCRI.bMatchStarted = true; } //------------------------------------- // Logout //------------------------------------- function Logout(Pawn P) { local int pid; pid = P.PlayerReplicationInfo.PlayerID; MyCRI = EUTGameReplicationInfo(GameReplicationInfo); if (P.PlayerReplicationInfo.HasFlag != none && (!P.PlayerReplicationInfo.HasFlag.IsA('EUTReadyFlag'))) CTFFlag(P.PlayerReplicationInfo.HasFlag).Drop(0.5 * P.Velocity); super(TeamGamePlus).Logout(P); MyCRI.IStats1[pid].FlagCaps = 0; MyCRI.IStats1[pid].FlagGrabs = 0; MyCRI.IStats1[pid].BaseSeals = 0; MyCRI.IStats1[pid].FlagAssists = 0; MyCRI.IStats3[pid].FlagCovers = 0; MyCRI.IStats2[pid].FlagKills = 0; MyCRI.SealsSpreeCount[pid] = 0; MyCRI.CoversSpreeCount[pid] = 0; MyCRI.TotalDamageAmmount[pid] = 0; MyCRI.IStats2[pid].FlagsDenied = 0; MyCRI.IStats2[pid].FlagSaves = 0; MyCRI.HeadShotsCount[pid] = 0; MyCRI.TotalKills[pid] = 0; MyCRI.TotalDeaths[pid] = 0; MyCRI.CurrentRanking[pid] = 0; MyCRI.CurrentTotalAccuracy[pid] = 0; MyCRI.ClientHitSound[pid] = 0; MultiKills[pid].MultiLevel = 0; MultiKills[pid].MultiTime = 0; MyCRI.StoredPlayerIP[pid] = ""; MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = 0; NumFlagGrabs[pid] = 0; MyCRI.IStats2[pid].GameSaves = 0; FlagGrabs[pid] = none; FlagAssists[pid] = none; MyCRI.EnforcerHitCount[pid] = 0; MyCRI.BioGunHitCount[pid] = 0; MyCRI.ShockRifleHitCount[pid] = 0; MyCRI.PulseGunHitCount[pid] = 0; MyCRI.RipperHitCount[pid] = 0; MyCRI.MiniGunHitCount[pid] = 0; MyCRI.FlakGunHitCount[pid] = 0; MyCRI.EightBallHitCount[pid] = 0; MyCRI.SniperRifleHitCount[pid] = 0; MyCRI.SuperShockRifleHitCount[pid] = 0; MyCRI.PlayerAccuracy1[pid].Enforcer = 0; MyCRI.PlayerAccuracy1[pid].BioGun = 0; MyCRI.PlayerAccuracy1[pid].ShockRifle = 0; MyCRI.PlayerAccuracy2[pid].PulseGun = 0; MyCRI.PlayerAccuracy2[pid].Ripper = 0; MyCRI.PlayerAccuracy2[pid].MiniGun = 0; MyCRI.PlayerAccuracy3[pid].FlakCannon = 0; MyCRI.PlayerAccuracy3[pid].EightBall = 0; MyCRI.PlayerAccuracy3[pid].SniperRifle = 0; MyCRI.PlayerAccuracy3[pid].InstaGib = 0; MyCRI.KillingSpree[pid].UltraKills = 0; MyCRI.KillingSpree[pid].MonsterKills = 0; MyCRI.KillingSpree[pid].LudicriousKills = 0; MyCRI.KillingSpree[pid].HolyShitKills = 0; MyCRI.MultiKills1[pid].KillingSpree = 0; MyCRI.MultiKills1[pid].Rampage = 0; MyCRI.MultiKills1[pid].Dominating = 0; MyCRI.MultiKills2[pid].UnStoppable = 0; MyCRI.MultiKills2[pid].Godlike = 0; MyCRI.MultiKills2[pid].Ownage = 0; MyCRI.HeadHunterCount[pid] = 0; MyCRI.ComboWhoreCount[pid] = 0; MyCRI.FlakMonkeyCount[pid] = 0; FlakKills[pid] = 0; ComboKills[pid] = 0; MyCRI.ArmorAmmount[pid] = 0; MyCRI.HealthAmmount[pid] = 0; WeaponDamage[pid].Enforcer = 0; WeaponDamage[pid].BioGun = 0; WeaponDamage[pid].ShockRifle = 0; WeaponDamage[pid].PulseGun = 0; WeaponDamage[pid].Ripper = 0; WeaponDamage[pid].MiniGun = 0; WeaponDamage[pid].FlakGun = 0; WeaponDamage[pid].EightBall = 0; WeaponDamage[pid].SniperRifle = 0; WeaponDamage[pid].SuperShockRifle = 0; AKMS[pid] = 0; MyCRI.CustomWeaponHitCount[pid] = 0; WeaponDamage[pid].CustomWeapon = 0; MyCRI.PlayerAccuracy4[pid].CustomWeapon = 0; SplashKills[pid].FlakTime = 0; SplashKills[pid].LastHit = none; } //------------------------------------- // InitGame //------------------------------------- event InitGame(string O, out string E) { super(TeamGamePlus).InitGame(O, E); if (bRatedGame) GoalTeamScore = 5; FragLimit = 0; SetGameSpeed(GameSpeed); } //------------------------------------- // Killed //------------------------------------- function Killed( Pawn Killer, Pawn Other, name DamageType) { local int next, i; local bool bAutoTaunt; local Pawn P; local int kid, oid; if (Killer == none) { if (DamageType == 'Suicided' || (DamageType == 'Fell') || (DamageType == 'Burned') || (DamageType == 'Drowned') || (DamageType == '')) { super(CTFGame).Killed(Killer, Other, DamageType); return; } } if (Other.bIsPlayer && (Other.PlayerReplicationInfo.HasFlag != None) && (!Other.PlayerReplicationInfo.HasFlag.IsA('EUTReadyFlag'))) { if (Killer != None) { if (Killer.bIsPlayer && (Other.bIsPlayer) && (Killer.PlayerReplicationInfo.Team != Other.PlayerReplicationInfo.Team)) { kid = Killer.PlayerReplicationInfo.PlayerID; oid = Other.PlayerReplicationInfo.PlayerID; Killer.PlayerReplicationInfo.Score += FlagKill; MyCRI.IStats2[kid].FlagKills++; _EndStatsClass.Default.TotalFlagKills++; bAutoTaunt = ((TournamentPlayer(Killer) != None) && TournamentPlayer(Killer).bAutoTaunt); if (Other.PlayerReplicationInfo.Team == 0 && (RedFlag.bHome)) { if (FlagSpread(Other.Location, RedFlag.Location) < FlagDeniedDistance) { Killer.PlayerReplicationInfo.Score += DeniedBonus; Killer.ClientMessage("You Denied the Red Team!"); if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("flag_denied", kid, oid); MyCRI.IStats2[kid].FlagsDenied++; _EndStatsClass.Default.TotalDenied++; if (bEnhancedMessages) for ( P = Level.PawnList; P != None; P = P.NextPawn) if (CanPlaySound(P)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 9); BroadcastLocalizedMessage(class'EUTHudMessages',6,Killer.PlayerReplicationInfo,None,None); } } if (Other.PlayerReplicationInfo.Team == 1 && (BlueFlag.bHome )) { if (FlagSpread(Other.Location, BlueFlag.Location) < FlagDeniedDistance) { Killer.PlayerReplicationInfo.Score += DeniedBonus; Killer.ClientMessage("You Denied the Blue Team!"); if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("flag_denied", kid, oid); MyCRI.IStats2[kid].FlagsDenied++; _EndStatsClass.Default.TotalDenied++; if (bEnhancedMessages) for ( P = Level.PawnList; P != None; P = P.NextPawn) if (CanPlaySound(P)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 9); BroadcastLocalizedMessage(class'EUTHudMessages',6,Killer.PlayerReplicationInfo,None,None); } } } if (Bot(Killer) != None || (bAutoTaunt)) { next = Rand(class(Killer.PlayerReplicationInfo.VoiceType).Default.NumTaunts); for (i = 0; i < 4; i++) { if (next == LastTaunt[i]) next = Rand(class(Killer.PlayerReplicationInfo.VoiceType).Default.NumTaunts); if (i > 0) LastTaunt[i-1] = LastTaunt[i]; } LastTaunt[3] = next; Killer.SendGlobalMessage(None, 'AUTOTAUNT', next, 5); } } CTFFlag(Other.PlayerReplicationInfo.HasFlag).Drop(0.5 * Other.Velocity); } if (Killer != Other && (Killer != none)) { kid = Killer.PlayerReplicationInfo.PlayerID; oid = Other.PlayerReplicationInfo.PlayerID; if ((DamageType == 'FlakDeath') || (DamageType == 'shredded')) { FlakKills[kid]++; if (FlakKills[kid] == 30) { FlakKills[kid] = 0; if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("flak_monkey", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 15); BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A FlakMonkey!!!!",false); MyCRI.FlakMonkeyCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 101); } } if (DamageType == 'Decapitated') { kid = Killer.PlayerReplicationInfo.PlayerID; oid = Other.PlayerReplicationInfo.PlayerID; MyCRI.HeadShotsCount[kid]++; if (MyCRI.HeadShotsCount[kid] > 30) { if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("head_hunter", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 9 ); MyCRI.HeadShotsCount[kid] = 0; BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A HeadHunter!!!!",false); MyCRI.HeadHunterCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 102); } } } if (Killer != none && (Killer.Weapon != none) && (Killer.IsA('PlayerPawn')) && (!Killer.Weapon.IsA('SuperShockRifle')) && (_GetItemName(Killer.Weapon) != "ZP_SUPERSHOCKRIFLE")) { if (DamageType == 'Jolted') { if (Other.health < -50) { kid = Killer.PlayerReplicationInfo.PlayerID; oid = Other.PlayerReplicationInfo.PlayerID; ComboKills[kid]++; if (ComboKills[kid] == 30) { ComboKills[kid] = 0; if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("combo_whore", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 16); BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A ComboWhore!!!!",false); MyCRI.ComboWhoreCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 103); } } } } if (Other != none && (Killer != none)) ProcessExtendedSprees(Other.Spree); super(TeamGamePlus).Killed(Killer, Other, DamageType); } //------------------------------------- // ProcessExtendedSprees //------------------------------------- function ProcessExtendedSprees(int i) { switch(i) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: break; case 5: case 6: case 7: case 8: case 9: bExpandSpree = true; ExpandedSpreeSwitch = 6; break; case 10: case 11: case 12: case 13: case 14: bExpandSpree = true; ExpandedSpreeSwitch = 1; break; case 15: case 16: case 17: case 18: case 19: bExpandSpree = true; ExpandedSpreeSwitch = 2; break; case 20: case 21: case 22: case 23: case 24: bExpandSpree = true; ExpandedSpreeSwitch = 3; break; case 25: case 26: case 27: case 28: case 29: bExpandSpree = true; ExpandedSpreeSwitch = 4; break; case 30: break; } if (i > 29) { bExpandSpree = true; ExpandedSpreeSwitch = 5; } } //------------------------------------- // ScoreKill //------------------------------------- function ScoreKill(Pawn Killer, Pawn Other) { local string KillerZone, FlagZone; local int kid, oid; if ((Killer == Other) || (Killer == None)) Other.PlayerReplicationInfo.Score -= 1; if (Killer != none && (Other != none) && (Killer != Other)) { Killer.KillCount++; kid = Killer.PlayerReplicationInfo.PlayerID; oid = Other.PlayerReplicationInfo.PlayerID; MultiKills[oid].MultiLevel = 0; if (Level.TimeSeconds - MultiKills[kid].MultiTime < 3) { ProcessMultiKills(kid); if (MultiKills[kid].MultiLevel >= AnnouncerLevel && (bEnhancedSprees)) BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(MultiKills[kid].MultiLevel, Killer.PlayerReplicationInfo,None,None),false,'EUTEvent'); } if (Level.TimeSeconds - MultiKills[kid].MultiTime > 3) MultiKills[kid].MultiLevel = 0; MultiKills[kid].MultiTime = Level.TimeSeconds; if (Killer.bIsPlayer && (Other.bIsPlayer) && (Killer.PlayerReplicationInfo.Team != Other.PlayerReplicationInfo.Team)) { Killer.PlayerReplicationInfo.Score += 1; if (Killer.PlayerReplicationInfo.Team == 0 && (Killer.PlayerReplicationInfo.HasFlag == none )) { if (!BlueFlag.bHome && (BlueFlag.Holder != none)) { if ( Other.LineOfSightTo(BlueFlag.Holder) && ( FlagSpread(Killer.location, BlueFlag.Holder.Location) < FlagCoverVisibleDistance )) { MyCRI.IStats3[kid].FlagCovers++; MyCRI.CoversSpreeCount[kid]++; _EndStatsClass.Default.TotalCovers++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.logSpecialEvent("flag_cover", kid, oid); Killer.PlayerReplicationInfo.Score += CoversBonus; if (MyCRI.CoversSpreeCount[kid] == 3) BroadcastLocalizedMessage(class'EUTHudMessages',12,Killer.PlayerReplicationInfo,None,None); else if(MyCRI.CoversSpreeCount[kid] == 4) BroadcastLocalizedMessage(class'EUTHudMessages',11,Killer.PlayerReplicationInfo,None,None); else BroadcastLocalizedMessage(class'EUTHudMessages',10,Killer.PlayerReplicationInfo,None,None); } if (!Other.LineOfSightTo(BlueFlag.Holder) && (FlagSpread(Killer.location, BlueFlag.Holder.Location) < FlagCoverHiddenDistance)) { MyCRI.IStats3[kid].FlagCovers++; MyCRI.CoversSpreeCount[kid]++; _EndStatsClass.Default.TotalCovers++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.logSpecialEvent("flag_cover", kid, oid); Killer.PlayerReplicationInfo.Score += CoversBonus; if (MyCRI.CoversSpreeCount[kid] == 3) BroadcastLocalizedMessage(class'EUTHudMessages',12,Killer.PlayerReplicationInfo,None,None); else if (MyCRI.CoversSpreeCount[kid] == 4) BroadcastLocalizedMessage(class'EUTHudMessages',11,Killer.PlayerReplicationInfo,None,None); else BroadcastLocalizedMessage(class'EUTHudMessages',10,Killer.PlayerReplicationInfo,None,None); } if (Other.PlayerReplicationInfo.PlayerZone != none && (RedFlag.bHome)) { KillerZone = caps(Other.PlayerReplicationInfo.PlayerZone.ZoneName); FlagZone = caps(BlueFlag.Holder.PlayerReplicationInfo.PlayerZone.ZoneName); if (instr(KillerZone,"RED") != -1 && (instr(FlagZone,"RED") != -1)) { MyCRI.IStats1[kid].BaseSeals++; MyCRI.SealsSpreeCount[kid]++; _EndStatsClass.Default.TotalSeals++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.logSpecialEvent("flag_seal", kid, oid); Killer.PlayerReplicationInfo.Score += SealsBonus; if (MyCRI.SealsSpreeCount[kid] == 2) BroadcastLocalizedMessage(class'EUTHudMessages',13,Killer.PlayerReplicationInfo,None,None); } } } } if (Killer.PlayerReplicationInfo.Team == 1 && (Killer.PlayerReplicationInfo.HasFlag == none)) { if (!RedFlag.bHome && (RedFlag.Holder != none)) { if (Other.LineOfSightTo(RedFlag.Holder) && (FlagSpread(Killer.location, RedFlag.Holder.Location) < FlagCoverVisibleDistance)) { MyCRI.IStats3[kid].FlagCovers++; MyCRI.CoversSpreeCount[kid]++; _EndStatsClass.Default.TotalCovers++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.logSpecialEvent("flag_cover", kid, oid); Killer.PlayerReplicationInfo.Score += CoversBonus; if(MyCRI.CoversSpreeCount[kid] == 3) BroadcastLocalizedMessage(class'EUTHudMessages',12,Killer.PlayerReplicationInfo,None,None); else if(MyCRI.CoversSpreeCount[kid] == 4) BroadcastLocalizedMessage(class'EUTHudMessages',11,Killer.PlayerReplicationInfo,None,None); else BroadcastLocalizedMessage(class'EUTHudMessages',10,Killer.PlayerReplicationInfo,None,None); } if (!Other.LineOfSightTo(RedFlag.Holder) && (FlagSpread(Killer.location, RedFlag.Holder.Location) < FlagCoverHiddenDistance)) { MyCRI.IStats3[kid].FlagCovers++; MyCRI.CoversSpreeCount[kid]++; _EndStatsClass.Default.TotalCovers++; if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("flag_cover", kid, oid); Killer.PlayerReplicationInfo.Score += CoversBonus; if (MyCRI.CoversSpreeCount[kid] == 3) BroadcastLocalizedMessage(class'EUTHudMessages',12,Killer.PlayerReplicationInfo,None,None); else if(MyCRI.CoversSpreeCount[kid] == 4) BroadcastLocalizedMessage(class'EUTHudMessages',11,Killer.PlayerReplicationInfo,None,None); else BroadcastLocalizedMessage(class'EUTHudMessages',10,Killer.PlayerReplicationInfo,None,None); } if (Other.PlayerReplicationInfo.PlayerZone != none && (BlueFlag.bHome)) { KillerZone = caps(Other.PlayerReplicationInfo.PlayerZone.ZoneName); FlagZone = caps(RedFlag.Holder.PlayerReplicationInfo.PlayerZone.ZoneName); if (instr(KillerZone,"BLUE") != -1 && (instr(FlagZone,"BLUE") != -1)) { MyCRI.IStats1[kid].BaseSeals++; MyCRI.SealsSpreeCount[kid]++; _EndStatsClass.Default.TotalSeals++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.logSpecialEvent("flag_seal", kid, oid); Killer.PlayerReplicationInfo.Score += SealsBonus; if (MyCRI.SealsSpreeCount[kid] == 2) BroadcastLocalizedMessage(class'EUTHudMessages',13,Killer.PlayerReplicationInfo,None,None); } } } } } } if (Other != none && (Other.PlayerReplicationInfo != none) && (MyCRI.SealsSpreeCount[oid] != 0)) MyCRI.SealsSpreeCount[oid] = 0; if (Other != none && (Other.PlayerReplicationInfo != none) && (MyCRI.CoversSpreeCount[oid] != 0)) MyCRI.CoversSpreeCount[oid] = 0; if (bAltScoring && (Killer != Other) && (Killer != None) && (Other.bIsPlayer)) Other.PlayerReplicationInfo.Score -= 1; Other.DieCount++; BaseMutator.ScoreKill(Killer, Other); } //------------------------------------- // ProcessMultiKills //------------------------------------- function ProcessMultiKills(int pid) { MultiKills[pid].MultiLevel++; switch (MultiKills[pid].MultiLevel) { case 0: break; case 1: break; case 2: break; case 3: if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_meg"$chr(9)$pid); break; case 4: MyCRI.KillingSpree[pid].UltraKills++; break; case 5: MyCRI.KillingSpree[pid].MonsterKills++; break; case 6: MyCRI.KillingSpree[pid].LudicriousKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_lud"$chr(9)$pid); break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: MyCRI.KillingSpree[pid].HolyShitKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_hs"$chr(9)$pid); break; case 19: MyCRI.KillingSpree[pid].HolyShitKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_hs"$chr(9)$pid); MultiKills[pid].MultiLevel = 0; break; } } //------------------------------------- // NotifySpree //------------------------------------- function NotifySpree(Pawn Other, int i) { local Pawn P; local int oid; oid = Other.PlayerReplicationInfo.PlayerID; if (i != 5 && (i != 10) && (i != 15) && (i != 20) && (i != 25) && (i != 30)) return; switch (i) { case 5: i = 0; MyCRI.MultiKills1[oid].KillingSpree++; break; case 10: i = 1; MyCRI.MultiKills1[oid].Rampage++; break; case 15: i = 2; MyCRI.MultiKills1[oid].Dominating++; break; case 20: i = 3; MyCRI.MultiKills2[oid].UnStoppable++; break; case 25: i = 4; MyCRI.MultiKills2[oid].Godlike++; break; case 30: i = 5; MyCRI.MultiKills2[oid].Ownage++; Other.Spree = 0; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_wks"$chr(9)$oid); break; } for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('TournamentPlayer')) P.ReceiveLocalizedMessage( class'KillingSpreeMessage', i, Other.PlayerReplicationInfo ); if (CanPlaySound(P) && (i == 5) && (bEnhancedSprees)) { BroadcastLocalizedMessage(class'EUTHudMessages', i, Other.PlayerReplicationInfo, None, None); TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 104); } } } //------------------------------------- // FlagSpread //------------------------------------- function float FlagSpread(vector v, vector w) { local vector z; z = v - w; return Vsize(z); } //------------------------------------- // SetEndCams //------------------------------------- function bool SetEndCams(string Reason) { local TeamInfo BestTeam; local FlagBase BestBase; local CTFFlag BestFlag; local Pawn P; local int i; local PlayerPawn PP; for (i = 0; i < MaxTeams; i++) if ((BestTeam == None) || (BestTeam.Score < Teams[i].Score)) BestTeam = Teams[i]; for (i = 0; i < MaxTeams; i++) { if ((BestTeam.TeamIndex != i) && (BestTeam.Score == Teams[i].Score)) { BroadcastLocalizedMessage(DMMessageClass, 0); return false; } } foreach AllActors(class'CTFFlag', BestFlag) if (BestFlag.Team == BestTeam.TeamIndex) break; BestBase = BestFlag.HomeBase; GameReplicationInfo.GameEndedComments = TeamPrefix@BestTeam.TeamName@GameEndedMessage; EndTime = Level.TimeSeconds + 3.0; for (P = Level.PawnList; P != None; P = P.nextPawn) { CalculateRanking(P); P.GotoState('GameEnded'); PP = PlayerPawn(P); if (PP != None) { PP.bBehindView = true; PP.ViewTarget = BestBase; PP.ClientGameEnded(); if (!bTutorialGame && (!bEnhancedMessages)) PlayWinMessage(PP, (PP.PlayerReplicationInfo.Team == BestTeam.TeamIndex)); if (!bTutorialGame && (bEnhancedMessages)) { if (CanPlaySound(P)) { if (Teams[0].Score > Teams[1].Score && (Teams[1].Score != 0)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 11); else if (Teams[0].Score > Teams[1].Score && (Teams[1].Score == 0)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 13); else if (Teams[1].Score > Teams[0].Score && (Teams[0].Score != 0)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 12); else if (Teams[1].Score > Teams[0].Score && (Teams[0].Score == 0)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 13); } } } } BestBase.bHidden = false; BestFlag.bHidden = true; CalcEndStats(); return true; } //------------------------------------- // CalcEndStats //------------------------------------- function CalcEndStats() { local int i; local PlayerReplicationInfo PRI; local Pawn P; local int pid; Log("!!!!!!!!!!!!!!! CALC END STATS"); for (i = 0; i < 3; i++) { BestRanking[i] = _EndStatsClass.Default.BestRanking[i]; BestPlayers[i] = _EndStatsClass.Default.BestPlayers[i]; } for (i = 0; i < 32; i++) { if (GameReplicationInfo.PRIArray[i] != None) { PRI = GameReplicationInfo.PRIArray[i]; if (Caps(PRI.PlayerName) != "PLAYER") EmptyBestCTFSlot(MyCRI.CurrentRanking[PRI.PlayerID], PRI.PlayerName); } } for (i = 0; i < 3; i++) { _EndStatsClass.Default.BestPlayers[i] = BestPlayers[i]; _EndStatsClass.Default.BestRanking[i] = BestRanking[i]; } EndStatsClass.Default.TotalGames++; EndStatsClass.Static.StaticSaveConfig(); _EndStatsClass.Static.StaticSaveConfig(); for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('Bot') || P.IsA('PlayerPawn')) { if (P.PlayerReplicationInfo != none && (P.PlayerReplicationInfo.PlayerName != "Player")) { pid = P.PlayerReplicationInfo.PlayerID; if (Level.Game.LocalLog != none && (bStatLink)) { Level.Game.LocalLog.LogSpecialEvent("stat_player", "accuracy", pid, string(MyCRI.CurrentTotalAccuracy[pid])); //Weapon Specific Accuracy Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Enforcer",pid, string(MyCRI.PlayerAccuracy1[pid].Enforcer)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","GES Bio Rifle",pid, string(MyCRI.PlayerAccuracy1[pid].BioGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Shock Rifle",pid, string(MyCRI.PlayerAccuracy1[pid].ShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Ripper",pid, string(MyCRI.PlayerAccuracy2[pid].Ripper)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Pulse Gun",pid, string(MyCRI.PlayerAccuracy2[pid].PulseGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Minigun",pid, string(MyCRI.PlayerAccuracy2[pid].MiniGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Flak Cannon",pid, string(MyCRI.PlayerAccuracy3[pid].FlakCannon)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Rocket Launcher",pid, string(MyCRI.PlayerAccuracy3[pid].EightBall)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Sniper Rifle",pid, string(MyCRI.PlayerAccuracy3[pid].SniperRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Enhanced Shock Rifle",pid, string(MyCRI.PlayerAccuracy3[pid].InstaGib)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Custom Weapon",pid,string(MyCRI.PlayerAccuracy4[pid].CustomWeapon)); //Weapon Hit Count Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Enforcer",pid, string(MyCRI.EnforcerHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","GES Bio Rifle",pid, string(MyCRI.BioGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Shock Rifle",pid, string(MyCRI.ShockRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Ripper",pid, string(MyCRI.RipperHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Pulse Gun",pid, string(MyCRI.PulseGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Minigun",pid, string(MyCRI.MiniGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Flak Cannon",pid, string(MyCRI.FlakGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Rocket Launcher",pid, string(MyCRI.EightBallHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Sniper Rifle",pid, string(MyCRI.SniperRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Enhanced Shock Rifle",pid, string(MyCRI.SuperShockRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Custom Weapon",pid, string(MyCRI.CustomWeaponHitCount[pid])); //Weapon Damage Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Enforcer",pid, string(WeaponDamage[pid].Enforcer)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","GES Bio Rifle",pid, string(WeaponDamage[pid].BioGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Shock Rifle",pid, string(WeaponDamage[pid].ShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Ripper",pid, string(WeaponDamage[pid].Ripper)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Pulse Gun",pid, string(WeaponDamage[pid].PulseGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Minigun",pid, string(WeaponDamage[pid].MiniGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Flak Cannon",pid, string(WeaponDamage[pid].FlakGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Rocket Launcher",pid, string(WeaponDamage[pid].EightBall)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Sniper Rifle",pid, string(WeaponDamage[pid].SniperRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Enhanced Shock Rifle",pid, string(WeaponDamage[pid].SuperShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Custom Weapon",pid, string(WeaponDamage[pid].CustomWeapon)); //Weapon Shot Count Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Enforcer",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].Enforcer,MyCRI.EnforcerHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","GES Bio Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].BioGun,MyCRI.BioGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Shock Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].ShockRifle,MyCRI.ShockRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Ripper",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].Ripper,MyCRI.RipperHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Pulse Gun",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].PulseGun,MyCRI.PulseGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Minigun",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].MiniGun,MyCRI.MiniGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Flak Cannon",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].FlakCannon,MyCRI.FlakGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Rocket Launcher",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].EightBall,MyCRI.EightBallHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Sniper Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].SniperRifle,MyCRI.SniperRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Enhanced Shock Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].InstaGib,MyCRI.SuperShockRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Custom Weapon",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy4[pid].CustomWeapon,MyCRI.CustomWeaponHitCount[pid]))); } } } } } //------------------------------------- // CalculateShotCount //------------------------------------- function int CalculateShotCount(float a, int h) { local int i; a = a/100; i = h / a; return i; } //------------------------------------- // EmptyBestCTFSlot //------------------------------------ function EmptyBestCTFSlot(int Rank, string PlayerName) { if (Rank > BestRanking[2]) { BestRanking[0] = BestRanking[1]; BestPlayers[0] = BestPlayers[1]; BestRanking[1] = BestRanking[2]; BestPlayers[1] = BestPlayers[2]; BestRanking[2] = Rank; BestPlayers[2] = PlayerName; return; } else if (Rank > BestRanking[1]) { BestRanking[0] = BestRanking[1]; BestPlayers[0] = BestPlayers[1]; BestRanking[1] = Rank; BestPlayers[1] = PlayerName; return; } else if (Rank > BestRanking[0]) { BestRanking[0] = Rank; BestPlayers[0] = PlayerName; return; } } //------------------------------------- // ScoreFlag //------------------------------------- function ScoreFlag(Pawn Scorer, CTFFlag _Flag) { local Pawn P; local Actor A; local bool bUneven; if (Scorer.PlayerReplicationInfo.Team == _Flag.Team) { if (Level.Game.WorldLog != None) Level.Game.WorldLog.LogSpecialEvent("flag_returned", Scorer.PlayerReplicationInfo.PlayerID, Teams[_Flag.Team].TeamIndex); if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent("flag_returned", Scorer.PlayerReplicationInfo.PlayerID, Teams[_Flag.Team].TeamIndex); BroadcastLocalizedMessage( class'CTFMessage', 1, Scorer.PlayerReplicationInfo, None, _Flag ); for (P = Level.PawnList; P != None; P = P.NextPawn) { if (MyCRI.SealsSpreeCount[P.PlayerReplicationInfo.PlayerID] != 0) MyCRI.SealsSpreeCount[P.PlayerReplicationInfo.PlayerID] = 0; if (MyCRI.CoversSpreeCount[P.PlayerReplicationInfo.PlayerID] != 0) MyCRI.CoversSpreeCount[P.PlayerReplicationInfo.PlayerID] = 0; if (P.IsA('PlayerPawn')) PlayerPawn(P).ClientPlaySound(_ReturnSound); if (P.IsA('Bot')) Bot(P).SetOrders(BotReplicationInfo(P.PlayerReplicationInfo).RealOrders, BotReplicationInfo(P.PlayerReplicationInfo).RealOrderGiver, true); if (Scorer.PlayerReplicationInfo.Team == 0) { if (BlueFlag.bHome && (FlagSpread(RedFlag.Location, BlueFlag.Location) < FlagSaveDistance)) { if (Scorer == P) { Scorer.PlayerReplicationInfo.Score += SavesBonus; MyCRI.IStats2[Scorer.PlayerReplicationInfo.PlayerID].FlagSaves++; _EndStatsClass.Default.TotalSaves++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent("flag_saved", Scorer.PlayerReplicationInfo.PlayerID, Teams[_Flag.Team].TeamIndex); } if (Teams[1].Score == GoalTeamScore -1 || (bOverTime)) { if (CanPlaySound(P) && (bEnhancedMessages)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 10); MyCRI.IStats2[Scorer.PlayerReplicationInfo.PlayerId].GameSaves++; BroadcastLocalizedMessage( class'EUTHudMessages',8,Scorer.PlayerReplicationInfo,None,None); } if (Teams[1].Score != GoalTeamScore -1) { if (CanPlaySound(P) && (bEnhancedMessages)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 10); BroadcastLocalizedMessage( class'EUTHudMessages',7,Scorer.PlayerReplicationInfo,None,None); } } } else if (Scorer.PlayerReplicationInfo.Team == 1) { if (RedFlag.bHome && (FlagSpread(BlueFlag.Location, RedFlag.Location) < FlagSaveDistance)) { if (Scorer == P) { Scorer.PlayerReplicationInfo.Score += SavesBonus; MyCRI.IStats2[Scorer.PlayerReplicationInfo.PlayerID].FlagSaves++; _EndStatsClass.Default.TotalSaves++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent("flag_saved", Scorer.PlayerReplicationInfo.PlayerID, Teams[_Flag.Team].TeamIndex); } if (Teams[0].Score == GoalTeamScore -1 || (bOverTime)) { if (CanPlaySound(P) && (bEnhancedMessages)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 10); BroadcastLocalizedMessage( class'EUTHudMessages',8,Scorer.PlayerReplicationInfo,None,None); MyCRI.IStats2[Scorer.PlayerReplicationInfo.PlayerID].GameSaves++; } if (Teams[0].Score != GoalTeamScore -1) { if (CanPlaySound(P) && (bEnhancedMessages)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 10); BroadcastLocalizedMessage( class'EUTHudMessages',7,Scorer.PlayerReplicationInfo,None,None); } } } } return; } if (!bUneven) Teams[Scorer.PlayerReplicationInfo.Team].Score += 1.0; CalculateCaps(Scorer); if (bRatedGame && (Scorer.IsA('PlayerPawn'))) bFulfilledSpecial = true; if (Scorer == none || (Scorer.PlayerReplicationInfo == none)) return; for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('PlayerPawn') && (!bEnhancedMessages)) PlayerPawn(P).ClientPlaySound(_CaptureSound[Scorer.PlayerReplicationInfo.Team]); if (CanPlaySound(P) && (bEnhancedMessages) && (!bUneven)) { if (MyCRI.IStats1[Scorer.PlayerReplicationInfo.PlayerID].FlagCaps != 3 && (!bOverTime)) { switch(Scorer.PlayerReplicationInfo.Team) { case 0: if (Teams[0].Score <= Teams[1].Score) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 0); else if (Teams[0].Score - 1 == Teams[1].Score && (Teams[0].Score != GoalTeamScore)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 2); else if (Teams[0].Score -2 == Teams[1].Score && (Teams[0].Score != GoalTeamScore)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 4); else if (Teams[0].Score - 2 > Teams[1].Score && (Teams[0].Score != GoalTeamScore)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 6); break; case 1: if (Teams[1].Score <= Teams[0].Score) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 1); else if (Teams[1].Score -1 == Teams[0].Score && (Teams[1].Score != GoalTeamScore)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 3); else if (Teams[1].Score -2 == Teams[0].Score && (Teams[1].Score != GoalTeamScore)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 5); else if (Teams[1].Score -2 > Teams[0].Score && (Teams[1].Score != GoalTeamScore)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 7); break; } } if (MyCRI.IStats1[Scorer.PlayerReplicationInfo.PlayerID].FlagCaps == 3) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 8); } else if (P.IsA('Bot')) Bot(P).SetOrders(BotReplicationInfo(P.PlayerReplicationInfo).RealOrders, BotReplicationInfo(P.PlayerReplicationInfo).RealOrderGiver, true); } if (Level.Game.WorldLog != None) Level.Game.WorldLog.LogSpecialEvent("flag_captured", Scorer.PlayerReplicationInfo.PlayerID, Teams[_Flag.Team].TeamIndex); if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent("flag_captured", Scorer.PlayerReplicationInfo.PlayerID, Teams[_Flag.Team].TeamIndex); EndStatsClass.Default.TotalFlags++; BroadcastLocalizedMessage( class'CTFMessage', 0, Scorer.PlayerReplicationInfo, None, _Flag ); if (_Flag.HomeBase.Event != '') foreach allactors(class'Actor', A, _Flag.HomeBase.Event) A.Trigger(_Flag.HomeBase, Scorer); if ((bOverTime || ( GoalTeamScore != 0 )) && (Teams[Scorer.PlayerReplicationInfo.Team].Score >= GoalTeamScore)) EndGame("teamscorelimit"); else if (bOverTime) EndGame("timelimit"); } //------------------------------------- // RestartPlayer //------------------------------------- function bool RestartPlayer(Pawn Restart) { local NavigationPoint NP; local float tw, sel, pw; local bool rv, bPP; local Bot _Bot; local Pawn P; rv = super(TeamGamePlus).RestartPlayer(Restart); _Bot = Bot(Restart); if (_Bot == None) return rv; _Bot.AlternatePath = None; if (_Bot.bPowerPlay || (BotReplicationInfo(_Bot.PlayerReplicationInfo).RealOrders == 'Defend')) { if (FRand() < 0.5) { _Bot.bPowerPlay = false; _Bot.SetOrders('Defend', None, true); } else { for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.bIsPlayer && (P.PlayerReplicationInfo.Team == _Bot.PlayerReplicationInfo.Team) ) { if (P.IsA('PlayerPawn')) { bPP = false; break; } else if ((P != _Bot) && P.IsA('Bot') && (Bot(P).Orders == 'Defend')) bPP = true; } } if (bPP) { _Bot.bPowerPlay = true; _Bot.SetOrders('Attack', None, true); } } } if (BotReplicationInfo(_Bot.PlayerReplicationInfo).RealOrders != 'Attack') return rv; if (FRand() < 0.8) { for (NP = Level.NavigationPointList; NP != None; NP = NP.nextNavigationPoint) { if (NP.IsA('AlternatePath') && (AlternatePath(NP).team != _Bot.PlayerReplicationInfo.team) && !AlternatePath(NP).bReturnOnly) tw += AlternatePath(NP).selectionWeight; } sel = FRand() * tw; for (NP = Level.NavigationPointList; NP != None; NP = NP.nextNavigationPoint) { if (NP.IsA('AlternatePath') && (AlternatePath(NP).team != _Bot.PlayerReplicationInfo.team) ) { _Bot.AlternatePath = AlternatePath(NP); pw += AlternatePath(NP).SelectionWeight; if (pw > sel) break; } } } Restart.ViewRotation.Pitch = 55554; return rv; } //------------------------------------- // ReduceDamage //------------------------------------- function int ReduceDamage(int DamageAmmount, name DamageType, Pawn Injured, Pawn Instigator) { if (Injured != none && (!Injured.bIsPlayer)) return Super(TeamGamePlus).ReduceDamage(DamageAmmount, DamageType, Injured, Instigator); if ((Instigator != None) && (Injured.PlayerReplicationInfo.Team != Instigator.PlayerReplicationInfo.Team) && Injured.IsA('Bot') && ((Injured.health < 35) || (Injured.PlayerReplicationInfo.HasFlag != None))) Bot(Injured).SendTeamMessage(None, 'Other', 4, 15); if (Instigator != None && Injured != None) { If (Injured.PlayerReplicationInfo != None && Instigator.PlayerReplicationInfo != None) { if (Injured.PlayerReplicationInfo.Team != Instigator.PlayerReplicationInfo.Team) { MyCRI.TotalDamageAmmount[Instigator.PlayerReplicationInfo.PlayerID]++; if (Instigator.Weapon != none) CalculateDamage(Instigator, Injured, DamageType, DamageAmmount); if (MyCRI.ClientHitSound[Instigator.PlayerReplicationInfo.PlayerID] == 1 && (bHitSounds)) TournamentPlayer(PlayerPawn(Instigator)).ReceiveLocalizedMessage( class'EUTHitSoundMessage', 0); return Super(TeamGamePlus).ReduceDamage(DamageAmmount, DamageType, Injured, Instigator); } if (Injured.PlayerReplicationInfo.Team == Instigator.PlayerReplicationInfo.Team && (MyCRI.ClientHitSound[Instigator.PlayerReplicationInfo.PlayerID] == 1) && (Instigator != Injured) && (bHitSounds)) TournamentPlayer(PlayerPawn(Instigator)).ReceiveLocalizedMessage( class'EUTHitSoundMessage', 1); } } return Super(TeamGamePlus).ReduceDamage(DamageAmmount, DamageType, Injured, Instigator); } //------------------------------------- // Timer //------------------------------------- function Timer() { local Pawn P; local string IP, S; local int pid; local Inventory Inv; if (NumSpectators < MaxSpectators) MyCRI.bCanSpectate = true; else MyCRI.bCanSpectate = false; for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.PlayerReplicationInfo != none) { pid = P.PlayerReplicationInfo.PlayerID; if (P.PlayerReplicationInfo.Team == 0 && (MyCRI.Teams[0].Size == 0)) AddToTeam(0,P); if (P.PlayerReplicationInfo.Team == 1 && (MyCRI.Teams[1].Size == 0)) AddToTeam(1,P); } if (P.IsA('Bot') || P.IsA('PlayerPawn')) { if (P.PlayerReplicationInfo != none && (P.PlayerReplicationInfo.PlayerName != "Player")) { MyCRI.ClientPing[pid] = P.PlayerReplicationInfo.Ping; if (P.PlayerReplicationInfo.HasFlag != none && (!P.PlayerReplicationInfo.HasFlag.IsA('EUTReadyFlag')) && (NumFlagGrabs[pid] == 0)) { MyCRI.IStats1[pid].FlagGrabs++; NumFlagGrabs[pid] = 1; FlagGrabs[pid] = P; FlagAssists[pid] = P; _EndStatsClass.Default.TotalGrabs++; } switch(P.PlayerReplicationInfo.Team) { case RedFlag.Team: if (!BlueFlag.bHeld) { if (FlagGrabs[pid] == P) { NumFlagGrabs[pid] = 0; FlagGrabs[pid] = none; } } if (BlueFlag.bHome) { if (FlagAssists[pid] != none) FlagAssists[pid] = none; } break; case BlueFlag.Team: if (!RedFlag.bHeld) { if (FlagGrabs[pid] == P) { NumFlagGrabs[pid] = 0; FlagGrabs[pid] = none; } } if (RedFlag.bHome) { if (FlagAssists[pid] != none) FlagAssists[pid] = none; } break; } MyCRI.TotalKills[pid] = P.KillCount; MyCRI.TotalDeaths[pid] = P.DieCount; if (!P.IsA('Bot')) { if (MyCRI.StoredPlayerIP[pid] == "") { IP = PlayerPawn(P).GetPlayerNetworkAddress(); IP = Left(IP,InStr(IP,":")); MyCRI.StoredPlayerIP[pid] = IP; } if (MyCRI.StoredPlayerIP[pid] != "" && (bIpToCountry) && (IpToCountry != none) && (MyCRI.ClientIdentified[pid] < MaxTries)) { S = IpToCountry.GetItemName(MyCRI.StoredPlayerIP[pid]); if(caps(S) == "!DISABLED") { MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = MaxTries; } else if(Left(S, 1) != "!") { MyCRI.IPCTexture[pid] = SelElem(S, 5); if (MyCRI.IPCTexture[pid] == "") { MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = MaxTries; } else MyCRI.ClientIdentified[pid] = MaxTries; } MyCRI.ClientIdentified[pid]++; } } CalculateRanking(P); if (P.Health >= 0) MyCRI.HealthAmmount[pid] = P.Health; else MyCRI.HealthAmmount[pid] = 0; MyCRI.ArmorAmmount[pid] = 0; for (Inv = P.Inventory; Inv != None; Inv = Inv.Inventory) if (Inv.bIsAnArmor) MyCRI.ArmorAmmount[pid] += Inv.Charge; } } } if (RemainingTime <= 0 && (!bAltOvertime) && (bNoOverTime)) AltEndGame("timelimit"); if (bNoDroppedFlags) { if (FlagToReturn != none && (FlagToReturn.IsInState('Dropped')) && (FlagDropper != none) && (FlagDropper.PlayerReplicationInfo != none) && (FlagDropper.PlayerReplicationInfo.bFeigningDeath)) { FlagToReturn.SendHome(); FlagToReturn = none; } } super(DeathMatchPlus).Timer(); } //------------------------------------- // SelElem //------------------------------------- static final function string SelElem(string s, int e) { local int i; while (e-->1) s = Mid(s, InStr(s,":") + 1); i = InStr(s, ":"); if (i != -1) s = Left(s, i); return s; } //------------------------------------- // CalculateCaps //------------------------------------- function CalculateCaps(Pawn Scorer) { local Pawn P; local int pid; Scorer.PlayerReplicationInfo.Score += FlagCap; MyCRI.IStats1[Scorer.PlayerReplicationInfo.PlayerID].FlagCaps++; NumFlagGrabs[Scorer.PlayerReplicationInfo.PlayerID] = 0; FlagGrabs[Scorer.PlayerReplicationInfo.PlayerID] = none; FlagAssists[Scorer.PlayerReplicationInfo.PlayerID] = none; for (P = Level.PawnList; P != None; P = P.NextPawn) { pid = P.PlayerReplicationInfo.PlayerID; if (P.IsA('Bot') || P.IsA('PlayerPawn')) { if (P.PlayerReplicationInfo != none && (P.PlayerReplicationInfo.PlayerName != "Player")) { if (P.PlayerReplicationInfo.Team == Scorer.PlayerReplicationInfo.Team) { if (P != Scorer) { if (FlagAssists[pid] != none) { MyCRI.IStats1[pid].FlagAssists++; if (Level.Game.LocalLog != None) level.game.LocalLog.LogSpecialEvent("flag_assist", MyCRI.IStats1[pid].FlagAssists); _EndStatsClass.Default.TotalAssists++; FlagAssists[pid] = none; P.PlayerReplicationInfo.Score += AssistsBonus; P.clientmessage("You get " $ AssistsBonus $ " bonus pts for the assist!"); } if (MyCRI.SealsSpreeCount[pid] != 0) { P.clientmessage("You killed " $ MyCRI.SealsSpreeCount[pid] $ " people sealing off the base. You get " $ MyCRI.SealsSpreeCount[pid]*SealsBonus $ " bonus pts!"); MyCRI.SealsSpreeCount[pid] = 0; } if (MyCRI.CoversSpreeCount[pid] != 0) { P.clientmessage("You killed " $ MyCRI.CoversSpreeCount[pid] $ " people covering your FC. You get " $ MyCRI.CoversSpreeCount[pid]*CoversBonus $ " bonus pts!"); MyCRI.CoversSpreeCount[pid] = 0; } } } } } } } //------------------------------------- // CalculateRanking //------------------------------------- function CalculateRanking(Pawn P) { local int pid; if (P.PlayerReplicationInfo == none ||(P.PlayerReplicationInfo.PlayerName == "Player")) return; pid = P.PlayerReplicationInfo.PlayerID; MyCRI.CurrentRanking[pid] = 1000 + (Clamp(int((float(MyCRI.TotalKills[pid]) / float(MyCRI.TotalKills[pid] + MyCRI.TotalDeaths[pid])) * 100), 0, 100) * 10) + (MyCRI.CurrentTotalAccuracy[pid] * 10) + (MyCRI.IStats1[pid].FlagCaps * 500) + (MyCRI.IStats1[pid].FlagAssists * 300) + (MyCRI.IStats3[pid].FlagCovers * 400) + (MyCRI.IStats1[pid].FlagGrabs * 500) + (MyCRI.IStats2[pid].FlagSaves * 800) + (MyCRI.IStats2[pid].FlagsDenied * 500) + (MyCRI.IStats1[pid].BaseSeals * 400) + (MyCRI.IStats2[pid].FlagKills * 200) + (MyCRI.IStats2[pid].GameSaves * 1000); CalculateAccuracy(P); } //------------------------------------- // CalculateAccuracy //------------------------------------- function CalculateAccuracy(Pawn P) { local int pid; local int f, t; if (P.PlayerReplicationInfo == none ||(P.PlayerReplicationInfo.PlayerName == "Player")) return; pid = P.PlayerReplicationInfo.PlayerID; f = 0; t = MyCRI.PlayerAccuracy1[pid].Enforcer + MyCRI.PlayerAccuracy1[pid].BioGun + MyCRI.PlayerAccuracy1[pid].ShockRifle + MyCRI.PlayerAccuracy2[pid].MiniGun + MyCRI.PlayerAccuracy2[pid].PulseGun + MyCRI.PlayerAccuracy2[pid].Ripper + MyCRI.PlayerAccuracy3[pid].EightBall + MyCRI.PlayerAccuracy3[pid].FlakCannon + MyCRI.PlayerAccuracy3[pid].SniperRifle + MyCRI.PlayerAccuracy3[pid].InstaGib + MyCRI.PlayerAccuracy4[pid].CustomWeapon; if (MyCRI.PlayerAccuracy1[pid].Enforcer != 0) f++; if (MyCRI.PlayerAccuracy1[pid].BioGun != 0) f++; if (MyCRI.PlayerAccuracy1[pid].ShockRifle != 0) f++; if (MyCRI.PlayerAccuracy2[pid].MiniGun != 0) f++; if (MyCRI.PlayerAccuracy2[pid].PulseGun != 0) f++; if (MyCRI.PlayerAccuracy2[pid].Ripper != 0) f++; if (MyCRI.PlayerAccuracy3[pid].EightBall != 0) f++; if (MyCRI.PlayerAccuracy3[pid].FlakCannon != 0) f++; if (MyCRI.PlayerAccuracy3[pid].SniperRifle != 0) f++; if (MyCRI.PlayerAccuracy3[pid].InstaGib != 0) f++; if (MyCRI.PlayerAccuracy4[pid].CustomWeapon != 0) f++; MyCRI.CurrentTotalAccuracy[pid] = t/f; } //------------------------------------- // GetRules //------------------------------------- function string GetRules() { local string ResultSet; ResultSet = super(TeamGamePlus).GetRules(); ResultSet = ResultSet$"\\FlagCap\\"$FlagCap; ResultSet = ResultSet$"\\AssistsBonus\\"$AssistsBonus; ResultSet = ResultSet$"\\FlagKill\\"$FlagKill; ResultSet = ResultSet$"\\CoversBonus\\"$CoversBonus; ResultSet = ResultSet$"\\SealsBonus\\"$SealsBonus; ResultSet = ResultSet$"\\DeniedBonus\\"$DeniedBonus; ResultSet = ResultSet$"\\SavesBonus\\"$SavesBonus; ResultSet = ResultSet$"\\bEnhancedSprees\\"$bEnhancedSprees; ResultSet = ResultSet$"\\bEnhancedMessages\\"$bEnhancedMessages; ResultSet = ResultSet$"\\bShowIPS\\"$bShowIPS; ResultSet = ResultSet$"\\bLogMods\\"$bLogMods; ResultSet = ResultSet$"\\bCheckDefaults\\"$bCheckDefaults; ResultSet = ResultSet$"\\HitSoundSounds\\"$bHitSounds; ResultSet = ResultSet$"\\DemoRequest\\"$bDemoRequest; ResultSet = ResultSet$"\\AnnouncerLevel\\"$AnnouncerLevel; ResultSet = ResultSet$"\\RedTeamName\\"$RedTeamName; ResultSet = ResultSet$"\\BlueTeamName\\"$BlueTeamName; //Log("GetRules: "$ResultSet,'Rules'); return ResultSet; } //------------------------------------- // LogGameParameters //------------------------------------- function LogGameParameters(StatLog _StatLog) { local bool bTemp; if ( _StatLog == None ) { GameName = "Smart Capture the Flag"; return; } GameName = "Capture the Flag"; bTemp = bCoopWeaponMode; if ( Level.Netmode != NM_Standalone ) bCoopWeaponMode = bMultiWeaponStay; super(TeamGamePlus).LogGameParameters(_StatLog); bCoopWeaponMode = bTemp; _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"FlagCap"$Chr(9)$FlagCap); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"AssistsBonus"$Chr(9)$AssistsBonus); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"FlagKill"$Chr(9)$FlagKill); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"CoversBonus"$Chr(9)$CoversBonus); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"SealsBonus"$Chr(9)$SealsBonus); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"DeniedBonus"$Chr(9)$DeniedBonus); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"SavesBonus"$Chr(9)$SavesBonus); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bEnhancedSprees"$Chr(9)$bEnhancedSprees); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bEnhancedMessages"$Chr(9)$bEnhancedMessages); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bHitSounds"$Chr(9)$bHitSounds); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bDemoRequest"$Chr(9)$bDemoRequest); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"BlueTeamName"$Chr(9)$BlueTeamName); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"RedTeamName"$Chr(9)$RedTeamName); GameName = "Smart Capture the Flag"; } //------------------------------------- // PickupQuery //------------------------------------- function bool PickupQuery(Pawn Other, Inventory Inv) { local byte x; local int st, at, rt, it, kt, mt, bt, i; local string s; s = caps(mid(string(Inv.Class), instr(string(Inv.Class), ".") + 1)); if (!bAntiTimer) { if (bCheckDefaults) { switch (s) { case "UT_SHIELDBELT": Inv.DrawScale = 1.0; break; case "UDAMAGE": Inv.DrawScale = 1.0; break; case "WARHEADLAUNCHER": Inv.DrawScale = 1.0; break; case "UT_INVISIBILITY": Inv.DrawScale = 1.0; break; case "HEALTHPACK": Inv.DrawScale = 1.0; break; case "ARMOR2": Inv.DrawScale = 1.0; break; case "UT_JUMPBOOTS": Inv.DrawScale = 1.0; break; } } if (BaseMutator.HandlePickupQuery(Other, Inv, x)) return ( x == 1 ); if ( Other.Inventory == none ) return true; else return !Other.Inventory.HandlePickupQuery(Inv); } st = rand(30) + 55; at = rand(40) + 100; rt = st; it = at; kt = rand(40) + 100; mt = rand(20) + 20; bt = mt; switch (s) { case "UT_SHIELDBELT": Inv.ReSpawnTime = st; Inv.DrawScale = 1.0; break; case "UDAMAGE": Inv.ReSpawnTime = at; Inv.DrawScale = 1.0; break; case "WARHEADLAUNCHER": for (i = 0; i < WarheadCount; i++) { if (Inv.location == WarheadLocation[i]) { Inv.ReSpawnTime = rt; Inv.DrawScale = 1.0; break; } } break; case "UT_INVISIBILITY": Inv.ReSpawnTime = it; Inv.DrawScale = 1.0; break; case "HEALTHPACK": Inv.ReSpawnTime = kt; Inv.DrawScale = 1.0; break; case "ARMOR2": Inv.ReSpawnTime = mt; Inv.DrawScale = 1.0; break; case "UT_JUMPBOOTS": Inv.ReSpawnTime = bt; Inv.DrawScale = 1.0; break; } if (BaseMutator.HandlePickupQuery(Other, Inv, x)) return (x == 1); if (Other.Inventory == none) return true; else return !Other.Inventory.HandlePickupQuery(Inv); } //------------------------------------- // CalculateDamage //------------------------------------- function CalculateDamage(Pawn Killer, Pawn Victim, name DamageType, int DamageAmmount) { local int kid, vid; local byte i; local int health; local string s; if (Killer == none || (Victim == none) || (bGameEnded)) return; if (Killer.PlayerReplicationInfo == none || (Victim.PlayerReplicationInfo == none) || (Killer.Weapon == none)) return; kid = Killer.PlayerReplicationInfo.PlayerID; vid = Victim.PlayerReplicationInfo.PlayerID; i = 0; health = Victim.Health + MyCRI.ArmorAmmount[vid]; s = _GetItemName(Killer.Weapon); switch (s) { case "ENFORCER": case "DOUBLEENFORCER": case "ZP_ENFORCER": MyCRI.EnforcerHitCount[kid]++; WeaponDamage[kid].Enforcer = WeaponDamage[kid].Enforcer + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Shot') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Enf', i); return; } } break; case "UT_BIORIFLE": MyCRI.BioGunHitCount[kid]++; WeaponDamage[kid].BioGun = WeaponDamage[kid].BioGun + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Corroded') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Bio', i); return; } } break; case "SHOCKRIFLE": MyCRI.ShockRifleHitCount[kid]++; WeaponDamage[kid].ShockRifle = WeaponDamage[kid].ShockRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Jolted') { if (health - DamageAmmount < -100) { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Combo', i); return; } } } break; case "SUPERSHOCKRIFLE": case "ZP_SHOCKRIFLE": case "ZP_SUPERSHOCKRIFLE": MyCRI.SuperShockRifleHitCount[kid]++; WeaponDamage[kid].SuperShockRifle = WeaponDamage[kid].SuperShockRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'SuperShock', i); return; } break; case "PULSEGUN": MyCRI.PulseGunHitCount[kid]++; WeaponDamage[kid].PulseGun = WeaponDamage[kid].PulseGun + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'Pulsed': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Pulse', i); return; } break; case 'zapped': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Pulse', i); return; } break; } break; case "RIPPER": MyCRI.RipperHitCount[kid]++; WeaponDamage[kid].Ripper = WeaponDamage[kid].Ripper + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'RipperAltDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; case 'shredded': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; } break; case "MINIGUN2": MyCRI.MiniGunHitCount[kid]++; WeaponDamage[kid].MiniGun = WeaponDamage[kid].MiniGun + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'shot') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Mini', i); return; } } break; case "UT_FLAKCANNON": if (Level.TimeSeconds - SplashKills[kid].FlakTime > 1) { MyCRI.FlakGunHitCount[kid]++; WeaponDamage[kid].FlakGun = WeaponDamage[kid].FlakGun + DamageAmmount; SplashKills[kid].FlakTime = Level.TimeSeconds; SplashKills[kid].LastHit = Victim; } else if (SplashKills[kid].LastHit != Victim && Level.TimeSeconds - SplashKills[kid].FlakTime < 1) { MyCRI.FlakGunHitCount[kid]++; WeaponDamage[kid].FlakGun = WeaponDamage[kid].FlakGun + DamageAmmount; SplashKills[kid].FlakTime = Level.TimeSeconds; SplashKills[kid].LastHit = Victim; } if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shredded': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Flak', i); return; } break; case 'FlakDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Flak', i); return; } break; } break; case "UT_EIGHTBALL": MyCRI.EightBallHitCount[kid]++; WeaponDamage[kid].EightBall = WeaponDamage[kid].EightBall + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'GrenadeDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Rockets', i); return; } break; case 'RocketDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Rockets', i); return; } break; } break; case "SNIPERRIFLE": case "ZP_SNIPERRIFLE": MyCRI.SniperRifleHitCount[kid]++; WeaponDamage[kid].SniperRifle = WeaponDamage[kid].SniperRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shot': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; } break; case "IMPACTHAMMER": if (!bEnhancedDeathMessages) return; if (DamageType == 'Impact') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Impact', i); return; } } break; case "TRANSLOCATOR": if (!bEnhancedDeathMessages) return; if (DamageType == 'Gibbed') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Trans', i); return; } } break; case CustomWeaponName: if (bUsesCustomWeapon) { MyCRI.CustomWeaponHitCount[kid]++; WeaponDamage[kid].CustomWeapon = WeaponDamage[kid].CustomWeapon + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shot': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; } } break; } } //------------------------------------- // DamageKills //------------------------------------- function bool DamageKills(int x, int i) { if (x <= i) return true; else return false; } //------------------------------------- // CheckZ //------------------------------------- function bool CheckZ(Pawn P) { local vector X; X.X = P.Location.X; X.Y = P.Location.Y; X.Z = P.Location.Z + (-150 * LowGravityAerialKillAdjuster); if ( FastTrace(X,P.Location) ) return true; else return false; } //------------------------------------- // ParseNotification //------------------------------------- function ParseNotification(Pawn Killer, Pawn Victim, name DamageInstigator, byte i) { if (Killer == none || (Victim == none) || (i == 0)) return; if (Killer.IsA('Bot')) return; if (i == 1) { if (DamageInstigator == 'bio' || (DamageInstigator == 'Ripper') || (DamageInstigator == 'Flak') || (DamageInstigator == 'Rockets') || (DamageInstigator == 'Sniper') || (DamageInstigator == 'SuperShock') || (DamageInstigator == 'Trans') || (DamageInstigator == 'Combo') || (DamageInstigator == 'Enf') || (DamageInstigator == 'Pulse') || (DamageInstigator == 'Mini') || (DamageInstigator == 'Piston') || (DamageInstigator == 'Impact')) { if(CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage(class'EUTMultiKillMessage', 20); AKMS[Killer.PlayerReplicationInfo.PlayerID] = 1; BroadcastRegularDeathMessage(Killer, Victim, DamageInstigator); return; } } } //------------------------------------- // BroadcastRegularDeathMessage //------------------------------------- function BroadcastRegularDeathMessage(Pawn Killer, Pawn Other, name DamageType) { local int i; local string s; local bool b; if (Killer == none || (Other == none)) return; if (Killer.PlayerReplicationInfo == none || (Other.PlayerReplicationInfo == none) || (Killer.Weapon == none)) return; if (bEnhancedDeathMessages) { if (EUTDamageType(DamageType)) { switch (DamageType) { case 'bio': i = 51; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Ripper': i = 52; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Flak': i = 53; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Rockets': i = 54; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Sniper': i = 55; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'SuperShock': i = 56; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Trans': i = 57; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Combo': i = 58; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Enf': i = 59; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Pulse': i = 60; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Mini': i = 71; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Impact': i = 73; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; } } if (!EUTDamageType(DamageType)) { if (AKMS[Killer.PlayerReplicationInfo.PlayerID] == 1) { AKMS[Killer.PlayerReplicationInfo.PlayerID] = 0; return; } switch (_GetItemName(Killer.Weapon)) { case "ENFORCER": case "DOUBLEENFORCER": case "ZP_ENFORCER": i = 11; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_BIORIFLE": i = 12; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "SHOCKRIFLE": case "SUPERSHOCKRIFLE": case "ZP_SHOCKRIFLE": case "ZP_SUPERSHOCKRIFLE": i = 13; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "PULSEGUN": i = 14; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "RIPPER": i = 15; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "MINIGUN2": i = 16; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_FLAKCANNON": i = 17; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_EIGHTBALL": i = 18; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "SNIPERRIFLE": case "ZP_SNIPERRIFLE": i = 19; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "IMPACTHAMMER": i = 75; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "TRANSLOCATOR": i = 77; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; } } } if (!bEnhancedDeathMessages && (!b)) BroadcastLocalizedMessage(DeathMessageClass, 30, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); } //------------------------------------- // EUTDamageType //------------------------------------- function bool EUTDamageType(name DamageType) { if (DamageType == 'bio' || (DamageType == 'Ripper' ) || (DamageType == 'Flak' ) || (DamageType == 'Rockets' ) || (DamageType == 'Sniper' ) || (DamageType == 'SuperShock' ) || (DamageType == 'Trans' ) || (DamageType == 'Combo' ) || (DamageType == 'Enf' ) || (DamageType == 'Pulse' ) || (DamageType == 'Mini' ) || (DamageType == 'Impact' )) return true; else return false; } //------------------------------------- // EndSpree //------------------------------------- function EndSpree(Pawn Killer, Pawn Other) { local Pawn P; if (Other != none) if (!Other.bIsPlayer) return; for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('TournamentPlayer')) { if (!bExpandSpree) { if ((Killer == None) || !Killer.bIsPlayer) { TournamentPlayer(P).EndSpree(None, Other.PlayerReplicationInfo); return; } else { TournamentPlayer(P).EndSpree(Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo); return; } } if (bExpandSpree) { if ((Killer == None) || !Killer.bIsPlayer) { TournamentPlayer(P).EndSpree(None, Other.PlayerReplicationInfo); return; } else { TournamentPlayer(P).EndSpree(Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo); switch (ExpandedSpreeSwitch) { case 1: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(21, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 2: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(22, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 3: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(23, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 4: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(24, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 5: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(25, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 6: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(26, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; default: break; } } } } } } //------------------------------------- // AltEndGame //------------------------------------- function AltEndGame(string Reason) { local Actor A; AltSetEndCams(Reason); bGameEnded = true; bAltOvertime = true; foreach AllActors(class'Actor', A, 'EndGame') A.trigger(self, none); if (LocalLog != None) { LocalLog.LogGameEnd(Reason); LocalLog.StopLog(); if (bBatchLocal) LocalLog.ExecuteSilentLogBatcher(); LocalLog.Destroy(); LocalLog = None; } if (WorldLog != None) { WorldLog.LogGameEnd(Reason); WorldLog.StopLog(); WorldLog.ExecuteWorldLogBatcher(); WorldLog.Destroy(); WorldLog = None; } } //------------------------------------- // AltSetEndCams //------------------------------------- function bool AltSetEndCams(string Reason) { local TeamInfo BestTeam; local FlagBase BestBase; local CTFFlag BestFlag; local Pawn P; local int i; local PlayerPawn PP; local string EndGameNotify; for (i = 0; i < MaxTeams; i++) { if ((BestTeam == None) || ( BestTeam.Score < Teams[i].Score)) { BestTeam = Teams[i]; EndGameNotify = TeamPrefix@BestTeam.TeamName@GameEndedMessage; } } if (BestTeam == none) { EndGameNotify = "Match Ended for Time Limit!"; i = Rand(2); BestTeam = Teams[i]; } ForEach AllActors(class'CTFFlag', BestFlag) if ( BestFlag.Team == BestTeam.TeamIndex ) break; BestBase = BestFlag.HomeBase; GameReplicationInfo.GameEndedComments = EndGameNotify; EndTime = Level.TimeSeconds + 3.0; for (P = Level.PawnList; P != None; P = P.nextPawn) { CalculateRanking(P); P.GotoState('GameEnded'); PP = PlayerPawn(P); if (PP != None) { PP.bBehindView = true; PP.ViewTarget = BestBase; PP.ClientGameEnded(); if (!bTutorialGame && (!bEnhancedMessages)) PlayWinMessage(PP, (PP.PlayerReplicationInfo.Team == BestTeam.TeamIndex)); if (!bTutorialGame && (bEnhancedMessages)) { if (CanPlaySound(P)) { if (Teams[0].Score > Teams[1].Score && (Teams[1].Score != 0)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 11); if (Teams[0].Score > Teams[1].Score && (Teams[1].Score == 0)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 13); if (Teams[1].Score > Teams[0].Score && (Teams[0].Score != 0)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 12); if (Teams[1].Score > Teams[0].Score && (Teams[0].Score == 0)) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 13); } } } } BestBase.bHidden = false; BestFlag.bHidden = true; CalcEndStats(); return true; } //------------------------------------- // CanPlaySound //------------------------------------- function bool CanPlaySound( Pawn P ) { if (P.IsA('PlayerPawn') && (P.IsA('TournamentPlayer'))) return true; else return false; } //------------------------------------- // _GetItemName //------------------------------------- function string _GetItemName(Weapon W) { return caps(mid(string(W.Class), instr(string(W.Class), ".") + 1)); } //------------------------------------- // defaultproperties //------------------------------------- p=h"vju $:u :h"&eu i=:u &:i:h":iB:eBei:iB:eB-:iB:eBei:iB:eB-:iB:eB.?:iB:eBeii7l":eB:eB:u B:u Bl"u  q=?@z]?-'?h?y??L?h aD???hq??aTestp] 6?=,6?$6?$dl.?,??,] ?9::$a/!t+.-?gapp.lcNN'6.-?iapp: lcNN'6?mapp:, lcNN'6?=,6?$6?$d?,??,] ??2aѨlc'6?=,6?$6?$d?%??,] ?*appl - M'? ?] -b l%-b '$l%?aѨC!00:00'd =l,<a C?l?,<?*appC!):d :):a 'Xa =ld =:a ,<s=:d ,<a =:a :d ,<d =:d :s,<?=appppQ1):s:):d :):a 'G{l?-'?aTestp] ????D] ?,D?=?p2::$?aѨA!R1'D? aA!'wl*l%?-'?aTestp] ????D] ?,D?=?} ? aS1'?-(??6?$x6?$x6?$x?,??,P??,?aѨAutoSS:T_-t }=sT@Z]..+r]* s6s=,6s$6s$dsa]saTest\"ZsZO/sZ]%sZ6s=,6s$6s$ds9aѨppS] Points or S]MinsaTest\"Zs sZ Y /* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTWindow <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTWindow extends UWindowFramedWindow; //------------------------------------- // Created //------------------------------------- function Created() { Super.Created(); bLeaveOnscreen = True; SetWindow(); } //------------------------------------- // SetWindow //------------------------------------- function SetWindow() { SetSize(FMin(Root.WinWidth-20, 400), 400); WinLeft = Int((Root.WinWidth - WinWidth) / 2); WinTop = Int((Root.WinHeight - WinHeight) / 2); } //------------------------------------- // defaultproperties //------------------------------------- r=[=N 2s=3Mo o o QsQ!n]EUT Hud SettingsX"S!/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTTeamSayMessagePlus <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTTeamSayMessagePlus expands StringMessagePlus; var globalconfig color YellowColor; var globalconfig color CyanColor; //------------------------------------- // RenderComplexMessage //------------------------------------- static function RenderComplexMessage( Canvas C, out float XL, out float YL, optional string MessageString, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { local string LocationName; if ( RelatedPRI_1 == None ) return; C.DrawColor = Default.CyanColor; C.DrawText( RelatedPRI_1.PlayerName$" ", false ); C.SetPos( C.CurX, C.CurY - YL ); if ( RelatedPRI_1.PlayerLocation != None ) LocationName = RelatedPRI_1.PlayerLocation.LocationName; else if ( RelatedPRI_1.PlayerZone != None ) Locationname = RelatedPRI_1.PlayerZone.ZoneName; if ( LocationName != "" ) { C.DrawColor = Default.CyanColor; C.DrawText( " ("$LocationName$"):", false ); } else C.DrawText( ": ", false ); C.SetPos( C.CurX, C.CurY - YL ); C.DrawColor = Default.YellowColor; C.DrawText( MessageString, false ); } //------------------------------------- // AssembleString //------------------------------------- static function string AssembleString( HUD MyHud, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional String MessageString ) { local string LocationName; if ( RelatedPRI_1 == None ) return ""; if ( RelatedPRI_1.PlayerLocation != None ) LocationName = RelatedPRI_1.PlayerLocation.LocationName; else if ( RelatedPRI_1.PlayerZone != None ) Locationname = RelatedPRI_1.PlayerZone.ZoneName; if ( Locationname == "" ) return RelatedPRI_1.PlayerName$" "$": "$MessageString; else return RelatedPRI_1.PlayerName$" ("$LocationName$"): "$MessageString; } //------------------------------------- // defaultproperties //------------------------------------- C*/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTTeamGameSounds <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTTeamGameSounds extends LocalMessagePlus; var sound RedTeamScoresSound, BlueTeamScoresSound, RedTeamTakesTheLeadSound, BlueTeamTakesTheLeadSound, RedTeamIncreasesThierLeadSound, BlueTeamIncreasesThierLeadSound, RedTeamDominatingSound, BlueTeamDominatingSound, HatTrickSound, DeniedSound, LastSecondSaveSound, RedTeamIsTheWinnerSound, BlueTeamIsTheWinnerSound, FlawlessVictorySound; //------------------------------------- // ClientReceive //------------------------------------- static simulated function ClientReceive( PlayerPawn MyPlayer, optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { Super.ClientReceive(MyPlayer, i, RelatedPRI_1, RelatedPRI_2, OptionalObject); switch (i) { case 0: TournamentPlayer(MyPlayer).ClientPlaySound(Default.RedTeamScoresSound,true,true); break; case 1: TournamentPlayer(MyPlayer).ClientPlaySound(Default.BlueTeamScoresSound,true,true); break; case 2: TournamentPlayer(MyPlayer).ClientPlaySound(Default.RedTeamTakesTheLeadSound,true,true); break; case 3: TournamentPlayer(MyPlayer).ClientPlaySound(Default.BlueTeamTakesTheLeadSound,true,true); break; case 4: TournamentPlayer(MyPlayer).ClientPlaySound(Default.RedTeamIncreasesThierLeadSound,true,true); break; case 5: TournamentPlayer(MyPlayer).ClientPlaySound(Default.BlueTeamIncreasesThierLeadSound,true,true); break; case 6: TournamentPlayer(MyPlayer).ClientPlaySound(Default.RedTeamDominatingSound,true,true); break; case 7: TournamentPlayer(MyPlayer).ClientPlaySound(Default.BlueTeamDominatingSound,true,true); break; case 8: TournamentPlayer(MyPlayer).ClientPlaySound(Default.HatTrickSound,true,true); break; case 9: TournamentPlayer(MyPlayer).ClientPlaySound(Default.DeniedSound,true,true); break; case 10: TournamentPlayer(MyPlayer).ClientPlaySound(Default.LastSecondSaveSound,true,true); break; case 11: TournamentPlayer(MyPlayer).ClientPlaySound(Default.RedTeamIsTheWinnerSound,true,true); break; case 12: TournamentPlayer(MyPlayer).ClientPlaySound(Default.BlueTeamIsTheWinnerSound,true,true); break; case 13: TournamentPlayer(MyPlayer).ClientPlaySound(Default.FlawlessVictorySound,true,true); break; } } //------------------------------------- // defaultproperties // keep the huds message que empty from sound messages. //------------------------------------- e /* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTTeamGamePlus <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTTeamGamePlus extends TeamGamePlus config; #exec OBJ LOAD FILE=..\Sounds\EUT_Sounds.uax var EUTGameReplicationInfo MyCRI; var UTStatsLink StatLink; var class _EndStatsClass; var ZoneInfo Z; var LowGrav lg; var Actor IpToCountry; var bool bExpandSpree, bAltOvertime; var byte AKMS[40], FlakKills[40], ComboKills[40], WarheadCount, ExpandedSpreeSwitch; var int BestTDMRanking[3], LowGravityAerialKillAdjuster; var string BestTDMPlayers[3]; var vector WarheadLocation[20]; struct _MultiKills { var float MultiTime; var byte MultiLevel; }; var _MultiKills MultiKills[40]; struct _WeaponDamage { var int Enforcer, BioGun, ShockRifle, Ripper, MiniGun, PulseGun, FlakGun, EightBall, SniperRifle, SuperShockRifle, CustomWeapon; }; var _WeaponDamage WeaponDamage[40]; struct _SplashKills { var float FlakTime; var Pawn LastHit; }; var _SplashKills SplashKills[40]; var() config bool bEnhancedSprees; var() config bool bEnhancedMessages; var() config bool bShowIPS; var() config bool bLogMods; var() config bool bCheckDefaults; var() config bool bHitSounds; var() config bool bDemoRequest; var() config bool bKickSpeedHack; var() config bool bReport; var() config bool bAntiTimer; var() config bool bTeamBeacon; var() config bool bAutoTaunts; var() config bool bEnhancedDeathMessages; var() config bool bScoreBoardEff; var() config bool bStatLink; var() config bool bAlwaysRecordTourney; var() config bool bKickMinY; var() config bool bNoOverTime; var() config bool bIpToCountry; var() config bool bUsesCustomWeapon; var() config bool bSuddenDeathOverTime; var() config bool bNoFlockPawns; var() config byte AnnouncerLevel; var() config byte SetFOV; var() config int TraceDistance; var() config float MinY; var() config string TransKillMessage; var() config string ImpactKillMessage; var() config string EnforcerKillMessage; var() config string BioKillMessage; var() config string ShockRifleKillMessage; var() config string PulseGunKillMessage; var() config string RipperKillMessage; var() config string MiniGunKillMessage; var() config string FlakCannonKillMessage; var() config string RocketLauncherKillMessage; var() config string SniperRifleKillMessage; var() config string CustomWeaponKillMessage; var() config string AerialKillBio; var() config string AerialKillRipper; var() config string AerialKillFlak; var() config string AerialKillRockets; var() config string AerialKillSniper; var() config string AerialKillSuper; var() config string AerialKillTrans; var() config string AerialKillCombo; var() config string AerialKillEnforcer; var() config string AerialKillPulse; var() config string AerialKillMini; var() config string AerialKillPiston; var() config string AerialKillCustom; var() config string SoundPackage; var() config string RedTeamName, BlueTeamName; var() config string CustomWeaponName; var() config string IpToCountryTexturePackage; var() config string MessageOfTheDay; var sound DeniedSound; var sound FlakMonkeySound; var sound HeadHunterSound; var sound ComboWhoreSound; var sound KillingSpreeSound; var sound RampageSound; var sound DominatingSound; var sound UnStoppableSound; var sound GodlikeSound; var sound WhickedSickSound; var sound RedTeamIsTheWinnerSound; var sound BlueTeamIsTheWinnerSound; var sound FlawlessVictorySound; var sound LastSecondSaveSound; var sound RedTeamScoresSound; var sound RedTeamTakesTheLeadSound; var sound RedTeamIncreasesThierLeadSound; var sound RedTeamDominatingSound; var sound BlueTeamScoresSound; var sound BlueTeamTakesTheLeadSound; var sound BlueTeamIncreasesThierLeadSound; var sound BlueTeamDominatingSound; var sound HatTrickSound; var sound HitSoundSound; var sound HitSoundFriendlySound; var sound DoubleKillSound; var sound MultiKillSound; var sound MegaKillSound; var sound UltraKillSound; var sound MonsterKillSoundF; var sound LudicriousKillSound; var sound HolyShitKillSound; var sound OwnageSound; const MaxArray = 40; const MaxTries = 21; //------------------------------------- // PreLogin //------------------------------------- event PreLogin ( string Options, string Address, out string Error, out string FailCode ) { local string Face, Pad, PlayerName; local bool bCheckFace; bCheckFace = ParseFace(Options, Address, Face, Pad, PlayerName); if (Face == "FailedParse") { Error = "FAILEDPARSE"; FailCode = "Your Client Failed to Parse at Prelogin Correctly"; log("Client Failed PreLogin with a Failure to Parse Options"@Pad,'EUT'); Super.PreLogin(Options, Address, Error, FailCode); } else if (bCheckFace) { Error = "ILLEGALFACE"; FailCode = "Ivan is not an authorized Face"; log("Client Attempted to PreLogin with Face"@Face@"--"@PlayerName@Pad,'EUT'); } else Super.PreLogin(Options, Address, Error, FailCode); } //------------------------------------- // ParseFace //------------------------------------- function bool ParseFace(string Options, string Address, out string Face, out string Pad, out string PlayerName) { local string s; if (Instr(Address,":") != -1) Pad = Left(Address, InStr(Address,":")); else Pad = Address; Options = Caps(Options); if (Instr(Options, "NAME=") != -1) { s = Mid(Options, instr(Options, "NAME=") + 5); if (instr(s, "?") != -1) PlayerName = left(s, instr(s,"?")); else PlayerName = "FailedParse"; } else PlayerName = "FailedParse"; if(InStr(Options, "FACE=") != -1) { s = Mid(Options, instr(Options, "FACE=") + 5); if (instr(s, "?") != -1) { Face = left(s, instr(s,"?")); if (instr(Face, ".") != -1) Face = mid(Face, instr(Face, ".") + 1); else Face = "FailedParse"; } else Face = "FailedParse"; } else Face = "FailedParse"; if (Face == "IVAN") return true; return False; } //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { local int i; local Warheadlauncher WL; local Actor A; super(TeamGamePlus).PostBeginPlay(); PreCacheSounds(); ResetVars(); if (bEnhancedSprees) { DeathMessageClass = Class'EUTDeathMessagePlus'; MyCRI.bUsesSpreeSounds = true; class'EUTMultiKillMessage'.default.DoubleKillSound = DoubleKillSound; class'EUTMultiKillMessage'.default.MultiKillSound = MultiKillSound; class'EUTMultiKillMessage'.default.MegaKillSound = MegaKillSound; class'EUTMultiKillMessage'.default.UltraKillSound = UltraKillSound; class'EUTMultiKillMessage'.default.MonsterKillSoundF = MonsterKillSoundF; class'EUTMultiKillMessage'.default.LudicriousKillSound = LudicriousKillSound; class'EUTMultiKillMessage'.default.HolyShitKillSound = HolyShitKillSound; class'EUTMultiKillMessage'.default.OwnageSound = OwnageSound; MyCRI.DoubleKillSound = DoubleKillSound; MyCRI.MultiKillSound = MultiKillSound; MyCRI.MegaKillSound = MegaKillSound; MyCRI.UltraKillSound = UltraKillSound; MyCRI.MonsterKillSoundF = MonsterKillSoundF; MyCRI.LudicriousKillSound = LudicriousKillSound; MyCRI.HolyShitKillSound = HolyShitKillSound; MyCRI.OwnageSound = OwnageSound; MyCRI.WhickedSickSound = WhickedSickSound; class'KillingSpreeMessage'.default.SpreeSound[0] = KillingSpreeSound; class'KillingSpreeMessage'.default.SpreeSound[1] = RampageSound; class'KillingSpreeMessage'.default.SpreeSound[2] = DominatingSound; class'KillingSpreeMessage'.default.SpreeSound[3] = UnStoppableSound; class'KillingSpreeMessage'.default.SpreeSound[4] = GodlikeSound; MyCRI.SpreeSound[0] = KillingSpreeSound; MyCRI.SpreeSound[1] = RampageSound; MyCRI.SpreeSound[2] = DominatingSound; MyCRI.SpreeSound[3] = UnStoppableSound; MyCRI.SpreeSound[4] = GodlikeSound; } else DeathMessageClass=Class'DeathMessagePlus'; if (bEnhancedMessages) { MyCRI.RedTeamScoresSound = RedTeamScoresSound; MyCRI.BlueTeamScoresSound = BlueTeamScoresSound; MyCRI.RedTeamTakesTheLeadSound = RedTeamTakesTheLeadSound; MyCRI.BlueTeamTakesTheLeadSound = BlueTeamTakesTheLeadSound; MyCRI.RedTeamIncreasesThierLeadSound = RedTeamIncreasesThierLeadSound; MyCRI.BlueTeamIncreasesThierLeadSound = BlueTeamIncreasesThierLeadSound; MyCRI.RedTeamDominatingSound = RedTeamDominatingSound; MyCRI.BlueTeamDominatingSound = BlueTeamDominatingSound; MyCRI.DeniedSound = DeniedSound; MyCRI.RedTeamIsTheWinnerSound = RedTeamIsTheWinnerSound; MyCRI.BlueTeamIsTheWinnerSound = BlueTeamIsTheWinnerSound; MyCRI.FlawlessVictorySound = FlawlessVictorySound; MyCRI.LastSecondSaveSound = LastSecondSaveSound; MyCRI.HatTrickSound = HatTrickSound; } MyCRI.FlakMonkeySound = FlakMonkeySound; MyCRI.HeadHunterSound = HeadHunterSound; MyCRI.ComboWhoreSound = ComboWhoreSound; MyCRI.HitSoundSound = HitSoundSound; MyCRI.HitSoundFriendlySound = HitSoundFriendlySound; if (Level.NetMode == NM_Client) Spawn(Class'EUTDemoEnhancer'); i = 0; WarheadCount = 0; foreach level.allactors(class'Warheadlauncher', WL) { if (i < 20) { WarheadLocation[i] = WL.location; i++; WarheadCount++; } } LowGravityAerialKillAdjuster = 1; foreach Level.AllActors(class'LowGrav',lg) if (lg != none) LowGravityAerialKillAdjuster = 2.5; if (bStatLink) { StatLink = Spawn(Class'UTStatsLink'); if (StatLink != none) { Log("TDM Stat Link Created:"@StatLink,'EUT'); InitializeLogging(); } } else GameName = "EUT Tournament Team Game"; if (bIpToCountry) { foreach AllActors(class'Actor', A, 'IpToCountry') { IpToCountry = A; break; } } } //------------------------------------- // PreCacheSounds //------------------------------------- function PreCacheSounds() { DeniedSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Denied",class'sound',true)); if(DeniedSound == none) DeniedSound = sound'EUT_Sounds.Denied'; HeadHunterSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HeadHunter",class'sound',true)); if(HeadHunterSound == none) HeadHunterSound = sound'EUT_Sounds.HeadHunter'; FlakMonkeySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_FlackMonkey",class'sound',true)); if(FlakMonkeySound == none) FlakMonkeySound = sound'EUT_Sounds.FlackMonkey'; ComboWhoreSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_ComboWhore",class'sound',true)); if(ComboWhoreSound == none) ComboWhoreSound = sound'EUT_Sounds.ComboWhore'; KillingSpreeSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_KillingSpree",class'sound',true)); if(KillingSpreeSound == none) KillingSpreeSound = sound'EUT_Sounds.Killing_Spree'; RampageSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Rampage",class'sound',true)); if(RampageSound == none) RampageSound = sound'EUT_Sounds.Rampage'; DominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Dominating",class'sound',true)); if(DominatingSound == none) DominatingSound = sound'EUT_Sounds.Dominating'; UnStoppableSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_UnStoppable",class'sound',true)); if(UnStoppableSound == none) UnStoppableSound = sound'EUT_Sounds.UnStoppable'; GodlikeSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Godlike",class'sound',true)); if(GodlikeSound == none) GodlikeSound = sound'EUT_Sounds.Godlike'; WhickedSickSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_WhickedSick",class'sound',true)); if(WhickedSickSound == none) WhickedSickSound = sound'EUT_Sounds.WhickedSick'; RedTeamIsTheWinnerSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_red_team_is_the_winner",class'sound',true)); if(RedTeamIsTheWinnerSound == none) RedTeamIsTheWinnerSound = sound'EUT_Sounds.red_team_is_the_winner'; FlawlessVictorySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Flawless_victory",class'sound',true)); if(FlawlessVictorySound == none) FlawlessVictorySound = sound'EUT_Sounds.Flawless_victory'; BlueTeamIsTheWinnerSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_blue_team_is_the_winner",class'sound',true)); if(BlueTeamIsTheWinnerSound == none) BlueTeamIsTheWinnerSound = sound'EUT_Sounds.blue_team_is_the_winner'; LastSecondSaveSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Last_Second_Save",class'sound',true)); if(LastSecondSaveSound == none) LastSecondSaveSound = sound'EUT_Sounds.Last_Second_Save'; RedTeamScoresSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_Scores",class'sound',true)); if(RedTeamScoresSound == none) RedTeamScoresSound = sound'EUT_Sounds.Red_Team_Scores'; RedTeamTakesTheLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_takes_lead",class'sound',true)); if(RedTeamTakesTheLeadSound == none) RedTeamTakesTheLeadSound = sound'EUT_Sounds.Red_Team_takes_lead'; RedTeamIncreasesThierLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_increases_their_lead",class'sound',true)); if(RedTeamIncreasesThierLeadSound == none) RedTeamIncreasesThierLeadSound = sound'EUT_Sounds.Red_Team_increases_their_lead'; RedTeamDominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_red_team_Dominating",class'sound',true)); if(RedTeamDominatingSound == none) RedTeamDominatingSound = sound'EUT_Sounds.red_team_Dominating'; BlueTeamScoresSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_Scores",class'sound',true)); if(BlueTeamScoresSound == none) BlueTeamScoresSound = sound'EUT_Sounds.Blue_Team_Scores'; BlueTeamTakesTheLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_takes_the_lead",class'sound',true)); if(BlueTeamTakesTheLeadSound == none) BlueTeamTakesTheLeadSound = sound'EUT_Sounds.Blue_Team_takes_the_lead'; BlueTeamIncreasesThierLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_increases_their_lead",class'sound',true)); if(BlueTeamIncreasesThierLeadSound == none) BlueTeamIncreasesThierLeadSound = sound'EUT_Sounds.Blue_Team_increases_their_lead'; BlueTeamDominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_blue_team_Dominating",class'sound',true)); if(BlueTeamDominatingSound == none) BlueTeamDominatingSound = sound'EUT_Sounds.blue_team_Dominating'; HatTrickSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HatTrick",class'sound',true)); if(HatTrickSound == none) HatTrickSound = sound'EUT_Sounds.HatTrick'; HitSoundSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HitSound",class'sound',true)); if(HitSoundSound == none) HitSoundSound = sound'EUT_Sounds.HitSound'; HitSoundFriendlySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HitSound_F",class'sound',true)); if(HitSoundFriendlySound == none) HitSoundFriendlySound =sound'EUT_Sounds.HitSound_F'; DoubleKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Double_Kill",class'sound',true)); if(DoubleKillSound == none) DoubleKillSound = sound'EUT_Sounds.Double_Kill'; MultiKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_MultiKill",class'sound',true)); if(MultiKillSound == none) MultiKillSound = sound'EUT_Sounds.MultiKill'; MegaKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_megakill",class'sound',true)); if(MegaKillSound == none) MegaKillSound = sound'EUT_Sounds.megakill'; UltraKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_UltraKill",class'sound',true)); if(UltraKillSound == none) UltraKillSound = sound'EUT_Sounds.UltraKill'; MonsterKillSoundF = sound(DynamicLoadObject(SoundPackage$"."$"Alt_MonsterKill_F",class'sound',true)); if(MonsterKillSoundF == none) MonsterKillSoundF = sound'EUT_Sounds.MonsterKill_F'; LudicriousKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_LudicrousKill",class'sound',true)); if(LudicriousKillSound == none) LudicriousKillSound = sound'EUT_Sounds.LudicrousKill'; HolyShitKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HolyShit_F",class'sound',true)); if(HolyShitKillSound == none) HolyShitKillSound = sound'EUT_Sounds.HolyShit_F'; OwnageSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Ownage",class'sound',true)); if(OwnageSound == none) OwnageSound = sound'EUT_Sounds.Ownage'; } //------------------------------------- // ResetVars //------------------------------------- function ResetVars() { local int i; MyCRI = EUTGameReplicationInfo(GameReplicationInfo); MyCRI.RedTeamName = RedTeamName; MyCRI.BlueTeamName = BlueTeamName; MyCRI.bShowIPS = bShowIPS; MyCRI.TraceDistance = TraceDistance; MyCRI.bTeamBeacon = bTeamBeacon; MyCRI.bIpToCountry = bIpToCountry; MyCRI.TransKillMessage = TransKillMessage; MyCRI.ImpactKillMessage = ImpactKillMessage; MyCRI.EnforcerKillMessage = EnforcerKillMessage; MyCRI.BioKillMessage = BioKillMessage; MyCRI.ShockRifleKillMessage = ShockRifleKillMessage; MyCRI.PulseGunKillMessage = PulseGunKillMessage; MyCRI.RipperKillMessage = RipperKillMessage; MyCRI.MiniGunKillMessage = MiniGunKillMessage; MyCRI.FlakCannonKillMessage = FlakCannonKillMessage; MyCRI.RocketLauncherKillMessage = RocketLauncherKillMessage; MyCRI.SniperRifleKillMessage = SniperRifleKillMessage; MyCRI.AerialKillBio = AerialKillBio; MyCRI.AerialKillRipper = AerialKillRipper; MyCRI.AerialKillFlak = AerialKillFlak; MyCRI.AerialKillRockets = AerialKillRockets; MyCRI.AerialKillSniper = AerialKillSniper; MyCRI.AerialKillSuper = AerialKillSuper; MyCRI.AerialKillTrans = AerialKillTrans; MyCRI.AerialKillCombo = AerialKillCombo; MyCRI.AerialKillEnforcer = AerialKillEnforcer; MyCRI.AerialKillPulse = AerialKillPulse; MyCRI.AerialKillMini = AerialKillMini; MyCRI.AerialKillPiston = AerialKillPiston; MyCRI.bScoreBoardEff = bScoreBoardEff; MyCRI.IpToCountryTexturePackage = IpToCountryTexturePackage; MyCRI.CustomWeaponName = CustomWeaponName; MyCRI.bUsesCustomWeapon = bUsesCustomWeapon; MyCRI.CustomWeaponKillMessage = CustomWeaponKillMessage; MyCRI.AerialKillCustom = AerialKillCustom; MyCRI.SetFOV = SetFOV; MyCRI.bEnhancedMessages = bEnhancedMessages; MyCRI.bTournament= bTournament; MyCRI.MessageOfTheDay = MessageOfTheDay; for (i = 0; i < MaxArray; i++) { MyCRI.TotalDamageAmmount[i] = 0; MyCRI.ClientHitSound[i] = 0; MyCRI.EnforcerHitCount[i] = 0; MyCRI.BioGunHitCount[i] = 0; MyCRI.ShockRifleHitCount[i] = 0; MyCRI.PulseGunHitCount[i] = 0; MyCRI.RipperHitCount[i] = 0; MyCRI.MiniGunHitCount[i] = 0; MyCRI.FlakGunHitCount[i] = 0; MyCRI.EightBallHitCount[i] = 0; MyCRI.SniperRifleHitCount[i] = 0; MyCRI.SuperShockRifleHitCount[i] = 0; MyCRI.ArmorAmmount[i] = 0; MyCRI.TotalKills[i] = 0; MyCRI.TotalDeaths[i] = 0; MyCRI.StoredPlayerIP[i] = ""; MyCRI.IPCTexture[i] = ""; MyCRI.ClientIdentified[i] = 0; MyCRI.HealthAmmount[i] = 0; MyCRI.MultiKills1[i].KillingSpree = 0; MyCRI.MultiKills1[i].Rampage = 0; MyCRI.MultiKills1[i].Dominating = 0; MyCRI.MultiKills2[i].UnStoppable = 0; MyCRI.MultiKills2[i].Godlike = 0; MyCRI.MultiKills2[i].Ownage = 0; MyCRI.PlayerAccuracy1[i].Enforcer = 0; MyCRI.PlayerAccuracy1[i].BioGun = 0; MyCRI.PlayerAccuracy1[i].ShockRifle = 0; MyCRI.PlayerAccuracy2[i].PulseGun = 0; MyCRI.PlayerAccuracy2[i].Ripper = 0; MyCRI.PlayerAccuracy2[i].MiniGun = 0; MyCRI.PlayerAccuracy3[i].FlakCannon = 0; MyCRI.PlayerAccuracy3[i].EightBall = 0; MyCRI.PlayerAccuracy3[i].SniperRifle = 0; MyCRI.PlayerAccuracy3[i].InstaGib = 0; FlakKills[i] = 0; ComboKills[i] = 0; MyCRI.HeadHunterCount[i] = 0; MyCRI.ComboWhoreCount[i] = 0; MyCRI.FlakMonkeyCount[i] = 0; MyCRI.HeadShotsCount[i] = 0; MultiKills[i].MultiLevel = 0; MultiKills[i].MultiTime = 0; MyCRI.KillingSpree[i].UltraKills = 0; MyCRI.KillingSpree[i].MonsterKills = 0; MyCRI.KillingSpree[i].LudicriousKills = 0; MyCRI.KillingSpree[i].HolyShitKills = 0; MyCRI.CurrentTotalAccuracy[i] = 0; MyCRI.CurrentRanking[i] = 0; WeaponDamage[i].Enforcer = 0; WeaponDamage[i].BioGun = 0; WeaponDamage[i].ShockRifle = 0; WeaponDamage[i].PulseGun = 0; WeaponDamage[i].Ripper = 0; WeaponDamage[i].MiniGun = 0; WeaponDamage[i].FlakGun = 0; WeaponDamage[i].EightBall = 0; WeaponDamage[i].SniperRifle = 0; WeaponDamage[i].SuperShockRifle = 0; AKMS[i] = 0; MyCRI.CustomWeaponHitCount[i] = 0; WeaponDamage[i].CustomWeapon = 0; MyCRI.PlayerAccuracy4[i].CustomWeapon = 0; SplashKills[i].FlakTime = 0; SplashKills[i].LastHit = none; } } //------------------------------------- // InitializeLogging //------------------------------------- function InitializeLogging() { local Mutator Mut; StatLink.bWorld = False; StatLink.StartLog(); StatLink.LogStandardInfo(); StatLink.LogServerInfo(); StatLink.LogMapParameters(); for (Mut = Level.Game.BaseMutator; Mut != None; Mut = Mut.NextMutator) StatLink.AddMutator(Mut); StatLink.LogMutatorList(); Level.Game.LogGameParameters(StatLink); Level.Game.LocalLog = StatLink; Level.Game.LocalLogFileName = StatLink.GetLogFileName(); } //------------------------------------- // InitGameReplicationInfo //------------------------------------- function InitGameReplicationInfo() { Super.InitGameReplicationInfo(); ResetVars(); } //------------------------------------- // Logout //------------------------------------- function Logout(Pawn P) { local int pid; pid = P.PlayerReplicationInfo.PlayerID; MyCRI = EUTGameReplicationInfo(GameReplicationInfo); super(TeamGamePlus).Logout(P); MyCRI.TotalDamageAmmount[pid] = 0; MyCRI.ClientHitSound[pid] = 0; MyCRI.EnforcerHitCount[pid] = 0; MyCRI.BioGunHitCount[pid] = 0; MyCRI.ShockRifleHitCount[pid] = 0; MyCRI.PulseGunHitCount[pid] = 0; MyCRI.RipperHitCount[pid] = 0; MyCRI.MiniGunHitCount[pid] = 0; MyCRI.FlakGunHitCount[pid] = 0; MyCRI.EightBallHitCount[pid] = 0; MyCRI.SniperRifleHitCount[pid] = 0; MyCRI.SuperShockRifleHitCount[pid] = 0; MyCRI.ArmorAmmount[pid] = 0; MyCRI.TotalKills[pid] = 0; MyCRI.TotalDeaths[pid] = 0; MyCRI.StoredPlayerIP[pid] = ""; MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = 0; MyCRI.HealthAmmount[pid] = 0; MyCRI.MultiKills1[pid].KillingSpree = 0; MyCRI.MultiKills1[pid].Rampage = 0; MyCRI.MultiKills1[pid].Dominating = 0; MyCRI.MultiKills2[pid].UnStoppable = 0; MyCRI.MultiKills2[pid].Godlike = 0; MyCRI.MultiKills2[pid].Ownage = 0; MyCRI.PlayerAccuracy1[pid].Enforcer = 0; MyCRI.PlayerAccuracy1[pid].BioGun = 0; MyCRI.PlayerAccuracy1[pid].ShockRifle = 0; MyCRI.PlayerAccuracy2[pid].PulseGun = 0; MyCRI.PlayerAccuracy2[pid].Ripper = 0; MyCRI.PlayerAccuracy2[pid].MiniGun = 0; MyCRI.PlayerAccuracy3[pid].FlakCannon = 0; MyCRI.PlayerAccuracy3[pid].EightBall = 0; MyCRI.PlayerAccuracy3[pid].SniperRifle = 0; MyCRI.PlayerAccuracy3[pid].InstaGib = 0; FlakKills[pid] = 0; ComboKills[pid] = 0; MyCRI.HeadHunterCount[pid] = 0; MyCRI.ComboWhoreCount[pid] = 0; MyCRI.FlakMonkeyCount[pid] = 0; MyCRI.HeadShotsCount[pid] = 0; MultiKills[pid].MultiLevel = 0; MultiKills[pid].MultiTime = 0; MyCRI.KillingSpree[pid].UltraKills = 0; MyCRI.KillingSpree[pid].MonsterKills = 0; MyCRI.KillingSpree[pid].LudicriousKills = 0; MyCRI.KillingSpree[pid].HolyShitKills = 0; MyCRI.CurrentTotalAccuracy[pid] = 0; MyCRI.CurrentRanking[pid] = 0; WeaponDamage[pid].Enforcer = 0; WeaponDamage[pid].BioGun = 0; WeaponDamage[pid].ShockRifle = 0; WeaponDamage[pid].PulseGun = 0; WeaponDamage[pid].Ripper = 0; WeaponDamage[pid].MiniGun = 0; WeaponDamage[pid].FlakGun = 0; WeaponDamage[pid].EightBall = 0; WeaponDamage[pid].SniperRifle = 0; WeaponDamage[pid].SuperShockRifle = 0; AKMS[pid] = 0; MyCRI.CustomWeaponHitCount[pid] = 0; WeaponDamage[pid].CustomWeapon = 0; MyCRI.PlayerAccuracy4[pid].CustomWeapon = 0; SplashKills[pid].FlakTime = 0; SplashKills[pid].LastHit = none; } //------------------------------------- // StartMatch //------------------------------------- function StartMatch() { Super.StartMatch(); log("Match Started"); if (bTournament) { ResetVars(); MyCRI.bWarmupSwitch = true; } MyCRI.bMatchStarted = true; } //------------------------------------- // InitGame //------------------------------------- event InitGame(string S, out string E) { Super.InitGame(S, E); MaxTeams = Min(MaxTeams, MaxAllowedTeams); } //------------------------------------- // Killed //------------------------------------- function Killed(Pawn Killer, Pawn Victim, name DamageType) { local int kid, oid; if (Killer == none) { if (DamageType == 'Suicided' || (DamageType == 'Fell') || (DamageType == 'Burned') || (DamageType == 'Drowned') || (DamageType == '')) { super(DeathMatchPlus).Killed(Killer, Victim, DamageType); return; } } if (Killer != none && (Victim != none)) { if (Killer != Victim) { if ((DamageType == 'FlakDeath') || (DamageType == 'shredded')) { kid = Killer.PlayerReplicationInfo.PlayerID; oid = Victim.PlayerReplicationInfo.PlayerID; FlakKills[kid]++; if (FlakKills[kid] == 30) { FlakKills[kid] = 0; if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("flak_monkey", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 15); BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A FlakMonkey!!!!",false); MyCRI.FlakMonkeyCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 101); } } if (DamageType == 'Decapitated') { kid = Killer.PlayerReplicationInfo.PlayerID; oid = Victim.PlayerReplicationInfo.PlayerID; MyCRI.HeadShotsCount[kid]++; if (MyCRI.HeadShotsCount[kid] > 30) { if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("head_hunter", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 9 ); MyCRI.HeadShotsCount[kid] = 0; BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A HeadHunter!!!!",false); MyCRI.HeadHunterCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 102); } } } if (Killer != none && (Killer.Weapon != none) && (Killer.IsA('PlayerPawn')) && (!Killer.Weapon.IsA('SuperShockRifle')) && (_GetItemName(Killer.Weapon) != "ZP_SUPERSHOCKRIFLE")) { if (DamageType == 'Jolted') { if (Victim.health < -50) { ComboKills[kid]++; kid = Killer.PlayerReplicationInfo.PlayerID; oid = Victim.PlayerReplicationInfo.PlayerID; if (ComboKills[kid] == 30) { ComboKills[kid] = 0; if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("combo_whore", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 16); BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A ComboWhore!!!!",false); MyCRI.ComboWhoreCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 103); } } } } } if (Victim != none && (Killer != none)) ProcessExtendedSprees(Victim.Spree); super(DeathMatchPlus).Killed(Killer, Victim, DamageType); } //------------------------------------- // ProcessExtendedSprees //------------------------------------- function ProcessExtendedSprees(int i) { switch(i) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: break; case 5: case 6: case 7: case 8: case 9: bExpandSpree = true; ExpandedSpreeSwitch = 6; break; case 10: case 11: case 12: case 13: case 14: bExpandSpree = true; ExpandedSpreeSwitch = 1; break; case 15: case 16: case 17: case 18: case 19: bExpandSpree = true; ExpandedSpreeSwitch = 2; break; case 20: case 21: case 22: case 23: case 24: bExpandSpree = true; ExpandedSpreeSwitch = 3; break; case 25: case 26: case 27: case 28: case 29: bExpandSpree = true; ExpandedSpreeSwitch = 4; break; case 30: break; } if (i > 29) { bExpandSpree = true; ExpandedSpreeSwitch = 5; } } //------------------------------------- // ScoreKill //------------------------------------- function ScoreKill(Pawn Killer, Pawn Victim) { local int kid, oid; if ((Killer == Victim) || (Killer == None)) Victim.PlayerReplicationInfo.Score -= 1; if (Killer != none && (Victim != none) && (Killer != Victim)) { Killer.killCount++; kid = Killer.PlayerReplicationInfo.PlayerID; oid = Victim.PlayerReplicationInfo.PlayerID; MultiKills[oid].MultiLevel = 0; if (Level.TimeSeconds - MultiKills[kid].MultiTime < 3) { ProcessMultiKills(kid); if (MultiKills[kid].MultiLevel >= AnnouncerLevel && (bEnhancedSprees)) BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(MultiKills[kid].MultiLevel, Killer.PlayerReplicationInfo,None,None),false,'EUTEvent'); } if (Level.TimeSeconds - MultiKills[kid].MultiTime > 3) MultiKills[kid].MultiLevel = 0; MultiKills[kid].MultiTime = Level.TimeSeconds; if (Killer.bIsPlayer && (Victim.bIsPlayer) && (Killer.PlayerReplicationInfo.Team != Victim.PlayerReplicationInfo.Team)) Killer.PlayerReplicationInfo.Score += 1; } if (bAltScoring && (Killer != Victim) && (Killer != None) && (Victim.bIsPlayer)) Victim.PlayerReplicationInfo.Score -= 1; Victim.DieCount++; BaseMutator.ScoreKill(Killer, Victim); if (!bScoreTeamKills) return; if (Victim.bIsPlayer && ((Killer == None) || Killer.bIsPlayer)) { if ((Killer == Victim) || (Killer == None)) Teams[Victim.PlayerReplicationInfo.Team].Score -= 1; else if ( Killer.PlayerReplicationInfo.Team != Victim.PlayerReplicationInfo.Team ) Teams[Killer.PlayerReplicationInfo.Team].Score += 1; else if (FriendlyFireScale > 0) { Teams[Victim.PlayerReplicationInfo.Team].Score -= 1; Killer.PlayerReplicationInfo.Score -= 1; } } if ((bOverTime || (GoalTeamScore > 0)) && (Killer != none && (Killer.bIsPlayer) && (Teams[killer.PlayerReplicationInfo.Team].Score >= GoalTeamScore))) EndGame("teamscorelimit"); if (!bNoOverTime && (bSuddenDeathOverTime) && (RemainingTime <= 0) && (!bAltOverTime) && (Teams[0].Score != Teams[1].Score)) AltEndGame("SuddenDeath"); } //------------------------------------- // ProcessMultiKills //------------------------------------- function ProcessMultiKills(int pid) { MultiKills[pid].MultiLevel++; switch (MultiKills[pid].MultiLevel) { case 0: case 1: case 2: break; case 3: if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_meg"$chr(9)$pid); break; case 4: MyCRI.KillingSpree[pid].UltraKills++; break; case 5: MyCRI.KillingSpree[pid].MonsterKills++; break; case 6: MyCRI.KillingSpree[pid].LudicriousKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_lud"$chr(9)$pid); break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: MyCRI.KillingSpree[pid].HolyShitKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_hs"$chr(9)$pid); break; case 19: MyCRI.KillingSpree[pid].HolyShitKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_hs"$chr(9)$pid); MultiKills[pid].MultiLevel = 0; break; } } //------------------------------------- // SetEndCams //------------------------------------- function bool SetEndCams(string Reason) { local TeamInfo BestTeam; local int i; local Pawn P, BestP; local PlayerPawn PP; // find individual winner for (P = Level.PawnList; P != None; P = P.nextPawn) if (P.bIsPlayer && ((BestP == None) || (P.PlayerReplicationInfo.Score > BestP.PlayerReplicationInfo.Score))) BestP = P; // find winner BestTeam = Teams[0]; for (i = 1; i < MaxTeams; i++) if (Teams[i].Score > BestTeam.Score) BestTeam = Teams[i]; for (i = 0; i < MaxTeams; i++) { if ((BestTeam.TeamIndex != i) && (BestTeam.Score == Teams[i].Score)) { BroadcastLocalizedMessage(DMMessageClass, 0); return false; } } GameReplicationInfo.GameEndedComments = TeamPrefix@BestTeam.TeamName@GameEndedMessage; EndTime = Level.TimeSeconds + 3.0; for (P = Level.PawnList; P != None; P = P.nextPawn) { CalculateRanking(P); PP = PlayerPawn(P); if (PP != None) { if (!bTutorialGame && (!bEnhancedMessages)) PlayWinMessage(PP, (PP.PlayerReplicationInfo.Team == BestTeam.TeamIndex)); if (!bTutorialGame && (bEnhancedMessages)) { if (CanPlaySound(P)) { if (Teams[0].Score > Teams[1].Score) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 11); if (Teams[1].Score > Teams[0].Score) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds',12); } } PP.bBehindView = true; if (PP == BestP) PP.ViewTarget = None; else PP.ViewTarget = BestP; PP.ClientGameEnded(); } P.GotoState('GameEnded'); } CalcEndStats(); return true; } //------------------------------------- // ReduceDamage //------------------------------------- function int ReduceDamage(int DamageAmmount, name DamageType, Pawn Injured, Pawn Instigator) { if (Injured != none && (!Injured.bIsPlayer)) return Super(TeamGamePlus).ReduceDamage(DamageAmmount, DamageType, Injured, Instigator); if ((Instigator != None) && (Injured.PlayerReplicationInfo.Team != Instigator.PlayerReplicationInfo.Team) && Injured.IsA('Bot') && ((Injured.health < 35) || (Injured.PlayerReplicationInfo.HasFlag != None))) Bot(Injured).SendTeamMessage(None, 'Other', 4, 15); if (Instigator != None && Injured != None) { If (Injured.PlayerReplicationInfo != None && Instigator.PlayerReplicationInfo != None) { if (Injured.PlayerReplicationInfo.Team != Instigator.PlayerReplicationInfo.Team) { MyCRI.TotalDamageAmmount[Instigator.PlayerReplicationInfo.PlayerID]++; if (Instigator.Weapon != none) CalculateDamage(Instigator, Injured, DamageType, DamageAmmount); if (MyCRI.ClientHitSound[Instigator.PlayerReplicationInfo.PlayerID] == 1 && (bHitSounds)) TournamentPlayer(PlayerPawn(Instigator)).ReceiveLocalizedMessage( class'EUTHitSoundMessage', 0); return Super(TeamGamePlus).ReduceDamage(DamageAmmount, DamageType, Injured, Instigator); } if (Injured.PlayerReplicationInfo.Team == Instigator.PlayerReplicationInfo.Team && (MyCRI.ClientHitSound[Instigator.PlayerReplicationInfo.PlayerID] == 1) && (Instigator != Injured) && (bHitSounds)) TournamentPlayer(PlayerPawn(Instigator)).ReceiveLocalizedMessage( class'EUTHitSoundMessage', 1); } } return Super(TeamGamePlus).ReduceDamage(DamageAmmount, DamageType, Injured, Instigator); } //------------------------------------- // Timer //------------------------------------- function Timer() { local Pawn P; local string IP, S; local int pid; local Inventory Inv; if (NumSpectators < MaxSpectators) MyCRI.bCanSpectate = true; else MyCRI.bCanSpectate = false; for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.PlayerReplicationInfo != none) { pid = P.PlayerReplicationInfo.PlayerID; if (P.PlayerReplicationInfo.Team == 0 && (MyCRI.Teams[0].Size == 0)) AddToTeam(0,P); if (P.PlayerReplicationInfo.Team == 1 && (MyCRI.Teams[1].Size == 0)) AddToTeam(1,P); } if (P.IsA('Bot') || P.IsA('PlayerPawn')) { if (P.PlayerReplicationInfo != none && (P.PlayerReplicationInfo.PlayerName != "Player")) { MyCRI.ClientPing[pid] = P.PlayerReplicationInfo.Ping; MyCRI.TotalKills[pid] = P.KillCount; MyCRI.TotalDeaths[pid] = P.DieCount; if(!P.IsA('Bot')) { if (MyCRI.StoredPlayerIP[pid] == "") { IP = PlayerPawn(P).GetPlayerNetworkAddress(); IP = Left(IP,InStr(IP,":")); MyCRI.StoredPlayerIP[pid] = IP; } if (MyCRI.StoredPlayerIP[pid] != "" && (bIpToCountry) && (IpToCountry != none) && (MyCRI.ClientIdentified[pid] < MaxTries)) { S = IpToCountry.GetItemName(MyCRI.StoredPlayerIP[pid]); if(caps(S) == "!DISABLED") { MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = MaxTries; } else if(Left(S, 1) != "!") { MyCRI.IPCTexture[pid] = SelElem(S, 5); if (MyCRI.IPCTexture[pid] == "") { MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = MaxTries; } else MyCRI.ClientIdentified[pid] = MaxTries; } MyCRI.ClientIdentified[pid]++; } } CalculateRanking(P); if (P.Health >= 0) MyCRI.HealthAmmount[pid] = P.Health; else MyCRI.HealthAmmount[pid] = 0; MyCRI.ArmorAmmount[pid] = 0; for (Inv = P.Inventory; Inv != None; Inv = Inv.Inventory) if (Inv.bIsAnArmor) MyCRI.ArmorAmmount[pid] += Inv.Charge; } } } if (RemainingTime <= 0 && (!bAltOvertime) && (bNoOverTime)) AltEndGame("timelimit"); super(DeathMatchPlus).Timer(); } //------------------------------------- // SelElem //------------------------------------- static final function string SelElem(string s, int e) { local int i; while (e-->1) s = Mid(s, InStr(s,":") + 1); i = InStr(s, ":"); if (i != -1) s = Left(s, i); return s; } //------------------------------------- // NotifySpree //------------------------------------- function NotifySpree(Pawn Other, int i) { local Pawn P; local int oid; oid = Other.PlayerReplicationInfo.PlayerID; if (i != 5 && (i != 10) && (i != 15) && (i != 20) && (i != 25) && (i != 30)) return; switch (i) { case 5: i = 0; MyCRI.MultiKills1[oid].KillingSpree++; break; case 10: i = 1; MyCRI.MultiKills1[oid].Rampage++; break; case 15: i = 2; MyCRI.MultiKills1[oid].Dominating++; break; case 20: i = 3; MyCRI.MultiKills2[oid].UnStoppable++; break; case 25: i = 4; MyCRI.MultiKills2[oid].Godlike++; break; case 30: i = 5; MyCRI.MultiKills2[oid].Ownage++; Other.Spree = 0; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_wks"$chr(9)$oid); break; } for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('TournamentPlayer')) P.ReceiveLocalizedMessage( class'KillingSpreeMessage', i, Other.PlayerReplicationInfo ); if (CanPlaySound(P) && (i == 5) && (bEnhancedSprees)) { BroadcastLocalizedMessage(class'EUTHudMessages', i, Other.PlayerReplicationInfo, None, None); TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 104); } } } //------------------------------------- // CalculateAccuracy //------------------------------------- function CalculateAccuracy(Pawn P) { local int pid; local int f, t; if (P.PlayerReplicationInfo == none ||(P.PlayerReplicationInfo.PlayerName == "Player")) return; pid = P.PlayerReplicationInfo.PlayerID; f = 0; t = MyCRI.PlayerAccuracy1[pid].Enforcer + MyCRI.PlayerAccuracy1[pid].BioGun + MyCRI.PlayerAccuracy1[pid].ShockRifle + MyCRI.PlayerAccuracy2[pid].MiniGun + MyCRI.PlayerAccuracy2[pid].PulseGun + MyCRI.PlayerAccuracy2[pid].Ripper + MyCRI.PlayerAccuracy3[pid].EightBall + MyCRI.PlayerAccuracy3[pid].FlakCannon + MyCRI.PlayerAccuracy3[pid].SniperRifle + MyCRI.PlayerAccuracy3[pid].InstaGib + MyCRI.PlayerAccuracy4[pid].CustomWeapon; if (MyCRI.PlayerAccuracy1[pid].Enforcer != 0) f++; if (MyCRI.PlayerAccuracy1[pid].BioGun != 0) f++; if (MyCRI.PlayerAccuracy1[pid].ShockRifle != 0) f++; if (MyCRI.PlayerAccuracy2[pid].MiniGun != 0) f++; if (MyCRI.PlayerAccuracy2[pid].PulseGun != 0) f++; if (MyCRI.PlayerAccuracy2[pid].Ripper != 0) f++; if (MyCRI.PlayerAccuracy3[pid].EightBall != 0) f++; if (MyCRI.PlayerAccuracy3[pid].FlakCannon != 0) f++; if (MyCRI.PlayerAccuracy3[pid].SniperRifle != 0) f++; if (MyCRI.PlayerAccuracy3[pid].InstaGib != 0) f++; if (MyCRI.PlayerAccuracy4[pid].CustomWeapon != 0) f++; MyCRI.CurrentTotalAccuracy[pid] = t/f; } //------------------------------------- // PickupQuery //------------------------------------- function bool PickupQuery(Pawn Other, Inventory Inv) { local byte x; local int st, at, rt, it, kt, mt, bt, i; local string s; s = caps(mid(string(Inv.Class), instr(string(Inv.Class), ".") + 1)); if (!bAntiTimer) { if (bCheckDefaults) { switch (s) { case "UT_SHIELDBELT": Inv.DrawScale = 1.0; break; case "UDAMAGE": Inv.DrawScale = 1.0; break; case "WARHEADLAUNCHER": Inv.DrawScale = 1.0; break; case "UT_INVISIBILITY": Inv.DrawScale = 1.0; break; case "HEALTHPACK": Inv.DrawScale = 1.0; break; case "ARMOR2": Inv.DrawScale = 1.0; break; case "UT_JUMPBOOTS": Inv.DrawScale = 1.0; break; } } if (BaseMutator.HandlePickupQuery(Other, Inv, x)) return ( x == 1 ); if ( Other.Inventory == none ) return true; else return !Other.Inventory.HandlePickupQuery(Inv); } st = rand(30) + 55; at = rand(40) + 100; rt = st; it = at; kt = rand(40) + 100; mt = rand(20) + 20; bt = mt; switch (s) { case "UT_SHIELDBELT": Inv.ReSpawnTime = st; Inv.DrawScale = 1.0; break; case "UDAMAGE": Inv.ReSpawnTime = at; Inv.DrawScale = 1.0; break; case "WARHEADLAUNCHER": for (i = 0; i < WarheadCount; i++) { if (Inv.location == WarheadLocation[i]) { Inv.ReSpawnTime = rt; Inv.DrawScale = 1.0; break; } } break; case "UT_INVISIBILITY": Inv.ReSpawnTime = it; Inv.DrawScale = 1.0; break; case "HEALTHPACK": Inv.ReSpawnTime = kt; Inv.DrawScale = 1.0; break; case "ARMOR2": Inv.ReSpawnTime = mt; Inv.DrawScale = 1.0; break; case "UT_JUMPBOOTS": Inv.ReSpawnTime = bt; Inv.DrawScale = 1.0; break; } if (BaseMutator.HandlePickupQuery(Other, Inv, x)) return (x == 1); if (Other.Inventory == none) return true; else return !Other.Inventory.HandlePickupQuery(Inv); } //------------------------------------- // GetRules //------------------------------------- function string GetRules() { local string ResultSet; ResultSet = super(TeamGamePlus).GetRules(); ResultSet = ResultSet$"\\bEnhancedSprees\\"$bEnhancedSprees; ResultSet = ResultSet$"\\bEnhancedMessages\\"$bEnhancedMessages; ResultSet = ResultSet$"\\bShowIPS\\"$bShowIPS; ResultSet = ResultSet$"\\bLogMods\\"$bLogMods; ResultSet = ResultSet$"\\bCheckDefaults\\"$bCheckDefaults; ResultSet = ResultSet$"\\HitSoundSounds\\"$bHitSounds; ResultSet = ResultSet$"\\DemoRequest\\"$bDemoRequest; ResultSet = ResultSet$"\\AnnouncerLevel\\"$AnnouncerLevel; ResultSet = ResultSet$"\\RedTeamName\\"$RedTeamName; ResultSet = ResultSet$"\\BlueTeamName\\"$BlueTeamName; //Log("GetRules: "$ResultSet,'Rules'); return ResultSet; } //------------------------------------- // LogGameParameters //------------------------------------- function LogGameParameters(StatLog _StatLog) { local bool bTemp; if (_StatLog == None) { GameName = "EUT Tournament Team Game"; return; } GameName = "Tournament Team Game"; bTemp = bCoopWeaponMode; if (Level.Netmode != NM_Standalone) bCoopWeaponMode = bMultiWeaponStay; super(TeamGamePlus).LogGameParameters(_StatLog); bCoopWeaponMode = bTemp; _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bEnhancedSprees"$Chr(9)$bEnhancedSprees); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bEnhancedMessages"$Chr(9)$bEnhancedMessages); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bHitSounds"$Chr(9)$bHitSounds); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bDemoRequest"$Chr(9)$bDemoRequest); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"BlueTeamName"$Chr(9)$BlueTeamName); _StatLog.LogEventString(_StatLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"RedTeamName"$Chr(9)$RedTeamName); GameName = "EUT Tournament Team Game"; } //------------------------------------- // CalculateRanking //------------------------------------- function CalculateRanking(Pawn P) { local int pid; if (P.PlayerReplicationInfo == none ||(P.PlayerReplicationInfo.PlayerName == "Player")) return; pid = P.PlayerReplicationInfo.PlayerID; MyCRI.CurrentRanking[pid] = 1000 + (Clamp(int((float(MyCRI.TotalKills[pid]) / float(MyCRI.TotalKills[pid] + MyCRI.TotalDeaths[pid])) * 100), 0, 100) * 10) + (MyCRI.CurrentTotalAccuracy[pid] * 10) + (P.PlayerReplicationInfo.Score * 50) + (MyCRI.MultiKills1[pid].KillingSpree * 100) + (MyCRI.MultiKills1[pid].Rampage * 100) + (MyCRI.MultiKills1[pid].Dominating * 100) + (MyCRI.HeadHunterCount[pid] * 100) + (MyCRI.KillingSpree[pid].UltraKills * 10) + (MyCRI.KillingSpree[pid].MonsterKills * 10) + (MyCRI.KillingSpree[pid].LudicriousKills * 10) + (MyCRI.KillingSpree[pid].HolyShitKills * 10); CalculateAccuracy(P); } //------------------------------------- // CalcEndStats //------------------------------------- function CalcEndStats() { local int i; local PlayerReplicationInfo PRI; local Pawn P; local int pid; Log("!!!!!!!!!!!!!!! CALC END STATS"); for (i = 0; i < 3; i++) { BestTDMRanking[i] = _EndStatsClass.Default.BestTDMRanking[i]; BestTDMPlayers[i] = _EndStatsClass.Default.BestTDMPlayers[i]; } for (i = 0; i < 32; i++) { if (GameReplicationInfo.PRIArray[i] != None) { PRI = GameReplicationInfo.PRIArray[i]; TotalFrags += PRI.Score; TotalDeaths += PRI.Deaths; if (Caps(PRI.PlayerName) != "PLAYER") EmptyBestTDMSlot(MyCRI.CurrentRanking[PRI.PlayerID], PRI.PlayerName); } } for (i = 0; i < 3; i++) { _EndStatsClass.Default.BestTDMPlayers[i] = BestTDMPlayers[i]; _EndStatsClass.Default.BestTDMRanking[i] = BestTDMRanking[i]; } EndStatsClass.Default.TotalFrags = TotalFrags + EndStatsClass.Default.TotalFrags; EndStatsClass.Default.TotalDeaths = TotalDeaths + EndStatsClass.Default.TotalDeaths; EndStatsClass.Default.TotalGames++; EndStatsClass.Static.StaticSaveConfig(); _EndStatsClass.Static.StaticSaveConfig(); for (P = Level.PawnList; P != None; P = P.NextPawn) { if ( P.IsA('Bot') || P.IsA('PlayerPawn') ) { if ( P.PlayerReplicationInfo != none && ( P.PlayerReplicationInfo.PlayerName != "Player" )) { pid = P.PlayerReplicationInfo.PlayerID; if ( Level.Game.LocalLog != None && ( bStatLink )) { Level.Game.LocalLog.LogSpecialEvent("stat_player", "accuracy", pid, string(MyCRI.CurrentTotalAccuracy[pid])); //Weapon Specific Accuracy Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Enforcer",pid, string(MyCRI.PlayerAccuracy1[pid].Enforcer)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","GES Bio Rifle",pid, string(MyCRI.PlayerAccuracy1[pid].BioGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Shock Rifle",pid, string(MyCRI.PlayerAccuracy1[pid].ShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Ripper",pid, string(MyCRI.PlayerAccuracy2[pid].Ripper)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Pulse Gun",pid, string(MyCRI.PlayerAccuracy2[pid].PulseGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Minigun",pid, string(MyCRI.PlayerAccuracy2[pid].MiniGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Flak Cannon",pid, string(MyCRI.PlayerAccuracy3[pid].FlakCannon)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Rocket Launcher",pid, string(MyCRI.PlayerAccuracy3[pid].EightBall)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Sniper Rifle",pid, string(MyCRI.PlayerAccuracy3[pid].SniperRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Enhanced Shock Rifle",pid, string(MyCRI.PlayerAccuracy3[pid].InstaGib)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Custom Weapon",pid,string(MyCRI.PlayerAccuracy4[pid].CustomWeapon)); //Weapon Hit Count Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Enforcer",pid, string(MyCRI.EnforcerHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","GES Bio Rifle",pid, string(MyCRI.BioGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Shock Rifle",pid, string(MyCRI.ShockRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Ripper",pid, string(MyCRI.RipperHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Pulse Gun",pid, string(MyCRI.PulseGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Minigun",pid, string(MyCRI.MiniGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Flak Cannon",pid, string(MyCRI.FlakGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Rocket Launcher",pid, string(MyCRI.EightBallHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Sniper Rifle",pid, string(MyCRI.SniperRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Enhanced Shock Rifle",pid, string(MyCRI.SuperShockRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Custom Weapon",pid, string(MyCRI.CustomWeaponHitCount[pid])); //Weapon Damage Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Enforcer",pid, string(WeaponDamage[pid].Enforcer)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","GES Bio Rifle",pid, string(WeaponDamage[pid].BioGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Shock Rifle",pid, string(WeaponDamage[pid].ShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Ripper",pid, string(WeaponDamage[pid].Ripper)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Pulse Gun",pid, string(WeaponDamage[pid].PulseGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Minigun",pid, string(WeaponDamage[pid].MiniGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Flak Cannon",pid, string(WeaponDamage[pid].FlakGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Rocket Launcher",pid, string(WeaponDamage[pid].EightBall)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Sniper Rifle",pid, string(WeaponDamage[pid].SniperRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Enhanced Shock Rifle",pid, string(WeaponDamage[pid].SuperShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Custom Weapon",pid, string(WeaponDamage[pid].CustomWeapon)); //Weapon Shot Count Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Enforcer",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].Enforcer,MyCRI.EnforcerHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","GES Bio Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].BioGun,MyCRI.BioGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Shock Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].ShockRifle,MyCRI.ShockRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Ripper",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].Ripper,MyCRI.RipperHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Pulse Gun",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].PulseGun,MyCRI.PulseGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Minigun",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].MiniGun,MyCRI.MiniGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Flak Cannon",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].FlakCannon,MyCRI.FlakGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Rocket Launcher",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].EightBall,MyCRI.EightBallHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Sniper Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].SniperRifle,MyCRI.SniperRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Enhanced Shock Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].InstaGib,MyCRI.SuperShockRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Custom Weapon",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy4[pid].CustomWeapon,MyCRI.CustomWeaponHitCount[pid]))); } } } } } //------------------------------------- // CalculateShotCount //------------------------------------- function int CalculateShotCount(float acc, int i) { acc = acc/100; return i / acc; } //------------------------------------- // EmptyBestTDMSlot //------------------------------------ function EmptyBestTDMSlot(int Rank, string PlayerName) { if (Rank > BestTDMRanking[2]) { BestTDMRanking[0] = BestTDMRanking[1]; BestTDMPlayers[0] = BestTDMPlayers[1]; BestTDMRanking[1] = BestTDMRanking[2]; BestTDMPlayers[1] = BestTDMPlayers[2]; BestTDMRanking[2] = Rank; BestTDMPlayers[2] = PlayerName; return; } else if (Rank > BestTDMRanking[1]) { BestTDMRanking[0] = BestTDMRanking[1]; BestTDMPlayers[0] = BestTDMPlayers[1]; BestTDMRanking[1] = Rank; BestTDMPlayers[1] = PlayerName; return; } else if (Rank > BestTDMRanking[0]) { BestTDMRanking[0] = Rank; BestTDMPlayers[0] = PlayerName; return; } } //------------------------------------- // CalculateDamage //------------------------------------- function CalculateDamage(Pawn Killer, Pawn Victim, name DamageType, int DamageAmmount) { local int kid, vid; local byte i; local int health; local string s; if (Killer == none || (Victim == none) || (bGameEnded)) return; if (Killer.PlayerReplicationInfo == none || (Victim.PlayerReplicationInfo == none) || (Killer.Weapon == none)) return; kid = Killer.PlayerReplicationInfo.PlayerID; vid = Victim.PlayerReplicationInfo.PlayerID; i = 0; health = Victim.Health + MyCRI.ArmorAmmount[vid]; s = _GetItemName(Killer.Weapon); switch (s) { case "ENFORCER": case "DOUBLEENFORCER": case "ZP_ENFORCER": MyCRI.EnforcerHitCount[kid]++; WeaponDamage[kid].Enforcer = WeaponDamage[kid].Enforcer + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Shot') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Enf', i); return; } } break; case "UT_BIORIFLE": MyCRI.BioGunHitCount[kid]++; WeaponDamage[kid].BioGun = WeaponDamage[kid].BioGun + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Corroded') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Bio', i); return; } } break; case "SHOCKRIFLE": MyCRI.ShockRifleHitCount[kid]++; WeaponDamage[kid].ShockRifle = WeaponDamage[kid].ShockRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Jolted') { if (health - DamageAmmount < -100) { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Combo', i); return; } } } break; case "SUPERSHOCKRIFLE": case "ZP_SHOCKRIFLE": case "ZP_SUPERSHOCKRIFLE": MyCRI.SuperShockRifleHitCount[kid]++; WeaponDamage[kid].SuperShockRifle = WeaponDamage[kid].SuperShockRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'SuperShock', i); return; } break; case "PULSEGUN": MyCRI.PulseGunHitCount[kid]++; WeaponDamage[kid].PulseGun = WeaponDamage[kid].PulseGun + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'Pulsed': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Pulse', i); return; } break; case 'zapped': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Pulse', i); return; } break; } break; case "RIPPER": MyCRI.RipperHitCount[kid]++; WeaponDamage[kid].Ripper = WeaponDamage[kid].Ripper + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'RipperAltDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; case 'shredded': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; } break; case "MINIGUN2": MyCRI.MiniGunHitCount[kid]++; WeaponDamage[kid].MiniGun = WeaponDamage[kid].MiniGun + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'shot') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Mini', i); return; } } break; case "UT_FLAKCANNON": if (Level.TimeSeconds - SplashKills[kid].FlakTime > 1) { MyCRI.FlakGunHitCount[kid]++; WeaponDamage[kid].FlakGun = WeaponDamage[kid].FlakGun + DamageAmmount; SplashKills[kid].FlakTime = Level.TimeSeconds; SplashKills[kid].LastHit = Victim; } else if (SplashKills[kid].LastHit != Victim && Level.TimeSeconds - SplashKills[kid].FlakTime < 1) { MyCRI.FlakGunHitCount[kid]++; WeaponDamage[kid].FlakGun = WeaponDamage[kid].FlakGun + DamageAmmount; SplashKills[kid].FlakTime = Level.TimeSeconds; SplashKills[kid].LastHit = Victim; } if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shredded': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Flak', i); return; } break; case 'FlakDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Flak', i); return; } break; } break; case "UT_EIGHTBALL": MyCRI.EightBallHitCount[kid]++; WeaponDamage[kid].EightBall = WeaponDamage[kid].EightBall + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'GrenadeDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Rockets', i); return; } break; case 'RocketDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Rockets', i); return; } break; } break; case "SNIPERRIFLE": case "ZP_SNIPERRIFLE": MyCRI.SniperRifleHitCount[kid]++; WeaponDamage[kid].SniperRifle = WeaponDamage[kid].SniperRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shot': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; } break; case "IMPACTHAMMER": if (!bEnhancedDeathMessages) return; if (DamageType == 'Impact') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Impact', i); return; } } break; case "TRANSLOCATOR": if (!bEnhancedDeathMessages) return; if (DamageType == 'Gibbed') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Trans', i); return; } } break; case CustomWeaponName: if (bUsesCustomWeapon) { MyCRI.CustomWeaponHitCount[kid]++; WeaponDamage[kid].CustomWeapon = WeaponDamage[kid].CustomWeapon + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shot': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; } } break; } } //------------------------------------- // DamageKills //------------------------------------- function bool DamageKills(int x, int i) { if (x <= i) return true; else return false; } //------------------------------------- // CheckZ //------------------------------------- function bool CheckZ(Pawn P) { local vector X; X.X = P.Location.X; X.Y = P.Location.Y; X.Z = P.Location.Z + (-150 * LowGravityAerialKillAdjuster); if (FastTrace(X,P.Location)) return true; else return false; } //------------------------------------- // ParseNotification //------------------------------------- function ParseNotification(Pawn Killer, Pawn Victim, name DamageInstigator, byte i) { if (Killer == none || (Victim == none) || (i == 0)) return; if (Killer.IsA('Bot')) return; if (i == 1) { if (DamageInstigator == 'bio' || (DamageInstigator == 'Ripper') || (DamageInstigator == 'Flak') || (DamageInstigator == 'Rockets') || (DamageInstigator == 'Sniper') || (DamageInstigator == 'SuperShock') || (DamageInstigator == 'Trans') || (DamageInstigator == 'Combo') || (DamageInstigator == 'Enf') || (DamageInstigator == 'Pulse') || (DamageInstigator == 'Mini') || (DamageInstigator == 'Piston') || (DamageInstigator == 'Impact')) { if(CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage(class'EUTMultiKillMessage', 20); AKMS[Killer.PlayerReplicationInfo.PlayerID] = 1; BroadcastRegularDeathMessage(Killer, Victim, DamageInstigator); return; } } } //------------------------------------- // BroadcastRegularDeathMessage //------------------------------------- function BroadcastRegularDeathMessage(Pawn Killer, Pawn Other, name DamageType) { local int i; local string s; local bool b; if (Killer == none || (Other == none)) return; if (Killer.PlayerReplicationInfo == none || (Other.PlayerReplicationInfo == none) || (Killer.Weapon == none)) return; if (bEnhancedDeathMessages) { if (EUTDamageType(DamageType)) { switch (DamageType) { case 'bio': i = 61; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Ripper': i = 62; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Flak': i = 63; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Rockets': i = 64; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Sniper': i = 65; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'SuperShock': i = 66; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Trans': i = 67; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Combo': i = 68; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Enf': i = 69; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Pulse': i = 70; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Mini': i = 72; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Impact': i = 74; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; } } if (!EUTDamageType(DamageType)) { if (AKMS[Killer.PlayerReplicationInfo.PlayerID] == 1) { AKMS[Killer.PlayerReplicationInfo.PlayerID] = 0; return; } switch (_GetItemName(Killer.Weapon)) { case "ENFORCER": case "DOUBLEENFORCER": case "ZP_ENFORCER": i = 21; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_BIORIFLE": i = 22; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "SHOCKRIFLE": case "SUPERSHOCKRIFLE": case "ZP_SHOCKRIFLE": case "ZP_SUPERSHOCKRIFLE": i = 23; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "PULSEGUN": i = 24; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "RIPPER": i = 25; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "MINIGUN2": i = 26; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_FLAKCANNON": i = 27; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_EIGHTBALL": i = 28; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "SNIPERRIFLE": case "ZP_SNIPERRIFLE": i = 29; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "IMPACTHAMMER": i = 76; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "TRANSLOCATOR": i = 78; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; } } } if (!bEnhancedDeathMessages && (!b)) BroadcastLocalizedMessage(DeathMessageClass, 30, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); } //------------------------------------- // EUTDamageType //------------------------------------- function bool EUTDamageType(name DamageType) { if (DamageType == 'bio' || (DamageType == 'Ripper' ) || (DamageType == 'Flak' ) || (DamageType == 'Rockets' ) || (DamageType == 'Sniper' ) || (DamageType == 'SuperShock' ) || (DamageType == 'Trans' ) || (DamageType == 'Combo' ) || (DamageType == 'Enf' ) || (DamageType == 'Pulse' ) || (DamageType == 'Mini' ) || (DamageType == 'Impact' )) return true; else return false; } //------------------------------------- // EndSpree //------------------------------------- function EndSpree(Pawn Killer, Pawn Other) { local Pawn P; if (Other != none) if (!Other.bIsPlayer) return; for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('TournamentPlayer')) { if (!bExpandSpree) { if ((Killer == None) || !Killer.bIsPlayer) { TournamentPlayer(P).EndSpree(None, Other.PlayerReplicationInfo); return; } else { TournamentPlayer(P).EndSpree(Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo); return; } } if (bExpandSpree) { if ((Killer == None) || !Killer.bIsPlayer) { TournamentPlayer(P).EndSpree(None, Other.PlayerReplicationInfo); return; } else { TournamentPlayer(P).EndSpree(Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo); switch (ExpandedSpreeSwitch) { case 1: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(21, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 2: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(22, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 3: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(23, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 4: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(24, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 5: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(25, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 6: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(26, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; default: break; } } } } } } //------------------------------------- // AltEndGame //------------------------------------- function AltEndGame(string Reason) { local actor A; AltSetEndCams(Reason); bGameEnded = true; bAltOvertime = true; foreach AllActors(class'Actor', A, 'EndGame') A.trigger(self, none); if (LocalLog != None) { LocalLog.LogGameEnd(Reason); LocalLog.StopLog(); if (bBatchLocal) LocalLog.ExecuteSilentLogBatcher(); LocalLog.Destroy(); LocalLog = None; } if (WorldLog != None) { WorldLog.LogGameEnd(Reason); WorldLog.StopLog(); WorldLog.ExecuteWorldLogBatcher(); WorldLog.Destroy(); WorldLog = None; } } //------------------------------------- // AltSetEndCams //------------------------------------- function bool AltSetEndCams(string Reason) { local TeamInfo BestTeam; local int i; local Pawn P, BestP; local PlayerPawn PP; local string EndGameNotify; BestTeam = Teams[0]; for (i = 1; i < MaxTeams; i++) { if (Teams[i].Score > BestTeam.Score) { BestTeam = Teams[i]; if(Reason == "SuddenDeath") EndGameNotify = TeamPrefix@BestTeam.TeamName@"Won The Match In Sudden Death"; EndGameNotify = TeamPrefix@BestTeam.TeamName@GameEndedMessage; } } for (P = Level.PawnList; P != None; P = P.nextPawn) { if (P.PlayerReplicationInfo != none) { if (P.bIsPlayer && (P.PlayerReplicationInfo.Team == BestTeam.TeamIndex)) { if (P.PlayerReplicationInfo.Score > BestP.PlayerReplicationInfo.Score) BestP = P; else if (P.PlayerReplicationInfo.Score == BestP.PlayerReplicationInfo.Score && (MyCRI.CurrentRanking[P.PlayerReplicationInfo.PlayerID] > MyCRI.CurrentRanking[BestP.PlayerReplicationInfo.PlayerID])) BestP = P; } } } if (BestP == none) { for (P = Level.PawnList; P != None; P = P.nextPawn) { if (P.PlayerReplicationInfo != none) if (P.bIsPlayer && (( BestP == None) || (P.PlayerReplicationInfo.Score > BestP.PlayerReplicationInfo.Score))) BestP = P; } } if (BestTeam == none) { i = Rand(2); BestTeam = Teams[i]; EndGameNotify = "Match Ended for Time Limit!"; } GameReplicationInfo.GameEndedComments = EndGameNotify; EndTime = Level.TimeSeconds + 3.0; for (P = Level.PawnList; P != None; P = P.nextPawn) { CalculateRanking(P); PP = PlayerPawn(P); if (PP != None) { if (!bTutorialGame && (!bEnhancedMessages)) PlayWinMessage(PP, (PP.PlayerReplicationInfo.Team == BestTeam.TeamIndex)); if (!bTutorialGame && (bEnhancedMessages)) { if (CanPlaySound(P)) { if (Teams[0].Score > Teams[1].Score) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 11); if (Teams[1].Score > Teams[0].Score) TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTTeamGameSounds', 12); } } PP.bBehindView = true; if (PP == BestP) PP.ViewTarget = None; else PP.ViewTarget = BestP; PP.ClientGameEnded(); } P.GotoState('GameEnded'); } CalcEndStats(); return true; } //------------------------------------- // CanPlaySound //------------------------------------- function bool CanPlaySound( Pawn P ) { if (P.IsA('PlayerPawn') && (P.IsA('TournamentPlayer'))) return true; else return false; } //------------------------------------- // _GetItemName //------------------------------------- function string _GetItemName(Weapon W) { return caps(mid(string(W.Class), instr(string(W.Class), ".") + 1)); } //------------------------------------- // defaultproperties //------------------------------------- C I/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTTDMSB <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTTDMSB expands TeamScoreBoard; var font MySmallFont; var EUTGameReplicationInfo MyCRI; var PlayerReplicationInfo RedPRI[32]; var PlayerReplicationInfo BluePRI[32]; var PlayerReplicationInfo SpecPRI[32]; var FontInfo _FontInfo; var bool bTimeDown, bPlayerMoved; var color SpecColor[5], GreenColor, WhiteColor, GoldColor, BlueColor, LightCyanColor, SilverColor, BronzeColor, CyanColor, RedColor, ShadeColor, DarkRedColor, DarkBlueColor; var float ScoreStart, PlayerStart, CenterBoxX, CenterBoxY, TextureSize, FillBoxX, FillBoxY, FillBoxX2, FillBoxY2, DivW, DivS, Step; var localized string MapTitleString, AuthorString, RestartString, ContinueString, GameEndedString, ElapsedTimeString, RemainingTimeString, FragGoalString, TimeLimitString, PlayerString, FragsString, DeathsString, PingString, TimeString, LossString, FPHString, MapTitleQuoteString, TeamName[2]; var texture TopSpan, BotSpan, LeftSpan, RightSpan, TopLeftCorner, TopRightCorner, BotLeftCorner, BotRightCorner, FillBoxBase, FillBoxColored, FlagIcon, PlayerDivider, Country[40]; //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { Super.PostBeginPlay(); _FontInfo = FontInfo(Spawn(Class(DynamicLoadObject(class'ChallengeHUD'.default.FontInfoClass, class'Class')))); LoadTextures(); } //------------------------------------- // LoadTextures //------------------------------------- final function LoadTextures() { MySmallFont = Font(DynamicLoadObject("EUT_Textures.EUTSmallFont", class'Font')); TopSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_T", class'Texture')); BotSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_B", class'Texture')); LeftSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_L", class'Texture')); RightSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_R", class'Texture')); FillBoxBase = Texture(DynamicLoadObject("EUT_Textures.EUT_Fill", class'Texture')); FillBoxColored = Texture(DynamicLoadObject("EUT_Textures.EUT_FillColor", class'Texture')); TopLeftCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_TL", class'Texture')); TopRightCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_TR", class'Texture')); BotLeftCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_BL", class'Texture')); BotRightCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_BR", class'Texture')); PlayerDivider = Texture(DynamicLoadObject("EUT_Textures.EUT_Divider", class'Texture')); FlagIcon = Texture(DynamicLoadObject("BotPack.GreenFlag", class'Texture')); SpecColor[0] = GreenColor; SpecColor[1] = GoldColor; SpecColor[2] = BlueColor; SpecColor[3] = RedColor; SpecColor[4] = CyanColor; MapTitleQuoteString = MapTitleQuote; } //------------------------------------- // ShowScores //------------------------------------- function ShowScores( canvas C ) { local GameReplicationInfo GRI; GRI = PlayerPawn(Owner).GameReplicationInfo; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); TeamName[0] = MyCRI.RedTeamName; TeamName[1] = MyCRI.BlueTeamName; DrawHead(C, GRI); DrawFoot(C); if (C.ClipX > 512) DrawMain(C); } //------------------------------------- // DrawMain //------------------------------------- function DrawMain(Canvas C) { local PlayerReplicationInfo PRI; local TournamentGameReplicationInfo TGRI; local PlayerPawn MyPlayer; local bool bLast; local byte i, MaxLength, MySpot; local float XL, YL, XL2, YL2, TeamLoopCount[2], DrawLength, X, Y, Mid, TempY, Length; local int NumTotal[2], TeamPing[2], TeamPacketLoss[2], NumRed, NumBlue, NumSpec; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (TGRI == None) return; NumTotal[0] = 0; NumTotal[1] = 0; ClearStoredPRI(); for (i = 0; i < 32; i++) { PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i]; if (PRI != none) { if (PRI.bIsSpectator && (!PRI.bWaitingPlayer) && (PRI.PlayerName != "Player")) { SpecPRI[NumSpec] = PRI; NumSpec++; if (NumSpec == ArrayCount(SpecPRI)) break; } else if (PRI.Team == 0) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { RedPRI[NumRed] = PRI; NumRed++; NumTotal[0]++; TeamPing[0] += MyCRI.ClientPing[PRI.PlayerID]; TeamPacketLoss[0] += PRI.PacketLoss; if (NumRed == ArrayCount(RedPRI)) break; } } else if (PRI.Team == 1) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { BluePRI[NumBlue] = PRI; NumBlue++; NumTotal[1]++; TeamPing[1] += MyCRI.ClientPing[PRI.PlayerID]; TeamPacketLoss[1] += PRI.PacketLoss; if (NumBlue == ArrayCount(BluePRI)) break; } } } } SortScoresRed(NumRed); SortScoresBlue(NumBlue); if (C.ClipX < 1100) { TextureSize = 2; Mid = 24; TopSpan.DrawScale = 0.50; BotSpan.DrawScale = 0.50; LeftSpan.DrawScale = 0.50; RightSpan.DrawScale = 0.50; TopLeftCorner.DrawScale = 0.50; TopRightCorner.DrawScale = 0.50; BotLeftCorner.DrawScale = 0.50; BotRightCorner.DrawScale = 0.50; PlayerStart = C.CliPY/7 + TextureSize + 24; } else { TextureSize = 4; Mid = 32; TopSpan.DrawScale = 1; BotSpan.DrawScale = 1; LeftSpan.DrawScale = 1; RightSpan.DrawScale = 1; TopLeftCorner.DrawScale = 1; TopRightCorner.DrawScale = 1; BotLeftCorner.DrawScale = 1; BotRightCorner.DrawScale = 1; PlayerStart = C.CliPY/7 + TextureSize + 32; } bPlayerMoved = false; if (NumRed >= NumBlue) MaxLength = NumRed; else MaxLength = NumBlue; Length = GetYOffset(C); DrawLength = MaxLength * Length; if (DrawLength > C.ClipY - PlayerStart) { TempY = DrawLength; MySpot = MaxLength; while (TempY > C.ClipY - PlayerStart) { MySpot = MySpot - 1; TempY = MySpot * Length; } MoveToVisible(PlayerPawn(Owner).PlayerReplicationInfo, MySpot - 1, NumRed, NumBlue); } FillBoxX = C.ClipX / 2 - Mid - TextureSize - C.ClipX / 8; FillBoxY = C.ClipY / 7 - TextureSize - C.ClipY / 10; CenterBoxY = FillBoxY / 2 + TextureSize; CenterBoxX = FillBoxX / 2 + TextureSize; DivW = FillBoxX * 0.8; DivS = DivW / 256; X = C.ClipX / 8; FillBoxX2 = FillBoxX; if (NumRed >= 0) { C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X, C.ClipY / 10); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos(C.ClipX / 2 - Mid, C.ClipY / 10); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, C.ClipY / 10); C.DrawRect(TopSpan, FillBoxX, TextureSize); C.SetPos(X, C.ClipY / 7); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos(C.ClipX / 2 - Mid, C.ClipY / 7); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, C.ClipY / 7); C.DrawRect(BotSpan, FillBoxX, TextureSize); C.SetPos(X, C.ClipY / 10 + TextureSize); C.DrawRect(LeftSpan, TextureSize, FillBoxY); C.SetPos(C.ClipX / 2 - Mid, C.ClipY / 10 + TextureSize); C.DrawRect(RightSpan, TextureSize, FillBoxY); C.DrawColor = ShadeColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize, C.ClipY / 10 + TextureSize); C.DrawRect(FillBoxBase, FillBoxX, FillBoxY); if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.DrawColor = RedColor; C.Style = ERenderStyle.STY_Normal; C.StrLen(TeamName[0], XL, YL); C.SetPos(X + CenterBoxX - (XL / 2), C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText(TeamName[0],false); C.StrLen(int(TGRI.Teams[0].score), XL, YL); C.SetPos(C.ClipX / 2 - Mid - TextureSize - XL, C.ClipY/10 + CenterBoxY - (YL / 2)); C.DrawText(int(TGRI.Teams[0].score),false); C.Font = MySmallFont; C.DrawColor = WhiteColor; C.StrLen("#######", XL, YL); C.SetPos(X + (TextureSize * 2), C.ClipY / 10 + CenterBoxY - (YL)); C.DrawText("Ping:", false); C.SetPos(X + (TextureSize * 2) + XL, C.ClipY / 10 + CenterBoxY - (YL)); C.DrawText(TeamPing[0] / NumTotal[0], false); C.SetPos(X + (TextureSize * 2), C.ClipY / 10 + CenterBoxY); C.DrawText("Loss:", false); C.SetPos(X + (TextureSize * 2) + XL, C.ClipY / 10 + CenterBoxY); C.DrawText(TeamPacketLoss[0] / NumTotal[0], false); C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X, PlayerStart); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos(C.ClipX / 2 - Mid, PlayerStart); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, PlayerStart); C.DrawRect(TopSpan, FillBoxX2, TextureSize); C.SetPos(X, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos(C.ClipX / 2 - Mid, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotSpan, FillBoxX2, TextureSize); C.SetPos(X, PlayerStart + TextureSize); C.DrawRect(LeftSpan, TextureSize, DrawLength); C.SetPos(C.ClipX / 2 - Mid, PlayerStart + TextureSize); C.DrawRect(RightSpan, TextureSize, DrawLength); C.DrawColor = DarkRedColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize, PlayerStart + TextureSize); C.DrawRect(FillBoxBase, FillBoxX, DrawLength); C.SetPos(X + TextureSize, PlayerStart + TextureSize); C.Style = ERenderStyle.STY_Translucent; C.DrawRect(FillBoxColored, FillBoxX, DrawLength); } for (i = 0; i < NumRed; i++) { Y = PlayerStart + (TextureSize * 4) + (GetYOffset(C) * TeamLoopCount[0]); if (i == 0) { Y = PlayerStart + (TextureSize * 4); bLast = false; } if (i == NumRed - 1) bLast = true; DrawPlayerData(C, RedPRI[i], X, Y, bLast); TeamLoopCount[0] += 1; } if (NumBlue >= 0) { X = C.ClipX/2 + Mid; C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X, C.ClipY / 10); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize + FillBoxX, C.ClipY / 10); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, C.ClipY / 10); C.DrawRect(TopSpan, FillBoxX, TextureSize); C.SetPos(X, C.ClipY / 7); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize + FillBoxX, C.ClipY / 7); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, C.ClipY / 7); C.DrawRect(BotSpan, FillBoxX, TextureSize); C.SetPos(X, C.ClipY / 10 + TextureSize); C.DrawRect(LeftSpan, TextureSize, FillBoxY); C.SetPos(X + TextureSize + FillBoxX, C.ClipY / 10 + TextureSize); C.DrawRect(RightSpan, TextureSize, FillBoxY); C.DrawColor = ShadeColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize, C.ClipY / 10 + TextureSize); C.DrawRect(FillBoxBase, FillBoxX, FillBoxY); C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.DrawColor = BlueColor; C.Style = ERenderStyle.STY_Normal; C.StrLen(TeamName[1], XL, YL); C.SetPos(X + CenterBoxX - (XL / 2), C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText(TeamName[1], false); C.StrLen(int(TGRI.Teams[1].score), XL, YL); C.SetPos(X + FillBoxX - XL, C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText(int(TGRI.Teams[1].score), false); C.Font = MySmallFont; C.DrawColor = WhiteColor; C.StrLen("#######", XL, YL); C.SetPos(X + (TextureSize * 2), C.ClipY / 10 + CenterBoxY - (YL)); C.DrawText("Ping:", false); C.SetPos(X + (TextureSize * 2) + XL, C.ClipY / 10 + CenterBoxY - (YL)); C.DrawText(TeamPing[1]/NumTotal[1], false); C.SetPos(X + (TextureSize * 2), C.ClipY / 10 + CenterBoxY); C.DrawText("Loss:", false); C.SetPos(X + (TextureSize * 2) + XL, C.ClipY / 10 + CenterBoxY); C.DrawText(TeamPacketLoss[1]/NumTotal[1], false); C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X, PlayerStart); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize + FillBoxX, PlayerStart); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, PlayerStart); C.DrawRect(TopSpan, FillBoxX2, TextureSize); C.SetPos(X, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize + FillBoxX, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotSpan, FillBoxX2, TextureSize); C.SetPos(X, PlayerStart + TextureSize); C.DrawRect(LeftSpan, TextureSize, DrawLength); C.SetPos(X + TextureSize + FillBoxX, PlayerStart + TextureSize); C.DrawRect(RightSpan, TextureSize, DrawLength); C.DrawColor = DarkBlueColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize, PlayerStart + TextureSize); C.DrawRect(FillBoxBase, FillBoxX, DrawLength); C.SetPos(X + TextureSize, PlayerStart + TextureSize); C.Style = ERenderStyle.STY_Translucent; C.DrawRect(FillBoxColored, FillBoxX, DrawLength); } for (i = 0; i < NumBlue; i++) { Y = PlayerStart + (TextureSize * 4) + (GetYOffset(C) * TeamLoopCount[1]); if (i == 0) { Y = PlayerStart + (TextureSize * 4); bLast = false; } if (i == NumBlue - 1) bLast = true; DrawPlayerData(C, BluePRI[i], X, Y, bLast); TeamLoopCount[1] += 1; } for (i = 0; i < NumSpec; i++) { C.Font = C.smallfont; C.StrLen(SpecPRI[i].PlayerName, XL, YL); Y = C.ClipY / 2 + YL +(YL * i); X = C.ClipX - XL; if ( i == 0 ) Y = C.ClipY / 2 + YL; DrawSpecs(C,SpecPRI[i],X,Y,i); } C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Normal; C.Font = C.smallfont; C.StrLen("Spectators", XL, YL); C.SetPos(C.ClipX - XL, C.ClipY / 2); C.DrawText("Spectators", false); } //------------------------------------- // DrawPlayerData //------------------------------------- function DrawPlayerData(Canvas C, PlayerReplicationInfo PRI, float X, float Y, bool bLast) { local float XL, YL, XL2, YL2, XL3, YL3, FX; local bool bAdmin; local PlayerPawn MyPlayer; local float PlayerY; local int Time, eff, pid; local Font CanvasFont; local string Location; local color CanvasColor; bAdmin = PRI.bAdmin; MyPlayer = PlayerPawn(Owner); C.Style = ERenderStyle.STY_Normal; pid = PRI.PlayerID; if (PRI.Team == MyPlayer.PlayerReplicationInfo.Team) { if (PRI.PlayerLocation != none) Location = PRI.PlayerLocation.LocationName; else if (PRI.PlayerZone != None) Location = PRI.PlayerZone.ZoneName; else Location = ""; if (Location != "") Location = "Location:"@Location; } if (PRI.HasFlag != none && (PRI.HasFlag.IsA('EUTReadyFlag'))) { C.DrawColor = GreenColor; C.Style = ERenderStyle.STY_Normal; C.SetPos(X - 32, Y); C.DrawIcon(Texture'Botpack.Icons.GreenFlag', 1.00); } if (PRI.Team == 0) C.DrawColor = RedColor; if (PRI.Team == 1) C.Drawcolor = BlueColor; if (PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName) C.DrawColor = GoldColor; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticSmallFont(1000); CanvasFont = C.Font; CanvasColor = C.DrawColor; FX = X + (TextureSize * 2); C.StrLen(PRI.PlayerName,XL, PlayerY); if (MyCRI.bIpToCountry) { if (caps(MyCRI.IPCTexture[pid]) == "NONE" && (!MyPlayer.IsA('Bot'))) MyCRI.IPCTexture[pid] = "us"; if (MyCRI.IPCTexture[pid] != "" && caps(MyCRI.IPCTexture[pid]) != "NONE") { if (Country[pid] == none) Country[pid] = Texture(DynamicLoadObject(MyCRI.IpToCountryTexturePackage$"."$MyCRI.IPCTexture[pid], class'Texture')); else { if (_GetTextureName(string(Country[pid])) != caps(MyCRI.IPCTexture[pid])) Country[pid] = Texture(DynamicLoadObject(MyCRI.IpToCountryTexturePackage$"."$MyCRI.IPCTexture[pid], class'Texture')); C.SetPos(FX,Y); C.bNoSmooth = false; C.DrawColor = WhiteColor; C.DrawIcon(Country[pid],1.0); C.bNoSmooth = true; FX = FX + Country[pid].USize + (Step*2); } } } C.DrawColor = CanvasColor; C.SetPos(FX, Y); C.DrawText(PRI.PlayerName, false); if (bAdmin) { C.Font = MySmallFont; C.StrLen("admin", XL3, YL3); C.SetPos(X - XL3 - TextureSize, Y); C.DrawText("admin", false); C.Font = CanvasFont; } else if (!bAdmin && bPlayerMoved && PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName) { C.Font = MySmallFont; C.StrLen("more>>", XL3, YL3); C.SetPos(X - XL3 - TextureSize, Y); C.DrawText("more>>", false); C.Font = CanvasFont; } C.StrLen(string(int(PRI.Score)), XL, YL); C.SetPos(X + FillBoxX - XL, Y); C.DrawText(int(PRI.Score), False); if (C.ClipX > 512) { C.DrawColor = WhiteColor; C.Font = _FontInfo.GetSmallestFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallestFont(900); if (C.ClipX < 900) C.Font = MySmallFont; C.StrLen("#########", XL2, YL2); //Align Numbers if (!bLast) { C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize + (FillBoxX / 2) - (DivW / 2), Y + PlayerY + (YL2 * 1)); C.DrawIcon(PlayerDivider, DivS); C.DrawColor = GoldColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X + TextureSize + (FillBoxX / 2) - (DivW / 2), Y + PlayerY + (YL2 * 1)); C.DrawIcon(PlayerDivider, DivS); } Time = Max(1, (Level.TimeSeconds + MyPlayer.PlayerReplicationInfo.StartTime - PRI.StartTime) / 60); C.DrawColor = LightCyanColor; C.Style = ERenderStyle.STY_Normal; C.Font = MySmallFont; if (C.ClipX < 700) C.Font = _FontInfo.GetStaticAReallySmallFont(900); if (MyCRI.bScoreBoardEff) { eff = Clamp(int((float(MyCRI.TotalKills[PRI.PlayerID]) / float(MyCRI.TotalKills[PRI.PlayerID] + MyCRI.TotalDeaths[PRI.PlayerID])) * 100), 0, 100); C.StrLen("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss@"Eff:"@eff, XL, YL); C.SetPos(X + FillBoxX - XL, Y + PlayerY + (YL2 * 1) - YL); C.DrawText("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss@"Eff:"@eff, false); } else { C.StrLen("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss, XL, YL); C.SetPos(X + FillBoxX - XL, Y + PlayerY + (YL2 * 1) - YL); C.DrawText("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss, false); } C.DrawColor = LightCyanColor; C.SetPos(X + (TextureSize*2), Y + PlayerY + (YL2 * 1) - YL); C.DrawText(Location, false); } } //------------------------------------- // DrawHead //------------------------------------- function DrawHead(canvas C, GameReplicationInfo GRI) { local float XL, YL, XL2, YL2; local font CanvasFont; C.DrawColor = WhiteColor; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.bCenter = True; C.StrLen("Test", XL, YL); ScoreStart = 58.0 / 768.0 * C.ClipY - 50; CanvasFont = C.Font; if (GRI.GameEndedComments != "") { C.DrawColor = GoldColor; C.SetPos(0, 0 + YL); C.DrawText(GRI.GameEndedComments, True); } else { C.SetPos(0, ScoreStart); DrawEndGame(C); } C.bCenter = False; C.Font = CanvasFont; } //------------------------------------- // DrawEndGame //------------------------------------- function DrawEndGame(Canvas C) { local TournamentGameReplicationInfo TGRI; local float XL, YL, YL2; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (TGRI == None) return; C.SetPos(0, 0); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.DrawText(TGRI.GameName); C.StrLen("Test", XL, YL); C.SetPos(0, 0 + YL); YL2 = C.CurY - YL; if (TGRI.GoalTeamScore > 0) { C.SetPos(0, 0 + YL); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.DrawText(TGRI.GoalTeamScore$" Points or "$TGRI.TimeLimit@"Min"); C.StrLen("Test", XL, YL); C.SetPos(0, C.CurY - YL); } } //------------------------------------- // DrawFoot //------------------------------------- function DrawFoot(canvas C) { local byte Hours, Minutes, Seconds; local float XL, YL; local PlayerPawn MyPlayer; C.bCenter = true; C.Font = _FontInfo.GetSmallFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticSmallestFont(C.ClipX); C.StrLen("Test", XL, YL); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; MyPlayer = PlayerPawn(Owner); C.SetPos(0, C.ClipY - 2 * YL * 1.5); if ((Level.NetMode == NM_Standalone) && Level.Game.IsA('DeathMatchPlus')) { if ( DeathMatchPlus(Level.Game).bRatedGame ) C.DrawText(DeathMatchPlus(Level.Game).RatedGameLadderObj.SkillText@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MapTitleQuoteString$Level.Title$MapTitleQuoteString, true); else if ( DeathMatchPlus(Level.Game).bNoviceMode ) C.DrawText(class'ChallengeBotInfo'.default.Skills[Level.Game.Difficulty]@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MapTitleQuoteString$Level.Title$MapTitleQuoteString, true); else C.DrawText(class'ChallengeBotInfo'.default.Skills[Level.Game.Difficulty + 4]@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MapTitleQuoteString$Level.Title$MapTitleQuoteString, true); } else { C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.SetPos(0, C.ClipY - 2 * YL * 1.5); C.DrawText(MyPlayer.GameReplicationInfo.GameName@MapTitleString@Level.Title, true); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.SetPos(0, C.ClipY - 2 * YL); C.DrawText(MyPlayer.GameReplicationInfo.ServerName$" - "$GetTime(), true); C.SetPos(0, C.ClipY - YL); } if (bTimeDown || (MyPlayer.GameReplicationInfo.RemainingTime > 0)) { bTimeDown = true; if (MyPlayer.GameReplicationInfo.RemainingTime <= 0) C.DrawText(RemainingTimeString@"00:00", true); else { Minutes = MyPlayer.GameReplicationInfo.RemainingTime/60; Seconds = MyPlayer.GameReplicationInfo.RemainingTime % 60; C.DrawText(RemainingTimeString@TwoDigitString(Minutes)$":"$TwoDigitString(Seconds), true); } } else { Seconds = MyPlayer.GameReplicationInfo.ElapsedTime; Minutes = Seconds / 60; Hours = Minutes / 60; Seconds = Seconds - (Minutes * 60); Minutes = Minutes - (Hours * 60); C.DrawText(ElapsedTimeString@TwoDigitString(Hours)$":"$TwoDigitString(Minutes)$":"$TwoDigitString(Seconds), true); } if (MyPlayer.GameReplicationInfo.GameEndedComments != "") { C.bCenter = true; C.StrLen("Test", XL, YL); C.SetPos(0, C.ClipY - Min(YL*6, C.ClipY * 0.1)); C.DrawColor = GreenColor; if (Level.NetMode == NM_Standalone) C.DrawText(GameEndedString@ContinueString, true); else C.DrawText(GameEndedString, true); } else if ((MyPlayer != None) && (MyPlayer.Health <= 0)) { C.bCenter = true; C.StrLen("Test", XL, YL); C.SetPos(0, C.ClipY - Min(YL * 6, C.ClipY * 0.1)); C.DrawColor = SilverColor; C.DrawText(RestartString, true); } C.bCenter = false; C.Font = C.smallfont; C.DrawColor.R = 120; C.DrawColor.G = 120; C.DrawColor.B = 120; C.Setpos(C.ClipX - 80, C.ClipY - 20); C.DrawText("AutoSS:"@MyCRI.bAutoShot); } //------------------------------------- // SortScoresRed //------------------------------------- function SortScoresRed(byte pc) { local byte i, j, Max; local PlayerReplicationInfo TempPRI; for ( i = 0; i < pc - 1; i++ ) { Max = i; for ( j = i + 1; j < pc; j++ ) { if ( RedPRI[j].Score > RedPRI[Max].Score ) Max = j; else if ((RedPRI[j].Score == RedPRI[Max].Score) && (RedPRI[j].Deaths < RedPRI[Max].Deaths)) Max = j; else if ((RedPRI[j].Score == RedPRI[Max].Score) && (RedPRI[j].Deaths == RedPRI[Max].Deaths) &&(RedPRI[j].PlayerID < RedPRI[Max].Score)) Max = j; } TempPRI = RedPRI[Max]; RedPRI[Max] = RedPRI[i]; RedPRI[i] = TempPRI; } } //------------------------------------- // SortScoresBlue //------------------------------------- function SortScoresBlue(byte pc) { local byte i, j, Max; local PlayerReplicationInfo TempPRI; for ( i = 0; i < pc - 1; i++ ) { Max = i; for ( j = i + 1; j < pc; j++ ) { if ( BluePRI[j].Score > BluePRI[Max].Score ) Max = j; else if ((BluePRI[j].Score == BluePRI[Max].Score) && (BluePRI[j].Deaths < BluePRI[Max].Deaths)) Max = j; else if ((BluePRI[j].Score == BluePRI[Max].Score) && (BluePRI[j].Deaths == BluePRI[Max].Deaths) &&(BluePRI[j].PlayerID < BluePRI[Max].Score)) Max = j; } TempPRI = BluePRI[Max]; BluePRI[Max] = BluePRI[i]; BluePRI[i] = TempPRI; } } //------------------------------------- // GetTime //------------------------------------- simulated function string GetTime() { local string amPm, mon, day, min; local byte hour; local PlayerPawn MyPlayer; MyPlayer = PlayerPawn(Owner); min = string(MyPlayer.level.minute); if (int(min) < 10) min = "0" $ min; if (MyPlayer.level.hour >= 12) amPm = "PM"; else amPm = "AM"; if (MyPlayer.level.hour > 12) hour = MyPlayer.level.hour - 12; else if (MyPlayer.level.hour == 0) hour = 12; else hour = MyPlayer.level.hour; switch (MyPlayer.level.month) { case 1: mon = "Jan"; break; case 2: mon = "Feb"; break; case 3: mon = "Mar"; break; case 4: mon = "Apr"; break; case 5: mon = "May"; break; case 6: mon = "Jun"; break; case 7: mon = "Jul"; break; case 8: mon = "Aug"; break; case 9: mon = "Sep"; break; case 10: mon = "Oct"; break; case 11: mon = "Nov"; break; case 12: mon = "Dec"; break; } switch (MyPlayer.level.dayOfWeek) { case 0: day = "Sunday"; break; case 1: day = "Monday"; break; case 2: day = "Tuesday"; break; case 3: day = "Wednesday"; break; case 4: day = "Thursday"; break; case 5: day = "Friday"; break; case 6: day = "Saturday"; break; } return hour $ ":" $ min @ amPM $ " , " $ day $ ", " $ mon @ MyPlayer.level.day $ ", " $ MyPlayer.level.year; } //------------------------------------- // TwoDigitString //------------------------------------- function string TwoDigitString(int i) { if (i < 10) return "0"$i; else return string(i); } //------------------------------------- // GetYOffset //------------------------------------- function float GetYOffset(Canvas C) { local float XL, YL, YL2, YL3; local float buf, div; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticSmallFont(1000); C.StrLen("TEST", XL, YL); C.Font = MySmallFont; if (C.ClipX < 700) C.Font = _FontInfo.GetStaticAReallySmallFont(900); C.StrLen("TEST", XL, YL2); if (C.ClipX > 1100) { buf = 15; div = 4; } else { buf = 5; div = 2; } C.StrLen("#",XL,YL3); Step = XL; return YL + (YL2 * 1) + (buf * 1.5) + div; } //------------------------------------- // DrawSpecs //------------------------------------- function DrawSpecs(Canvas C, PlayerReplicationInfo PRI, float X, float Y, int cid) { local float XL, YL; if (cid > 5) cid = cid - 6; C.DrawColor = SpecColor[cid]; C.Style = ERenderStyle.STY_Normal; C.Font = C.smallfont; C.SetPos(X,Y); C.DrawText(PRI.PlayerName,false); } //------------------------------------- // ClearStoredPRI //------------------------------------- function ClearStoredPRI() { local int i; for (i = 0; i < ArrayCount(RedPRI); i++) RedPRI[i] = None; for (i = 0; i < ArrayCount(BluePRI); i++) BluePRI[i] = None; for (i = 0; i < ArrayCount(SpecPRI); i++) SpecPRI[i] = None; } //------------------------------------- // _GetTextureName //------------------------------------- function string _GetTextureName(string T) { return caps(mid(T, instr(T, ".") + 1)); } //------------------------------------- // MoveToVisible //------------------------------------- function MoveToVisible(PlayerReplicationInfo MyPRI, byte MySpot, byte Red, byte Blue) { local int i; local PlayerReplicationInfo SwitchPRI; switch (MyPRI.Team) { case 0: for (i=0; i MySpot) { SwitchPRI = RedPRI[MySpot]; RedPRI[MySpot] = MyPRI; RedPRI[i] = SwitchPRI; bPlayerMoved = true; break; } } break; case 1: for (i=0; i MySpot) { SwitchPRI = BluePRI[MySpot]; BluePRI[MySpot] = MyPRI; BluePRI[i] = SwitchPRI; bPlayerMoved = true; break; } } break; } } //------------------------------------- // defaultproperties //------------------------------------- l/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTTDMReplicationInfo <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTTDMReplicationInfo expands TournamentGameReplicationInfo; //------------------------------------- // defaultproperties //------------------------------------- z=R 6{=o!2;(T$@@t=B>}RiW}aY}?L}h-}}?L}h aD}?}h /D}-'}aTest`/U"q hB@D}?,2X"}{S"}O}U"}aS"'}q T}}-(}X" F/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTTDMHud <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTTDMHud extends ChallengeTeamHUD; var TournamentGameReplicationInfo TGRI; var EUTGameReplicationInfo MyCRI; var DeathMatchPlus DMP; var EUTHudSettings HudSettings; var Pawn P; var PlayerReplicationInfo PRI; var private PlayerReplicationInfo StoredPRI[32]; var private PlayerReplicationInfo MyPRI; var private GameReplicationInfo StoredGRI; var EUTStatInfo StatInfo; var EUTHudHelper HudHelper; var private PlayerPawn MyPlayer; var font MySmallFont; var class StatInfoClass; var class HudHelperClass; var bool bWarmupSwitch, bStartMessage, bUdemo; var byte RedTeamSize, BlueTeamSize, RequestHitsounds; var color BlueColor, RedColor; var float PreBaseEye; var string RedFlagCarrierLocation, BlueFlagCarrierLocation, StartMessage, LastEventMessage; var texture TimeBack, PingBack, TeamBack, AccuracyBack, AccuracyBackRifle, AccuracyBackShock, EUTElements, Badge; //------------------------------------- // PostBeginPlay //------------------------------------- simulated function PostBeginPlay() { SetTimer(1.0, True); if (ServerInfo == none) ServerInfo = Spawn(ServerInfoClass, Owner); if (StatInfo == none) StatInfo = Spawn(StatInfoClass, Owner); if (HudHelper == none) HudHelper = Spawn(HudHelperClass,Owner); if (MyFonts == none) MyFonts = FontInfo(Spawn(Class(DynamicLoadObject(FontInfoClass, class'Class')))); InitializeHudSettings(); LoadTextures(); SetDefaults(0); if (Level.NetMode != NM_Standalone) MOTDFadeOutTime = 350; FaceAreaOffset = -64; if ((PlayerPawn(Owner).GameReplicationInfo != None) && (PlayerPawn(Owner).GameReplicationInfo.RemainingTime > 0)) TimeMessageClass = class(DynamicLoadObject("BotPack.TimeMessage", class'Class')); MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); } //------------------------------------- // InitializeHudSettings //------------------------------------- simulated final function InitializeHudSettings() { if (HudSettings == none) { HudSettings = EUTHudSettings(Spawn(Class(DynamicLoadObject("EUTSource.EUTHudSettings",class'class')))); if (HudSettings != none) { HudSettings.MyPlayer = PlayerPawn(Owner); HudSettings.HS = HudSettings; HudSettings.SaveConfig(); } } } //------------------------------------- // LoadTextures //------------------------------------- simulated final function LoadTextures() { TimeBack = texture(DynamicLoadObject("EUT_Textures.Timeback", class'Texture')); PingBack = texture(DynamicLoadObject("EUT_Textures.PingDisplay", class'Texture')); TeamBack = texture(DynamicLoadObject("EUT_Textures.TeamBack", class'Texture')); AccuracyBack = Texture(DynamicLoadObject("EUT_Textures.EUTAccBack", class'Texture')); AccuracyBackRifle = Texture(DynamicLoadObject("EUT_Textures.EUTAccBackRifle", class'Texture')); AccuracyBackShock = Texture(DynamicLoadObject("EUT_Textures.EUTAccBackShock", class'Texture')); EUTElements = Texture(DynamicLoadObject("EUT_Textures.EUT_Elements", class'Texture')); Badge = Texture(DynamicLoadObject("EUT_Textures.EUT_Badge", class'Texture')); MySmallFont=Font(DynamicLoadObject("EUT_Textures.EUTSmallFont", class'Font')); } //------------------------------------- // SetDefaults //------------------------------------- simulated final function SetDefaults(byte c) { switch (c) { case 0: HudHelper.ResetWeaponData(); break; case 1: HudHelper.ResetWeaponData(); HudHelper.StageCount = 1; HudHelper.WeaponDrawOffset = 0; if(MyCRI != none) MyCRI.MouseYSetting = 100; break; } } //------------------------------------- // Timer //------------------------------------- function Timer() { super(ChallengeHUD).Timer(); if ((PlayerOwner == None) || (PawnOwner == None)) return; if (PlayerPawn(Owner).PlayerReplicationInfo == none) return; if (MyCRI == none) { MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); MyCRI.MouseYSetting = 100; } else { MyCRI.ClientCrosshair = Crosshair; MyCRI.ClientCrosshairTexture = CrossHairTextures[Crosshair]; if (!HudHelper.bCheckKeyBindings) HudHelper.CheckKeyBindings(); MyCRI.MouseYRefCount = HudHelper.MouseYCount; MyCRI.RequestHitsounds = RequestHitsounds; MyCRI.WeaponAccuracy.Enforcer = HudHelper.Acc.Enforcer; MyCRI.WeaponAccuracy.BioGun = HudHelper.Acc.BioGun; MyCRI.WeaponAccuracy.ShockRifle = HudHelper.Acc.ShockRifle; MyCRI.WeaponAccuracy.PulseGun = HudHelper.Acc.PulseGun; MyCRI.WeaponAccuracy.Ripper = HudHelper.Acc.Ripper; MyCRI.WeaponAccuracy.MiniGun = HudHelper.Acc.MiniGun; MyCRI.WeaponAccuracy.FlakCannon = HudHelper.Acc.FlakGun; MyCRI.WeaponAccuracy.EightBall = HudHelper.Acc.EightBall; MyCRI.WeaponAccuracy.SniperRifle = HudHelper.Acc.SniperRifle; MyCRI.WeaponAccuracy.SuperShockRifle = HudHelper.Acc.SuperShockRifle; MyCRI.WeaponAccuracy.CustomWeapon = HudHelper.Acc.CustomWeapon; MyCRI.bJumpBoots = HudSettings.bJumpBoots; if (!HudHelper.bSetMessageDefaults) HudHelper.SetMessageDefaults(1); if (!bWarmupSwitch && MyCRI.bWarmupSwitch) { bWarmupSwitch = true; SetDefaults(1); if (!HudHelper.bCheckForAutoRecorder && MyCRI.bTournament && MyCRI.bMatchStarted) HudHelper.CheckForAutoRecorder(PlayerPawn(Owner), HudSettings.AutoRecorder); } if (!HudHelper.bCheckForAutoRecorder && !MyCRI.bTournament && MyCRI.bMatchStarted) HudHelper.CheckForAutoRecorder(PlayerPawn(Owner), HudSettings.AutoRecorder); MyCRI.TextureCounter++; if (MyCRI.TextureCounter == 2) { MyCRI.TextureCounter = 0; switch (MyCRI.TextureSwitch) { case 0: MyCRI.TextureSwitch = 1; break; case 1: MyCRI.TextureSwitch = 0; break; } } if (MyCRI.PlayWaitMessage[PlayerPawn(Owner).PlayerReplicationInfo.PlayerID] == 1) PlayerOwner.ReceiveLocalizedMessage(class'EUTHudMessages', 17); } TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (TGRI == None) return; RedTeamSize = TGRI.Teams[0].Size; BlueTeamSize = TGRI.Teams[1].Size; RequestHitsounds = HudSettings.HitSounds; if (HudHelper.DelayDataClear < 20) HudHelper.DelayDataClear++; if (PlayerPawn(Owner).PlayerReplicationInfo.bIsSpectator) return; if (PlayerPawn(Owner).GameReplicationInfo != none) { MyCRI.bAutoShot = HudSettings.bAutoShot; if (PlayerPawn(Owner).GameReplicationInfo.GameEndedComments != "") { HudHelper.ScreenShotDelay++; if (HudHelper.ScreenShotDelay >= 6 && PlayerPawn(Owner).IsInState('GameEnded')) { HudHelper.StopDemo(PlayerPawn(Owner)); if (!HudHelper.bScreenShotTaken && HudSettings.bAutoShot) { HudHelper.bScreenShotTaken = True; PlayerPawn(Owner).ConsoleCommand("sshot"); PlayerPawn(Owner).ClientMessage("Auto ScreenShot Taken"); } } } } } //------------------------------------- // PreRender //------------------------------------- simulated event PreRender(Canvas C) { local byte i; MyPlayer = PlayerPawn(Owner); if (HudHelper != none) bUdemo = HudHelper.IsUdemoSpectator(PlayerOwner); if(MyPlayer != none && HudHelper != none) HudHelper.FixPhysics(MyPlayer); if (MyCRI != none) { for (i=0; i 10)) { if (MyPlayer.LineOfSightTo(P)) { P.NetPriority = 2.0; P.NetUpdateFrequency = 100.0; } else { P.NetPriority = HudHelper.NetAdjustment(2.0, HudSettings.nLevel); P.NetUpdateFrequency = HudHelper.NetAdjustment(100.0, HudSettings.nLevel); } } if (P.PlayerReplicationInfo != none && (P.PlayerReplicationInfo.Team == MyPlayer.PlayerReplicationInfo.Team)) { if (MyPlayer.LineOfSightTo(P) && (HudHelper.StageCount > 25)) { P.NetPriority = 2.0; P.NetUpdateFrequency = 100.0; if (P.Health > 0 && (HudSettings.bTeamBeacon) && (MyCRI.bTeamBeacon)) HudHelper.DrawBeacon(C,P,0); } else { P.NetPriority = HudHelper.NetAdjustment(2.0, HudSettings.nLevel); P.NetUpdateFrequency = HudHelper.NetAdjustment(100.0, HudSettings.nLevel); } } if (P.LightType == LT_Steady) { P.AmbientGlow = 254; P.LightRadius = 0; P.LightEffect = LE_NonIncidence; P.LightRadius = 6; } else { P.LightRadius = 0; P.AmbientGlow = 17; P.LightEffect = LE_None; P.LightRadius = 0; } P.bUnlit = false; P.ScaleGlow = 1.0; P.SoundRadius = 9; if (P.Texture != Texture'S_Pawn' && P.Texture != Texture'unrealshare.Belt_fx.Invis') P.Texture = Texture'S_Pawn'; } } } } } if (HudHelper.StageCount > 25) { C.Style = Style; if (!PlayerOwner.bBehindView && (PawnOwner.Weapon != None) && (Level.LevelAction == LEVACT_None) && (!PlayerOwner.bShowScores) && (!bForceScores) && (!bShowInfo) && (!HudHelper.bShowStats)) HudHelper.DrawReticle(C, MyPlayer, HudSettings.NewScopeTexture, HudSettings.ScopeMode, CrosshairColor, HudSettings.DotColor); HudHelper.ResetScope(MyPlayer); } if (HudHelper.StageCount < 30) HudHelper.StageCount++; if (MyPlayer.Health <= 0) HudHelper.ResetAmmoCount(); if (bHideFrags) { HudHelper.WeaponDrawOffset = 0; if (!bHideAllWeapons && (HudScale * WeaponScale * C.ClipX >= C.ClipX - 256 * Scale)) HudHelper.WeaponDrawOffset = 63.5; } else { HudHelper.WeaponDrawOffset = 63.5; if (bHideAllWeapons) HudHelper.WeaponDrawOffset = 0; else if (HudScale * WeaponScale * C.ClipX >= C.ClipX - 256 * Scale) HudHelper.WeaponDrawOffset = 127.0; } if (PlayerOwner.Weapon != none) { HudHelper.StatInfo.Accuracy = HudHelper.GetAccuracy(PlayerOwner.PlayerReplicationInfo.PlayerID, PlayerOwner.Weapon); HudHelper.StatInfo.Effeciency = Clamp(int((float(MyCRI.TotalKills[PlayerOwner.PlayerReplicationInfo.PlayerID]) / float(MyCRI.TotalKills[PlayerOwner.PlayerReplicationInfo.PlayerID] + MyCRI.TotalDeaths[PlayerOwner.PlayerReplicationInfo.PlayerID])) * 100), 0, 100); } if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (HudHelper.bShowTeamInfo) && (!bShowInfo) && (!HudHelper.bShowStats)) HudHelper.RenderInfo(C); if (HudHelper.bShowStats) { StatInfo.RenderInfo(C); return; } if (HudHelper.bDebugLoad) HudHelper.ParseLoad(C); super(ChallengeHUD).PostRender(C); } //------------------------------------- // DrawStatus //------------------------------------- simulated function DrawStatus(Canvas C) { local float StatScale, ChestAmount, ThighAmount, H1, H2, X, Y, DamageTime, TempX, TexX, TexY; Local int ArmorAmount,CurAbs,i, Ping; Local inventory Inv,BestArmor; local bool bChestArmor, bShieldbelt, bThighArmor, bJumpBoots, bHasDoll; local Bot BotOwner; local TournamentPlayer TPOwner; local texture Doll, DollBelt; local byte BootCharges, TimeX; local string Time, s; local byte CanvasStyle; local byte acc; local int eff; if (MyCRI == None || HudSettings == none || HudHelper == None) return; ArmorAmount = 0; CurAbs = 0; i = 0; BestArmor = None; TimeX = 1; for (Inv = PawnOwner.Inventory; Inv != None; Inv = Inv.Inventory) { if (Inv.bIsAnArmor) { if (Inv.IsA('UT_Shieldbelt')) bShieldbelt = true; else if (Inv.IsA('Thighpads')) { ThighAmount += Inv.Charge; bThighArmor = true; } else { bChestArmor = true; ChestAmount += Inv.Charge; } ArmorAmount += Inv.Charge; } else if (Inv.IsA('UT_JumpBoots')) { bJumpBoots = true; BootCharges = Inv.Charge; } else { i++; if (i > 100) break; } } if (!bHideStatus) { TPOwner = TournamentPlayer(PawnOwner); if (C.ClipX < 400) bHasDoll = false; else if (TPOwner != None) { Doll = TPOwner.StatusDoll; DollBelt = TPOwner.StatusBelt; bHasDoll = true; } else { BotOwner = Bot(PawnOwner); if (BotOwner != None) { Doll = BotOwner.StatusDoll; DollBelt = BotOwner.StatusBelt; bHasDoll = true; } } if (bHasDoll) { C.Style = ERenderStyle.STY_Translucent; StatScale = Scale * StatusScale; X = C.ClipX - 128 * StatScale; C.SetPos(X, 0); if (PawnOwner.DamageScaling > 2.0) C.DrawColor = PurpleColor; else C.DrawColor = HUDColor; C.DrawTile(Doll, 128*StatScale, 256*StatScale, 0, 0, 128.0, 256.0); C.DrawColor = HUDColor; if (bShieldBelt) { C.DrawColor = BaseColor; C.DrawColor.B = 0; C.SetPos(X, 0); C.DrawIcon(DollBelt, StatScale); } if (bChestArmor) { ChestAmount = FMin(0.01 * ChestAmount,1); C.DrawColor = HUDColor * ChestAmount; C.SetPos(X, 0); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 0, 128, 64); } if (bThighArmor) { ThighAmount = FMin(0.02 * ThighAmount,1); C.DrawColor = HUDColor * ThighAmount; C.SetPos(X, 64*StatScale); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 64, 128, 64); } if (bJumpBoots) { C.DrawColor = HUDColor; C.SetPos(X, 128*StatScale); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 128, 128, 64); } C.Style = Style; if ((PawnOwner == PlayerOwner) && Level.bHighDetailMode && !Level.bDropDetail) { for (i=0; i<4; i++) { DamageTime = Level.TimeSeconds - HitTime[i]; if (DamageTime < 1) { C.SetPos(X + HitPos[i].X * StatScale, HitPos[i].Y * StatScale); if ((HUDColor.G > 100) || (HUDColor.B > 100)) C.DrawColor = RedColor; else C.DrawColor = (WhiteColor - HudColor) * FMin(1, 2 * DamageTime); C.DrawColor.R = 255 * FMin(1, 2 * DamageTime); C.DrawTile(Texture'BotPack.HudElements1', StatScale * HitDamage[i] * 25, StatScale * HitDamage[i] * 64, 0, 64, 25.0, 64.0); } } } } } C.DrawColor = HUDColor; if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX; Y = C.ClipY - 64 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 63.5 * Scale; } C.SetPos(X,Y); if (PawnOwner.Health < 50) { H1 = 1.5 * TutIconBlink; H2 = 1 - H1; C.DrawColor = WhiteColor * H2 + (HUDColor - WhiteColor) * H1; } else C.DrawColor = HUDColor; C.DrawTile(Texture'BotPack.HudElements1', 128*Scale, 64*Scale, 128, 128, 128.0, 64.0); if (PawnOwner.Health < 50) { H1 = 1.5 * TutIconBlink; H2 = 1 - H1; C.DrawColor = C.DrawColor * H2 + (WhiteColor - C.DrawColor) * H1; } else C.DrawColor = WhiteColor; DrawBigNum(C, Max(0, PawnOwner.Health), X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HUDColor; if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX - 128 * Scale; Y = C.ClipY - 64 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 0; } C.SetPos(X, Y); C.DrawTile(Texture'BotPack.HudElements1', 128*Scale, 64*Scale, 0, 192, 128.0, 64.0); if (bHideStatus && bShieldBelt) C.DrawColor = GoldColor; else C.DrawColor = WhiteColor; if (MyCRI == none) MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (!PlayerPawn(Owner).PlayerReplicationInfo.bIsSpectator) DrawBigNum(C, Min(150, ArmorAmount), X + 4 * Scale, Y + 16 * Scale, 1); else DrawBigNum(C, Min(150, MyCRI.ArmorAmmount[PawnOwner.PlayerReplicationInfo.PlayerID]), X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HudColor; if (HudSettings.bShowPing) { if (bHideStatus && bHideAllWeapons) { X = 0.50 * C.ClipX + 256 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 127 * Scale; } if (MyCRI != none && PlayerOwner != none && (PlayerOwner.PlayerReplicationInfo != none)) Ping = MyCRI.ClientPing[PlayerOwner.PlayerReplicationInfo.PlayerID]; if (Ping > 999) Ping = 999; C.SetPos(X, Y); C.DrawTile(PingBack, 128.00 * Scale, 64.00 * Scale, 0.00, 0.00, 128.00, 64.00); if (PlayerOwner == none || (PlayerOwner.PlayerReplicationInfo == none)) C.DrawColor = WhiteColor; else if (PlayerOwner.PlayerReplicationInfo.PacketLoss < 20 && PlayerOwner.PlayerReplicationInfo.PacketLoss != 0) C.DrawColor = GoldColor; else if (PlayerOwner.PlayerReplicationInfo.PacketLoss > 20) C.DrawColor = RedColor; else C.DrawColor = WhiteColor; DrawBigNum(C, Ping, X + 4 * Scale, Y + 16 * Scale, 1); } C.DrawColor = HUDColor; if (HudSettings.bShowTime && HudHelper != none) { if (bHideStatus && bHideAllWeapons) { X = 0.50 * C.ClipX - 384 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; if (HudSettings.bShowPing) Y = 190.5 * Scale; else Y = 127 * Scale; } C.SetPos(X, Y); C.DrawTile(EUTElements,128.0 * Scale, 64.0 * Scale, 0.00, 0.00, 128.00, 64.00); Time = HudHelper.GetTime(PlayerOwner.GameReplicationInfo); C.DrawColor = WhiteColor; CanvasStyle = C.Style; C.Style = ERenderStyle.STY_Translucent; while (TimeX < 5) { switch (TimeX) { case 1: TempX = X + (3*Scale); break; case 2: TempX = TempX + (32*Scale) - (5*Scale); break; case 3: TempX = TempX + (32*Scale) + (5*Scale); break; case 4: TempX = TempX + (32*Scale) - (5*Scale); break; } C.SetPos(TempX, Y + 13 * Scale); s = Mid(Time, TimeX - 1, 1); HudHelper.GetTimeDigit(s,TexX,TexY); C.DrawTile(EUTElements,32.0 * Scale, 64.0 * Scale, TexX, TexY, 32.00, 64.00); TimeX++; } C.Style = CanvasStyle; } C.DrawColor = HUDColor; if (HudSettings.bJumpBoots && bJumpBoots) { if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX + 384 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; if (HudSettings.bShowTime && HudSettings.bShowPing) Y = 254 * Scale; else if (HudSettings.bShowTime || HudSettings.bShowPing) Y = 190.5 * Scale; else Y = 127 * Scale; } C.SetPos(X,Y); C.DrawTile(EUTElements,128.0 * Scale, 64.0 * Scale,128.0,64.0,128.0,64.0); C.DrawColor = WhiteColor; DrawBigNum(C, BootCharges, X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HUDColor; } if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (HudSettings.bShowTeams) && (!bShowInfo) && (!HudHelper.bShowStats)) HudHelper.DrawTeamCount(C, TeamBack, RedTeamSize, BlueTeamSize, Scale, HudSettings.bShowWeaponAccuracy); if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (!bShowInfo) && (HudHelper != none) && (!HudHelper.bShowStats)) { if (HudSettings != none) { if (HudSettings.bShowWeaponAccuracy == 1) HudHelper.DrawAccuracy(C, HudHelper.StatInfo.Accuracy, AccuracyBack, Scale, HudColor); else if (HudSettings.bShowWeaponAccuracy == 2) HudHelper.DrawEffeciency(C, EUTElements, HudHelper.StatInfo.Effeciency, Scale, HudColor); } } C.DrawColor = HudColor; } //------------------------------------- // Message //------------------------------------- simulated function Message(PlayerReplicationInfo _PRI, coerce string msg, name MsgType) { local int i; local Class MessageClass; switch (MsgType) { case 'Say': MessageClass = class'EUTSayMessagePlus'; break; case 'TeamSay': if (HudSettings.bColoredText) MessageClass = class'EUTTeamSayMessagePlus'; else MessageClass = class'TeamSayMessagePlus'; break; case 'CriticalEvent': MessageClass = class'CriticalStringPlus'; LocalizedMessage(MessageClass, 0, None, None, None, msg); return; case 'Event': case 'Scroll': if (bUdemo) { if (msg == LastEventMessage) return; LastEventMessage = msg; } MessageClass = class'EUTStringMessagePlus'; break; case 'EUTEvent': if (bUdemo) { if (msg == LastEventMessage) return; LastEventMessage = msg; } MessageClass = class'EUTStringMessagePlus'; break; default: MessageClass = class'EUTStringMessagePlus'; break; } if (HudSettings.bColoredText) { if (ClassIsChildOf(MessageClass, class'EUTSayMessagePlus') || ClassIsChildOf(MessageClass, class'EUTTeamSayMessagePlus')) { FaceTexture = _PRI.TalkTexture; FaceTeam = TeamColor[_PRI.Team]; if (FaceTexture != None) FaceTime = Level.TimeSeconds + 3; if (msg == "") return; } } else { if (ClassIsChildOf(MessageClass, class'EUTSayMessagePlus') || ClassIsChildOf(MessageClass, class'TeamSayMessagePlus')) { FaceTexture = _PRI.TalkTexture; FaceTeam = TeamColor[_PRI.Team]; if (FaceTexture != None) FaceTime = Level.TimeSeconds + 3; if (msg == "") return; } } for (i = 0; i < 4; i++) { if (ShortMessageQueue[i].Message == None) { ShortMessageQueue[i].Message = MessageClass; ShortMessageQueue[i].Switch = 0; ShortMessageQueue[i].RelatedPRI = _PRI; ShortMessageQueue[i].OptionalObject = None; ShortMessageQueue[i].EndOfLife = MessageClass.Default.Lifetime + Level.TimeSeconds; if (MessageClass.Default.bComplexString) ShortMessageQueue[i].StringMessage = msg; else ShortMessageQueue[i].StringMessage = MessageClass.Static.AssembleString(self, 0, _PRI, msg); return; } } for (i = 0; i < 3; i++) CopyMessage(ShortMessageQueue[i],ShortMessageQueue[i + 1]); ShortMessageQueue[3].Message = MessageClass; ShortMessageQueue[3].Switch = 0; ShortMessageQueue[3].RelatedPRI = _PRI; ShortMessageQueue[3].OptionalObject = None; ShortMessageQueue[3].EndOfLife = MessageClass.Default.Lifetime + Level.TimeSeconds; if (MessageClass.Default.bComplexString) ShortMessageQueue[3].StringMessage = msg; else ShortMessageQueue[3].StringMessage = MessageClass.Static.AssembleString(self, 0, _PRI, msg); } //------------------------------------- // DisplayMessages //------------------------------------- simulated function bool DisplayMessages( canvas C ) { return true; } //------------------------------------- // DrawNextMessagePart //------------------------------------- simulated function float DrawNextMessagePart(Canvas C, string S, float X, int Y) { local float XL, YL; C.SetPos(4 + X, Y); C.StrLen(S, XL, YL); C.DrawText(S, false); return (X + XL); } //------------------------------------- // DrawTeam //------------------------------------- simulated function DrawTeam(Canvas C, TeamInfo TI) { local float XL, YL; if ((TI != None) && (TI.Size > 0)) { C.Font = MyFonts.GetHugeFont(C.ClipX ); C.DrawColor = TeamColor[TI.TeamIndex]; C.SetPos(C.ClipX - 64 * Scale, C.ClipY - (336 + 128 * TI.TeamIndex) * Scale); C.DrawIcon(TeamIcon[TI.TeamIndex], Scale); C.StrLen(int(TI.Score), XL, YL); C.SetPos(C.ClipX - XL - 66 * Scale, C.ClipY - (336 + 128 * TI.TeamIndex) * scale + ((64 * Scale) - YL)/2 ); C.DrawText(int(TI.Score), false); } } //------------------------------------- // DrawWeapons //------------------------------------- simulated function DrawWeapons(Canvas C) { local Weapon W, WeaponSlot[11]; local inventory inv; local int i, BaseY, BaseX, Pending, WeapX, WeapY; local float AmmoScale, WeaponOffset, WeapScale, WeaponX, TexX, TexY; BaseX = 0.5 * (C.ClipX - HudScale * WeaponScale * C.ClipX); WeapScale = WeaponScale * Scale; C.Style = Style; BaseY = C.ClipY - 63.5 * WeapScale; WeaponOffset = 0.1 * HUDScale * WeaponScale * C.ClipX; if (PawnOwner.Weapon != none) { W = PawnOwner.Weapon; if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; WeaponX = BaseX + ( W.InventoryGroup - 1 ) * WeaponOffset; C.CurX = WeaponX; C.CurY = BaseY; C.DrawColor = SolidHUDColor; C.DrawIcon(W.StatusIcon, WeapScale); C.DrawColor = GoldColor; C.CurX = WeaponX + 4 * WeapScale; C.CurY = BaseY + 4 * WeapScale; C.Style = Style; if (W.InventoryGroup == 10) C.DrawTile(Texture'BotPack.HudElements1', 0.75 * WeapScale * 25, 0.75 * WeapScale * 64, 0, 0, 25.0, 64.0); else C.DrawTile(Texture'BotPack.HudElements1', 0.75 * WeapScale * 25, 0.75 * WeapScale * 64, 25 * W.InventoryGroup, 0, 25.0, 64.0); WeaponSlot[W.InventoryGroup] = W; C.CurX = WeaponX; C.CurY = BaseY; C.DrawTile(Texture'BotPack.HUDWeapons', 128 * WeapScale, 64 * WeapScale, 128, 64, 128, 64); } if (Level.bHighDetailMode && (PawnOwner.PendingWeapon != None)) { Pending = PawnOwner.PendingWeapon.InventoryGroup; C.CurX = BaseX + (Pending - 1) * WeaponOffset - 64 * WeapScale; C.CurY = C.ClipY - 96 * WeapScale; C.Style = ERenderStyle.STY_Translucent; C.DrawColor = GoldColor; C.DrawTile(Texture'BotPack.HUDWeapons', 256 * WeapScale, 128 * WeapScale, 0, 128, 256.0, 128.0); } else Pending = 100; C.Style = Style; i = 0; for (inv = PawnOwner.Inventory; inv != None; inv = inv.Inventory) { if (inv.IsA('Weapon') && (inv != PawnOwner.Weapon)) { W = Weapon(inv); if ( WeaponSlot[W.InventoryGroup] == none ) WeaponSlot[W.InventoryGroup] = W; else if (( WeaponSlot[W.InventoryGroup] != PawnOwner.Weapon) && ((W == PawnOwner.PendingWeapon) || (WeaponSlot[W.InventoryGroup].AutoSwitchPriority < W.AutoSwitchPriority))) WeaponSlot[ W.InventoryGroup] = W; } i++; if (i > 100) break; } W = PawnOwner.Weapon; TexX = 128 * WeapScale; TexY = 64 * WeapScale; for (i = 1; i < 11; i++) { if (WeaponSlot[i] == none) { C.Style = Style; C.DrawColor = 0.5 * HUDColor; C.CurX = BaseX + (i - 1) * WeaponOffset; C.CurY = BaseY; WeapX = ((i - 1 ) % 4) * 64; WeapY = ((i - 1 ) / 4) * 32; C.DrawTile(Texture'BotPack.HUDWeapons', TexX, TexY, WeapX, WeapY, 64.0, 32.0); } else if (WeaponSlot[i] != W) { if (Pending == i) { if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; C.DrawColor = SolidHUDColor; } else { C.Style = Style; C.DrawColor = 0.5 * HUDColor; } C.CurX = BaseX + (i - 1) * WeaponOffset; C.CurY = BaseY; if (WeaponSlot[i].bSpecialIcon) C.DrawIcon(WeaponSlot[i].StatusIcon, WeapScale); else { WeapX = ((i - 1) % 4) * 64; WeapY = ((i - 1) / 4) * 32; C.DrawTile(Texture'BotPack.HUDWeapons', TexX, TexY, WeapX, WeapY, 64.0, 32.0); } } } TexX = 0.75 * WeapScale * 25; TexY = 0.75 * WeapScale * 64; for (i = 1; i < 11; i++) { if (WeaponSlot[i] != none) { WeaponX = BaseX + (i - 1) * WeaponOffset + 4 * WeapScale; if (WeaponSlot[i] != W) { C.CurX = WeaponX; C.CurY = BaseY + 4 * WeapScale; C.DrawColor = GoldColor; if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; else C.Style = Style; if (i == 10) C.DrawTile(Texture'BotPack.HudElements1', TexX, TexY, 0, 0, 25.0, 64.0); else C.DrawTile(Texture'BotPack.HudElements1', TexX, TexY, 25 * i, 0, 25.0, 64.0); } if (WeaponSlot[i].AmmoType != none) { C.CurX = WeaponX; C.CurY = BaseY + 52 * WeapScale; C.DrawColor = BaseColor; AmmoScale = FClamp(88.0 * WeapScale * WeaponSlot[i].AmmoType.AmmoAmount / WeaponSlot[i].AmmoType.MaxAmmo, 0, 88); C.DrawTile(Texture'BotPack.HudElements1', AmmoScale, 8 * WeapScale, 64, 64, 128.0, 8.0); } } } } //------------------------------------- // DrawCrossHair //------------------------------------- simulated function DrawCrossHair(Canvas C, int X, int Y) { local float XScale, PickDiff; local float XLength; local texture T, M; if (Crosshair >= CrosshairCount) Return; if (C.ClipX < 512) XScale = 0.5; else XScale = FMax(1, int(0.1 + C.ClipX / 640.0)); PickDiff = Level.TimeSeconds - PickupTime; if (PickDiff < 0.4) { if (PickDiff < 0.2) XScale *= (1 + 5 * PickDiff); else XScale *= (3 - 5 * PickDiff); } XLength = XScale * 64.0; C.SetPos(0.5 * (C.ClipX - XLength), 0.5 * (C.ClipY - XLength)); C.Style = ERenderStyle.STY_Translucent; C.DrawColor = 15 * CrosshairColor; M = CrossHairTextures[7]; T = CrossHairTextures[Crosshair]; if (T == None) T = LoadCrosshair(Crosshair); if (M == None) M = LoadCrosshair(7); C.DrawTile(T, XLength, XLength, 0, 0, 64, 64); C.DrawColor = HudSettings.DotColor; C.SetPos(0.5 * (C.ClipX - XLength) - 10 + HudSettings.DotX, 0.5 * (C.ClipY - XLength) - 10 + HudSettings.DotY); if (HudSettings.bDot) C.DrawTile(M, XLength, XLength, 0, 0, 64, 64); C.bNoSmooth = True; C.Style = Style; } //------------------------------------- // TraceIdentify //------------------------------------- simulated function bool TraceIdentify(canvas C) { local actor Other; local vector HitLocation, HitNormal, StartTrace, EndTrace; if (PawnOwner == none || MyCRI == none) return false; StartTrace = PawnOwner.Location; StartTrace.Z += PawnOwner.BaseEyeHeight; EndTrace = StartTrace + vector(PawnOwner.ViewRotation) * MyCRI.TraceDistance; Other = Trace(HitLocation, HitNormal, EndTrace, StartTrace, true); if (Pawn(Other) != None) { if (Pawn(Other).bIsPlayer) { IdentifyTarget = Pawn(Other).PlayerReplicationInfo; IdentifyFadeTime = 3.0; } } else if ((Other != None) && SpecialIdentify(C, Other)) return false; if ((IdentifyFadeTime == 0.0) || (IdentifyTarget == None) || IdentifyTarget.bFeigningDeath) return false; return true; } //------------------------------------- // SpecialIdentify //------------------------------------- simulated function bool SpecialIdentify(Canvas C, Actor Other ) { return false; } //------------------------------------- // SetIDColor //------------------------------------- simulated function SetIDColor( Canvas C, int type ) { if (type == 0) C.DrawColor = AltTeamColor[IdentifyTarget.Team] * 0.333 * IdentifyFadeTime; else C.DrawColor = TeamColor[IdentifyTarget.Team] * 0.333 * IdentifyFadeTime; } //------------------------------------- // DrawTwoColorID //------------------------------------- simulated function DrawTwoColorID(canvas C, string TitleString, string ValueString, int YStart ) { local float XL, YL, XOffset, X1; C.Style = Style; C.StrLen(TitleString$": ", XL, YL); X1 = XL; C.StrLen(ValueString, XL, YL); XOffset = C.ClipX / 2 - (X1 + XL) /2; C.SetPos(XOffset, YStart); SetIDColor(C, 0); XOffset += X1; C.DrawText(TitleString); C.SetPos(XOffset, YStart); SetIDColor(C, 1); C.DrawText(ValueString); C.DrawColor = WhiteColor; C.Font = MyFonts.GetSmallFont(C.ClipX ); } //------------------------------------- // DrawIdentifyInfo //------------------------------------- simulated function bool DrawIdentifyInfo(canvas C) { local float XL, YL, XOffset, X1; local Pawn P; if (!Super.DrawIdentifyInfo(C)) return false; C.StrLen("TEST", XL, YL); if (PawnOwner.PlayerReplicationInfo.Team == IdentifyTarget.Team) { P = Pawn(IdentifyTarget.Owner); C.Font = MyFonts.GetSmallFont(C.ClipX); if (P != None) DrawTwoColorID(C,IdentifyHealth,string(P.Health), (C.ClipY - 256 * Scale) + 1.5 * YL); } return true; } //------------------------------------- // Tick //------------------------------------- simulated function Tick(float DeltaTime) { local int i; Super.Tick(DeltaTime); IdentifyFadeTime = FMax(0.0, IdentifyFadeTime - DeltaTime); MOTDFadeOutTime = FMax(0.0, MOTDFadeOutTime - DeltaTime * 55); TutIconBlink += DeltaTime; if (TutIconBlink >= 0.5) TutIconBlink = 0.0; if (bDrawFaceArea) { if (FaceAreaOffset < 0) FaceAreaOffset += DeltaTime * 600; if (FaceAreaOffset > 0) FaceAreaOffset = 0.0; } else if (FaceAreaOffset > MinFaceAreaOffset) FaceAreaOffset = FMax(FaceAreaOffset - DeltaTime * 600, MinFaceAreaOffset ); if (bDrawMessageArea) { if (MessageFadeTime < 1.0) { MessageFadeTime += DeltaTime * 8; if (MessageFadeTime > 1.0) MessageFadeTime = 1.0; } } else if ((MessageFadeTime > 0.0) && (MessageFadeCount == 0)) { MessageFadeTime -= DeltaTime * 2; if (MessageFadeTime < 0.0) MessageFadeTime = 0.0; } WeaponNameFade -= DeltaTime; } //------------------------------------- // DisplayProgressMessage //------------------------------------- simulated function DisplayProgressMessage( canvas C ) { local int i; local float XL, YL, YOffset, LogoSize; local GameReplicationInfo GRI; local string s; local byte style; local bool bReturn; PlayerOwner.ProgressTimeOut = FMin(PlayerOwner.ProgressTimeOut, Level.TimeSeconds + 8); if ((MyCRI == None) || (MyCRI.bTournament && MyCRI.bMatchStarted)) return; C.Style = ERenderStyle.STY_Normal; C.bCenter = True; C.Font = MyFonts.GetBigFont( C.ClipX ); C.StrLen("TEST", XL, YL); if ( UTIntro(Level.Game) != None ) YOffset = 64 * scale + 2 * YL; else if ( (MOTDFadeOutTime <= 0) || (C.ClipY < 300) ) YOffset = 64 * scale + 6 * YL; else { YOffset = 64 * scale + 6 * YL; GRI = PlayerOwner.GameReplicationInfo; if ( GRI != None ) { if ( GRI.MOTDLine1 != "" ) YOffset += YL; if ( GRI.MOTDLine2 != "" ) YOffset += YL; if ( GRI.MOTDLine3 != "" ) YOffset += YL; if ( GRI.MOTDLine4 != "" ) YOffset += YL; } } for (i=0; i<8; i++) { if ( i == 0) { if (!bStartMessage) { bStartMessage = true; StartMessage = PlayerPawn(Owner).ProgressMessage[i]; } else { if (PlayerPawn(Owner).ProgressMessage[i] != StartMessage) bReturn = true; } } C.SetPos(0, YOffset); C.DrawColor = PlayerPawn(Owner).ProgressColor[i]; C.DrawText(PlayerPawn(Owner).ProgressMessage[i], False); if(PlayerPawn(Owner).ProgressMessage[i] == "") break; YOffset += YL + 1; } if ((MyCRI.bTournament && !MyCRI.bWarmupSwitch && PlayerPawn(Owner).Health > 0) || (bReturn)) { C.bCenter = False; C.Style = Style; HUDSetup(C); return; } if(MyCRI.MessageOfTheDay != "") { s = MyCRI.MessageOfTheDay; if(Len(s) > 50) s = Left(s,50); C.SetPos(0, YOffset); C.DrawColor = WhiteColor; C.DrawText(s, False); YOffset += YL + 1; } C.SetPos(0, YOffset); C.DrawColor = GoldColor; C.DrawText("EUT SOURCE", False); YOffset += YL + 1; C.SetPos(0, YOffset); C.DrawColor = GreenColor; C.DrawText("Type ShowHelp In Console For Extended Commands", False); YOffset += YL + 1; C.DrawColor = WhiteColor; LogoSize = Badge.USize * Scale; C.SetPos(C.ClipX/2 - LogoSize/2, YOffset); Style = C.Style; C.Style = ERenderStyle.STY_Translucent; C.DrawIcon(Badge,Scale); C.bCenter = False; C.Style = Style; HUDSetup(C); } //------------------------------------- // EXECS //------------------------------------- exec function ShowStats() { if (HudHelper.bShowStats) HudHelper.bShowStats = False; else { HudHelper.bShowStats = True; PlayerPawn(Owner).bShowScores = False; bShowInfo = false; } } //------------------------------------- exec function ShowServerInfo() { if (bShowInfo) bShowInfo = False; else { bShowInfo = True; PlayerPawn(Owner).bShowScores = False; HudHelper.bShowStats = false; } } //------------------------------------- exec function ShowScores() { if (PlayerPawn(Owner).bShowScores) PlayerPawn(Owner).bShowScores = False; else { PlayerPawn(Owner).bShowScores = True; bShowInfo = False; HudHelper.bShowStats = false; } } //------------------------------------- exec function ShowPing(string s) { HudSettings.ShowPing(s); } //------------------------------------- exec function ShowTime(string s) { HudSettings.ShowTime(s); } //------------------------------------- exec function EText(string s) { HudSettings.EText(s); } //------------------------------------- exec function ShowTeams(string s) { HudSettings.ShowTeams(s); } //------------------------------------- exec function Scope(string s) { HudSettings.Scope(s); } //------------------------------------- exec function ShowFC(string s) { HudSettings.ShowFC(s); } //------------------------------------- exec function ShowWeaponAccuracy(string s) { HudSettings.ShowWeaponAccuracy(s); } //------------------------------------- exec function HitSounds(string s) { HudSettings._HitSounds(s); } //------------------------------------- exec function AutoSS(string s) { HudSettings.AutoSS(s); } //------------------------------------- exec function ShowHelp(string s) { HudSettings.ShowHelp(s); } //------------------------------------- exec function ShowBeacon(string s) { HudSettings.ShowBeacon(s); } //------------------------------------- exec function UseDot(string s) { HudSettings.UseDot(s); } //------------------------------------- exec function ShowBoots(string s) { HudSettings.ShowBoots(s); } //------------------------------------- exec function ShowTeamInfo() { if (HudHelper.bShowTeamInfo) HudHelper.bShowTeamInfo = False; else HudHelper.bShowTeamInfo = True; } //------------------------------------- exec function Spectate(string s) { if (s ~= "") { if (PlayerPawn(Owner).IsA('Spectator')) { PlayerPawn(Owner).ClientMessage("You are already a Spectator!"); return; } if (MyCRI.bCanSpectate) { PlayerPawn(Owner).ClientMessage("Changing to Spectator Mode"); PlayerPawn(Owner).ConsoleCommand("Disconnect"); PlayerPawn(Owner).UpdateURL("OverrideClass", "Botpack.CHSpectator", True); PlayerPawn(Owner).ConsoleCommand("Reconnect"); } else PlayerPawn(Owner).ClientMessage("Spectator Spots Full."); } } //------------------------------------- exec function QuickJoin(string s) { if (PlayerPawn(Owner).IsA('Spectator')) { if (s ~= "") { PlayerPawn(Owner).ClientMessage("Joining Server"); PlayerPawn(Owner).UpdateURL("OverrideClass", "", True); PlayerPawn(Owner).ConsoleCommand("Reconnect"); } } } //------------------------------------- exec function DebugLoad(string s) { if (!MyPlayer.PlayerReplicationInfo.bAdmin) { MyPlayer.ClientMessage("You Must Be Logged In As An Admin To Access This Debugger!"); return; } switch (s) { case "1": MyPlayer.ConsoleCommand("Inject UserFlag 1"); MyPlayer.ClientMessage("Load Debugger Activated!"); HudHelper.bDebugLoad = true; break; case "0": MyPlayer.ConsoleCommand("Inject UserFlag 0"); MyPlayer.ClientMessage("Load Debugger DeActivated!"); HudHelper.bDebugLoad = false; break; } } //------------------------------------- exec function NetCode(string s) { HudSettings.ChangenLevel(s); } //------------------------------------- exec function ShowLeader(string s) { HudSettings.ShowLeader(s); } //------------------------------------- // defaultproperties //------------------------------------- j"HJ$HM"k/l/m/M" H%.H j"'' j&.H i"'' ,.H f"'' ,.H e"'' ,.H d"'' ,.H c"'' ,.H b"'' <,.H a"'' _,.H `"'' , .H ]"'' , .H ["'' , .H Z"'' , .H R"'' , .H O"''  !v/I /* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTStringMessagePlus <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTStringMessagePlus expands LocalMessagePlus; //------------------------------------- // AssembleString //------------------------------------- static function string AssembleString( HUD MyHud, optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional String MessageString ) { return MessageString; } //------------------------------------- // defaultproperties //------------------------------------- Z>(LiB& -In-q.($gn :n:qwn*Z nwn*Z nZ  {Z Z Location:Z wn*na/!N(p($(u ?, ] ( ?:n%(a:n&(f*znq(Oo(?L(h-((?L(h aD(?(h szDz(P"(uu ?,(anY pS_-Tzg_|NONEqa/!"g_|usS{g_|{g_|NONEErgo*go.pp_I .g_| S{qVgog_|go.pp_I .g_| (u] (-((a(go?(-'uu?go| ?,(P"(u] (an('-I(v (aadmindF"(u d] ( aadmin((z-I-_(znq(v (amore>>dF"(u d] ( amore>>((z(aSDnY r(u GY ] (aSDn($ (?(a(h&((?L(h &aD(?(v (a#########p/wS -s/(} ($(Au G?,]?,] pw?&(RK(O($(Au G?,]?,] pw?&(RKx&D?q?n,<(i ($(v  (?(h ZaD _-S}D?n_G?n_Gn_Y?,d%,d(oaШTime:SxPing:Sn_LLoss:RnEff:S}Y r(7u GY ] pw?&r(faѨTime:SxPing:Sn_LLoss:RnEff:S}( (_aШTime:SxPing:Sn_LLoss:RnY r(7u GY ] pw?&r(VaѨTime:SxPing:Sn_LLoss:Rn((i (5u ?,] pw?&r( aZ ( RBclass EUTStatInfo expands Info; var EUTGameReplicationInfo MyCRI; var PlayerReplicationInfo RedPRI[32]; var PlayerReplicationInfo BluePRI[32]; var PlayerReplicationInfo RedPRI2[32]; var PlayerReplicationInfo BluePRI2[32]; var PlayerReplicationInfo OrderedPRI[32]; var PlayerReplicationInfo OrderedPRI2[32]; var FontInfo _FontInfo; var bool bCTF, bTDM, bDM; var color YellowColor, GreenColor, WhiteColor, GoldColor, BlueColor, LightCyanColor, SilverColor, BronzeColor, CyanColor, RedColor, ShadeColor, DarkRedColor, DarkBlueColor; var float FloatingY, FloatingY2, ScaleOffset, SpacerOffset, AvgLine, EnforcerLine, BioLine, ShockRifleLine, PulseGunLine, RipperLine, MiniGunLine, FlakGunLine, EightBallLine, SniperLine, TotalsLine, UltraKillLine, MonsterKillLine, LudKillLine, HolyShitLine, KillingSpreeLine, RampageLine, DominatingLine, UnStoppableLine, GodlikeLine, OwnageLine, CoversLine, SealsLine, HeadHunterLine, FlakMonkeyLine, ComboWhoreLine; var texture BaseFill, EUTHeadShots; var localized string StatInfoText, PlayerStatsText, SpreesText; //------------------------------------- // Destroyed //------------------------------------- function Destroyed() { Super.Destroyed(); if (_FontInfo != none) _FontInfo.Destroy(); } //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { Super.PostBeginPlay(); _FontInfo = FontInfo(Spawn(Class(DynamicLoadObject(class'ChallengeHUD'.default.FontInfoClass, class'Class')))); BaseFill = Texture(DynamicLoadObject("EUT_Textures.EUT_Fill", class'Texture')); EUTHeadShots = Texture(DynamicLoadObject("EUT_Textures.EUT_HeadShots", class'Texture')); } //------------------------------------- // RenderInfo //------------------------------------- function RenderInfo( canvas C ) { local GameReplicationInfo GRI; GRI = PlayerPawn(Owner).GameReplicationInfo; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': bCTF = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); break; case Class'EUTTDMHud': bTDM = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); break; case Class'EUTDMHud': bDM = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); break; } if (C.ClipX > 512) { C.DrawColor = ShadeColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(0,0); C.DrawRect(BaseFill, C.ClipX, C.ClipY); C.Style = ERenderStyle.STY_Normal; DrawPlayerStats(C, GRI); DrawPlayerSprees(C, GRI); } } //------------------------------------- // DrawPlayerStats //------------------------------------- function DrawPlayerStats(Canvas C, GameReplicationInfo GRI) { local float XL, YL, ScaleOffset, SpacerOffset, X, Y, Start, Start2, Y2; local TournamentGameReplicationInfo TGRI; local byte i, NumRed, NumBlue, Total; local PlayerReplicationInfo PRI; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': for (i = 0; i < ArrayCount(RedPRI); i++) RedPRI[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player") && (PRI.Team == 0)) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { RedPRI[NumRed] = PRI; NumRed++; if (NumRed == ArrayCount(RedPRI)) break; } } } SortScoresRed(NumRed); for (i = 0; i < ArrayCount(BluePRI); i++) BluePRI[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player") && (PRI.Team == 1)) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { BluePRI[NumBlue] = PRI; NumBlue++; if (NumBlue == ArrayCount(BluePRI)) break; } } } SortScoresBlue(NumBlue); break; case Class'EUTDMHud': for (i = 0; i < ArrayCount(OrderedPRI); i++) OrderedPRI[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player")) { if ( !PRI.bIsSpectator || PRI.bWaitingPlayer ) { OrderedPRI[Total] = PRI; Total++; if (Total == ArrayCount(OrderedPRI)) break; } } } SortScores(Total); break; } if (C.ClipX < 600) { ScaleOffset = 0.15; SpacerOffset = 10; } else if (C.ClipX > 600 && (C.ClipX < 760)) { ScaleOffset = 0.22; SpacerOffset = 10; } else if (C.Clipx > 760 && (C.ClipX < 900)) { ScaleOffset = 0.25; SpacerOffset = 10; } else if (C.ClipX > 900 && (C.ClipX < 1200)) { ScaleOffset = 0.30; SpacerOffset = 25; } else { ScaleOffset = 0.50; SpacerOffset = 40; } C.DrawColor = YellowColor; C.Font = _FontInfo.GetBigFont( C.ClipX); C.StrLen(PlayerStatsText, XL, YL); C.SetPos((C.ClipX - XL) / 2, 0 + YL * 2); C.DrawText(PlayerStatsText, True); C.DrawColor = GreenColor; FloatingY = YL * 3; if (C.ClipX > 800) C.Font = _FontInfo.GetSmallFont(C.ClipX); else C.Font = _FontInfo.GetSmallestFont(C.ClipX); C.StrLen("12345678901234567890", XL, YL); X = C.ClipX / 8; Y = FloatingY + (YL * 2); C.SetPos(X, Y); C.DrawText("Player", True); C.SetPos(X + (XL + 7), Y); C.DrawText("AVG ", True); AvgLine = C.ClipX / 8 + (XL + SpacerOffset); C.Style = ERenderStyle.STY_Translucent; C.StrLen("### ", XL, YL); C.SetPos(AvgLine + (XL + 7), Y); C.DrawIcon(texture'BotPack.IconAutom',ScaleOffset); EnforcerLine = AvgLine + (XL + SpacerOffset); C.SetPos(EnforcerLine + (XL + 7), Y); C.DrawIcon(texture'BotPack.IconBio',ScaleOffset); BioLine = EnforcerLine + (XL + SpacerOffset); C.SetPos(BioLine + (XL + 7), Y); C.DrawIcon(texture'BotPack.IconASMD',ScaleOffset); ShockRifleLine = BioLine + (XL + SpacerOffset); C.SetPos(ShockRifleLine + (XL + 7), Y); C.DrawIcon(texture'BotPack.IconPulse',ScaleOffset); PulseGunLine = ShockRifleLine + (XL + SpacerOffset); C.SetPos(PulseGunLine + (XL + 7), Y); C.DrawIcon(texture'BotPack.IconRazor',ScaleOffset); RipperLine = PulseGunLine + (XL + SpacerOffset); C.SetPos(RipperLine + (XL + 7), Y); C.DrawIcon(texture'BotPack.IconMini',ScaleOffset); MiniGunLine = RipperLine + (XL + SpacerOffset); C.SetPos(MiniGunLine + (XL + 7), Y); C.DrawIcon(texture'BotPack.IconFlak',ScaleOffset); FlakGunLine = MiniGunLine + (XL + SpacerOffset); C.SetPos(FlakGunLine + (XL + 7), Y); C.DrawIcon(texture'BotPack.Icon8ball',ScaleOffset); EightBallLine = FlakGunLine + (XL + SpacerOffset); C.SetPos(EightBallLine + (XL + 7), Y); switch (MyCRI.TextureSwitch) { case 0: C.DrawIcon(texture'BotPack.IconRifle',ScaleOffset); break; case 1: C.DrawIcon(EUTHeadShots,ScaleOffset); break; } SniperLine = EightBallLine + (XL + SpacerOffset); C.Style = ERenderStyle.STY_Normal; C.StrLen("TEST", XL, YL ); Start = FloatingY + (YL * 5); Y = Start; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': for (i = 0; i < NumRed; i++) { Y = Start + i * YL; DrawInfo(C, RedPRI[i], Y); } Start = FloatingY + (YL * 5) + (YL * NumRed); for (i = 0; i < NumBlue; i++) { Y = Start + i * YL; DrawInfo(C, BluePRI[i], Y); } break; case Class'EUTDMHud': Start = FloatingY + (YL * 5); for (i = 0; i < Total; i++) { Y = Start + i * YL; DrawInfo(C, OrderedPRI[i], Y); } break; } } //------------------------------------- // DrawInfo //------------------------------------- function DrawInfo(Canvas C, PlayerReplicationInfo PRI, float Y) { local float XL, YL, XL2, YL2, X; local bool bLocal, bZP; local PlayerPawn MyPlayer; local byte EAcc, Shock, SniperHeadShotAcc; local int pid; local float Acc; MyPlayer = PlayerPawn(Owner); bZp = false; bLocal = (PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName); pid = PRI.PlayerID; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': case Class'EUTDMHud': EAcc = MyCRI.PlayerAccuracy3[pid].InstaGib; if(EAcc != 0) bZp = true; break; } if (MyCRI.HeadHunterCount[pid] < 1) Acc = float(MyCRI.HeadShotsCount[pid]) / float(MyCRI.TotalKills[pid]) * 100; else Acc = float(MyCRI.HeadShotsCount[pid] + (MyCRI.HeadHunterCount[pid] * 31)) / float(MyCRI.TotalKills[pid]) * 100; if(Acc < 0) Acc = 0; SniperHeadShotAcc = byte(Acc); if (C.ClipX > 800) C.Font = _FontInfo.GetSmallFont( C.ClipX ); else C.Font = _FontInfo.GetSmallestFont(C.ClipX); switch (PRI.Team) { case 0: C.DrawColor = RedColor; break; case 1: C.DrawColor = BlueColor; break; case 2: C.DrawColor = GreenColor; break; case 3: C.DrawColor = GoldColor; break; case 255: C.DrawColor = BronzeColor; break; } if (bLocal) C.DrawColor = WhiteColor; C.SetPos(C.ClipX/8, Y); C.DrawText(PRI.PlayerName, False); C.SetPos(AvgLine, Y); switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': case Class'EUTDMHud': C.DrawText(MyCRI.CurrentTotalAccuracy[pid]$" %", False); C.SetPos(EnforcerLine, Y); C.DrawText(MyCRI.PlayerAccuracy1[pid].Enforcer$" %", False); C.SetPos(BioLine, Y); C.DrawText(MyCRI.PlayerAccuracy1[pid].BioGun$" %", False); if (!bZP) { C.SetPos(ShockRifleLine, Y); C.DrawText(MyCRI.PlayerAccuracy1[pid].ShockRifle$" %", False); } else { C.SetPos(ShockRifleLine, Y); C.DrawText(EAcc$" %", False); } C.SetPos(PulseGunLine, Y); C.DrawText(MyCRI.PlayerAccuracy2[pid].PulseGun$" %", False); C.SetPos(RipperLine, Y); C.DrawText(MyCRI.PlayerAccuracy2[pid].Ripper$" %", False); C.SetPos(MiniGunLine, Y); C.DrawText(MyCRI.PlayerAccuracy2[pid].MiniGun$" %", False); C.SetPos(FlakGunLine, Y); C.DrawText(MyCRI.PlayerAccuracy3[pid].FlakCannon$" %", False); C.SetPos(EightBallLine, Y); C.DrawText(MyCRI.PlayerAccuracy3[pid].EightBall$" %", False); C.SetPos(SniperLine, Y); if (!MyCRI.bUsesCustomWeapon) { switch (MyCRI.TextureSwitch) { case 0: C.DrawText(MyCRI.PlayerAccuracy3[pid].SniperRifle$" %", False); break; case 1: C.DrawText(SniperHeadShotAcc$" %", False); break; } } else { switch (MyCRI.TextureSwitch) { case 0: C.DrawText(MyCRI.PlayerAccuracy4[pid].CustomWeapon$" %", False); break; case 1: C.DrawText(SniperHeadShotAcc$" %", False); break; } } break; } FloatingY2 = Y + 30; } //------------------------------------- // DrawPlayerSprees //------------------------------------- function DrawPlayerSprees(Canvas C, GameReplicationInfo GRI) { local float XL, YL, ScaleOffset, SpacerOffset, Y, Start, Start2, Y2; local TournamentGameReplicationInfo TGRI; local byte i, NumRed, NumBlue, Total; local PlayerReplicationInfo PRI; C.DrawColor = YellowColor; if (C.ClipX < 600) { ScaleOffset = 0.15; SpacerOffset = 10; } else if (C.ClipX > 600 && (C.ClipX < 760)) { ScaleOffset = 0.22; SpacerOffset = 10; } else if (C.Clipx > 760 && (C.ClipX < 900)) { ScaleOffset = 0.25; SpacerOffset = 10; } else if (C.ClipX > 900 && (C.ClipX < 1200)) { ScaleOffset = 0.30; SpacerOffset = 25; } else { ScaleOffset = 0.50; SpacerOffset = 40; } C.Font = _FontInfo.GetBigFont( C.ClipX); C.StrLen(SpreesText, XL, YL); C.SetPos((C.ClipX - XL) / 2, FloatingY2); C.DrawText(SpreesText, True); C.DrawColor.R = 0; C.DrawColor.G = 255; C.DrawColor.B = 50; if (C.ClipX > 800) C.Font = _FontInfo.GetSmallFont(C.ClipX); else C.Font = _FontInfo.GetSmallestFont(C.ClipX); C.StrLen("12345678901234567890", XL, YL); C.SetPos(C.ClipX / 8, FloatingY2 + (YL * 2)); C.DrawText("Player", True); C.SetPos(C.ClipX / 8 + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Total", True); TotalsLine = C.ClipX / 8 + (XL + 7); C.StrLen("Total", XL, YL); C.SetPos(TotalsLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Ult", True); UltraKillLine = TotalsLine + (XL + 7); C.StrLen("###", XL, YL); C.SetPos(UltraKillLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Mon", True); MonsterKillLine = UltraKillLine + (XL + 7); C.SetPos(MonsterKillLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Lud", True); LudKillLine = MonsterKillLine + (XL + 7); C.SetPos(LudKillLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("HoS", True); HolyShitLine = LudKillLine + (XL + 7); C.SetPos(HolyShitLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("KSp", True); KillingSpreeLine = HolyShitLine + (XL + 7); C.SetPos(KillingSpreeLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Ram", True); RampageLine = KillingSpreeLine + (XL + 7); C.SetPos(RampageLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Dom", True); DominatingLine = RampageLine + (XL + 7); C.SetPos(DominatingLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Uns", True); UnStoppableLine = DominatingLine + (XL + 7); C.SetPos(UnStoppableLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("God", True); GodlikeLine = UnStoppableLine + (XL + 7); C.SetPos(GodlikeLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("WkS", True); OwnageLine = GodlikeLine + (XL + 7); C.SetPos(OwnageLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Cov", True); CoversLine = OwnageLine + (XL + 7); C.SetPos(CoversLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("Sls", True); SealsLine = CoversLine + (XL + 7); C.SetPos(SealsLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("CoW", true); ComboWhoreLine = SealsLine + (XL + 7); C.SetPos(ComboWhoreLine + (XL + 7), FloatingY2 + (YL * 2)); C.DrawText("FkM", true); FlakMonkeyLine = ComboWhoreLine + (XL + 7); C.SetPos(FlakMonkeyLine + (XL + 7), FloatingY2 + (YL * 2)); switch (MyCRI.TextureSwitch) { case 0: C.DrawText("HdH", true); break; case 1: C.DrawText("HsT", true); break; } //C.DrawText("HdH", true); HeadHunterLine = FlakMonkeyLine + (XL + 7); switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': for (i = 0; i < ArrayCount(RedPRI2); i++) RedPRI2[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player") && (PRI.Team == 0)) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { RedPRI2[NumRed] = PRI; NumRed++; if (NumRed == ArrayCount(RedPRI2)) break; } } } SortScoresRed2(NumRed); for (i = 0; i < ArrayCount(BluePRI2); i++) BluePRI2[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player") && (PRI.Team == 1)) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { BluePRI2[NumBlue] = PRI; NumBlue++; if (NumBlue == ArrayCount(BluePRI2)) break; } } } SortScoresBlue2(NumBlue); C.StrLen( "TEST", XL, YL ); Start = FloatingY2 + (YL * 5); Y = Start; for (i = 0; i < NumRed; i++) { Y = Start + i * YL; DrawSprees(C, RedPRI2[i], Y); } Start = FloatingY2 + (YL * 5) + (YL * NumRed); for (i = 0; i < NumBlue; i++) { Y = Start + i * YL; DrawSprees(C, BluePRI2[i], Y); } break; case Class'EUTDMHud': for (i = 0; i < ArrayCount(OrderedPRI2); i++) OrderedPRI2[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player")) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { OrderedPRI2[Total] = PRI; Total++; if (Total == ArrayCount(OrderedPRI2)) break; } } } SortScores2(Total); C.StrLen( "TEST", XL, YL ); Start = FloatingY2 + (YL * 5); Y = Start; Start = FloatingY2 + (YL * 5); for (i = 0; i < Total; i++) { Y = Start + i * YL; DrawSprees(C, OrderedPRI2[i], Y); } break; } } //------------------------------------- // DrawSprees //------------------------------------- function DrawSprees(Canvas C, PlayerReplicationInfo PRI, float Y) { local float XL, YL, XL2, YL2; local bool bLocal; local PlayerPawn MyPlayer; local byte Total; local int pid; MyPlayer = PlayerPawn(Owner); bLocal = (PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName); pid = PRI.PlayerID; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': Total = MyCRI.KillingSpree[pid].UltraKills + MyCRI.KillingSpree[pid].MonsterKills + MyCRI.KillingSpree[pid].LudicriousKills + MyCRI.KillingSpree[pid].HolyShitKills + MyCRI.MultiKills1[pid].KillingSpree + MyCRI.MultiKills1[pid].Rampage + MyCRI.MultiKills1[pid].Dominating + MyCRI.MultiKills2[pid].UnStoppable + MyCRI.MultiKills2[pid].Godlike + MyCRI.MultiKills2[pid].Ownage + MyCRI.CoversSpreeCount[pid] + MyCRI.SealsSpreeCount[pid]; break; case Class'EUTTDMHud': case Class'EUTDMHud': Total = MyCRI.KillingSpree[pid].UltraKills + MyCRI.KillingSpree[pid].MonsterKills + MyCRI.KillingSpree[pid].LudicriousKills + MyCRI.KillingSpree[pid].HolyShitKills + MyCRI.MultiKills1[pid].KillingSpree + MyCRI.MultiKills1[pid].Rampage + MyCRI.MultiKills1[pid].Dominating + MyCRI.MultiKills2[pid].UnStoppable + MyCRI.MultiKills2[pid].Godlike + MyCRI.MultiKills2[pid].Ownage; break; } if (C.ClipX > 800) C.Font = _FontInfo.GetSmallFont( C.ClipX ); else C.Font = _FontInfo.GetSmallestFont( C.ClipX ); switch (PRI.Team) { case 0: C.DrawColor = RedColor; break; case 1: C.DrawColor = BlueColor; break; case 2: C.DrawColor = GreenColor; break; case 3: C.DrawColor = GoldColor; break; case 255: C.DrawColor = BronzeColor; break; } if (bLocal) C.DrawColor = WhiteColor; C.SetPos(C.ClipX / 8, Y); C.DrawText(PRI.PlayerName, False); C.SetPos(TotalsLine, Y); C.DrawText(Total, False); C.SetPos(UltraKillLine, Y); switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': C.DrawText(MyCRI.KillingSpree[pid].UltraKills, False); C.SetPos(MonsterKillLine, Y); C.DrawText(MyCRI.KillingSpree[pid].MonsterKills, False); C.SetPos(LudKillLine, Y); C.DrawText(MyCRI.KillingSpree[pid].LudicriousKills, False); C.SetPos(HolyShitLine, Y); C.DrawText(MyCRI.KillingSpree[pid].HolyShitKills, False); C.SetPos(KillingSpreeLine, Y); C.DrawText(MyCRI.MultiKills1[pid].KillingSpree, False); C.SetPos(RampageLine, Y); C.DrawText(MyCRI.MultiKills1[pid].Rampage, False); C.SetPos(DominatingLine, Y); C.DrawText(MyCRI.MultiKills1[pid].Dominating, False); C.SetPos(UnStoppableLine, Y); C.DrawText(MyCRI.MultiKills2[pid].UnStoppable, False); C.SetPos(GodlikeLine, Y); C.DrawText(MyCRI.MultiKills2[pid].Godlike, False); C.SetPos(OwnageLine, Y); C.DrawText(MyCRI.MultiKills2[pid].Ownage, False); C.SetPos(CoversLine, Y); C.DrawText(MyCRI.CoversSpreeCount[pid], False); C.SetPos(SealsLine, Y); C.DrawText(MyCRI.SealsSpreeCount[pid], False); C.SetPos(ComboWhoreLine, Y); C.DrawText(MyCRI.ComboWhoreCount[pid], False); C.SetPos(FlakMonkeyLine, Y); C.DrawText(MyCRI.FlakMonkeyCount[pid], False); C.SetPos(HeadHunterLine, Y); switch (MyCRI.TextureSwitch) { case 0: C.DrawText(MyCRI.HeadHunterCount[pid], False); break; case 1: if (MyCRI.HeadHunterCount[pid] < 1) C.DrawText(MyCRI.HeadShotsCount[pid], False); else C.DrawText(MyCRI.HeadHunterCount[pid] * 31 + MyCRI.HeadShotsCount[pid], False); break; } break; case Class'EUTTDMHud': case Class'EUTDMHud': C.DrawText(MyCRI.KillingSpree[pid].UltraKills, False); C.SetPos(MonsterKillLine, Y); C.DrawText(MyCRI.KillingSpree[pid].MonsterKills, False); C.SetPos(LudKillLine, Y); C.DrawText(MyCRI.KillingSpree[pid].LudicriousKills, False); C.SetPos(HolyShitLine, Y); C.DrawText(MyCRI.KillingSpree[pid].HolyShitKills, False); C.SetPos(KillingSpreeLine, Y); C.DrawText(MyCRI.MultiKills1[pid].KillingSpree, False); C.SetPos(RampageLine, Y); C.DrawText(MyCRI.MultiKills1[pid].Rampage, False); C.SetPos(DominatingLine, Y); C.DrawText(MyCRI.MultiKills1[pid].Dominating, False); C.SetPos(UnStoppableLine, Y); C.DrawText(MyCRI.MultiKills2[pid].UnStoppable, False); C.SetPos(GodlikeLine, Y); C.DrawText(MyCRI.MultiKills2[pid].Godlike, False); C.SetPos(OwnageLine, Y); C.DrawText(MyCRI.MultiKills2[pid].Ownage, False); C.SetPos(CoversLine, Y); C.DrawText("0", False); C.SetPos(SealsLine, Y); C.DrawText("0", False); C.SetPos(ComboWhoreLine, Y); C.DrawText(MyCRI.ComboWhoreCount[pid], False); C.SetPos(FlakMonkeyLine, Y); C.DrawText(MyCRI.FlakMonkeyCount[pid], False); C.SetPos(HeadHunterLine, Y); switch (MyCRI.TextureSwitch) { case 0: C.DrawText(MyCRI.HeadHunterCount[pid], False); break; case 1: if (MyCRI.HeadHunterCount[pid] < 1) C.DrawText(MyCRI.HeadShotsCount[pid], False); else C.DrawText(MyCRI.HeadHunterCount[pid] * 31 + MyCRI.HeadShotsCount[pid], False); break; } break; } } //------------------------------------- // SortScoresRed //------------------------------------- function SortScoresRed(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if(MyCRI.CurrentTotalAccuracy[RedPRI[j].PlayerID] > MyCRI.CurrentTotalAccuracy[RedPRI[Max].PlayerID]) Max = J; else if((MyCRI.CurrentTotalAccuracy[RedPRI[j].PlayerID] == MyCRI.CurrentTotalAccuracy[RedPRI[Max].PlayerID]) &&(RedPRI[J].Deaths < RedPRI[Max].Deaths)) Max = J; else if((RedPRI[J].Score == RedPRI[Max].Score) &&(RedPRI[J].Deaths == RedPRI[Max].Deaths) &&(RedPRI[J].PlayerID < RedPRI[Max].Score)) Max = J; } TempPRI = RedPRI[Max]; RedPRI[Max] = RedPRI[I]; RedPRI[I] = TempPRI; } break; case Class'EUTTDMHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if(MyCRI.CurrentTotalAccuracy[RedPRI[j].PlayerID] > MyCRI.CurrentTotalAccuracy[RedPRI[Max].PlayerID]) Max = J; else if((MyCRI.CurrentTotalAccuracy[RedPRI[j].PlayerID] == MyCRI.CurrentTotalAccuracy[RedPRI[Max].PlayerID]) &&(RedPRI[J].Deaths < RedPRI[Max].Deaths)) Max = J; else if((RedPRI[J].Score == RedPRI[Max].Score) &&(RedPRI[J].Deaths == RedPRI[Max].Deaths) &&(RedPRI[J].PlayerID < RedPRI[Max].Score)) Max = J; } TempPRI = RedPRI[Max]; RedPRI[Max] = RedPRI[I]; RedPRI[I] = TempPRI; } break; case Class'EUTDMHud': break; } } //------------------------------------- // SortScoresBlue //------------------------------------- function SortScoresBlue(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if(MyCRI.CurrentTotalAccuracy[BluePRI[j].PlayerID] > MyCRI.CurrentTotalAccuracy[BluePRI[Max].PlayerID]) Max = J; else if((MyCRI.CurrentTotalAccuracy[BluePRI[j].PlayerID] == MyCRI.CurrentTotalAccuracy[BluePRI[Max].PlayerID]) &&(BluePRI[J].Deaths < BluePRI[Max].Deaths)) Max = J; else if((BluePRI[J].Score == BluePRI[Max].Score) &&(BluePRI[J].Deaths == BluePRI[Max].Deaths) &&(BluePRI[J].PlayerID < BluePRI[Max].Score)) Max = J; } TempPRI = BluePRI[Max]; BluePRI[Max] = BluePRI[I]; BluePRI[I] = TempPRI; } break; case Class'EUTTDMHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if(MyCRI.CurrentTotalAccuracy[BluePRI[j].PlayerID] > MyCRI.CurrentTotalAccuracy[BluePRI[Max].PlayerID]) Max = J; else if((MyCRI.CurrentTotalAccuracy[BluePRI[j].PlayerID] == MyCRI.CurrentTotalAccuracy[BluePRI[Max].PlayerID]) &&(BluePRI[J].Deaths < BluePRI[Max].Deaths)) Max = J; else if((BluePRI[J].Score == BluePRI[Max].Score) &&(BluePRI[J].Deaths == BluePRI[Max].Deaths) &&(BluePRI[J].PlayerID < BluePRI[Max].Score)) Max = J; } TempPRI = BluePRI[Max]; BluePRI[Max] = BluePRI[I]; BluePRI[I] = TempPRI; } break; case Class'EUTDMHud': break; } } //------------------------------------- // SortScores //------------------------------------- function SortScores(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; if (bDM) { for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if(MyCRI.CurrentTotalAccuracy[OrderedPRI[j].PlayerID] > MyCRI.CurrentTotalAccuracy[OrderedPRI[Max].PlayerID]) Max = J; else if((MyCRI.CurrentTotalAccuracy[OrderedPRI[j].PlayerID] == MyCRI.CurrentTotalAccuracy[OrderedPRI[Max].PlayerID]) &&(OrderedPRI[J].Deaths < OrderedPRI[Max].Deaths)) Max = J; else if((OrderedPRI[J].Score == OrderedPRI[Max].Score) &&(OrderedPRI[J].Deaths == OrderedPRI[Max].Deaths) &&(OrderedPRI[J].PlayerID < OrderedPRI[Max].Score)) Max = J; } TempPRI = OrderedPRI[Max]; OrderedPRI[Max] = OrderedPRI[I]; OrderedPRI[I] = TempPRI; } } } //------------------------------------- // SortScoresRed2 //------------------------------------- function SortScoresRed2(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if(MyCRI.KillingSpree[RedPRI2[j].PlayerID].UltraKills + MyCRI.KillingSpree[RedPRI2[j].PlayerID].MonsterKills + MyCRI.KillingSpree[RedPRI2[j].PlayerID].LudicriousKills + MyCRI.KillingSpree[RedPRI2[j].PlayerID].HolyShitKills > MyCRI.KillingSpree[RedPRI2[Max].PlayerID].UltraKills + MyCRI.KillingSpree[RedPRI2[Max].PlayerID].MonsterKills + MyCRI.KillingSpree[RedPRI2[Max].PlayerID].LudicriousKills + MyCRI.KillingSpree[RedPRI2[Max].PlayerID].HolyShitKills) Max = J; else if((MyCRI.CurrentTotalAccuracy[RedPRI2[j].PlayerID] == MyCRI.CurrentTotalAccuracy[RedPRI2[Max].PlayerID]) &&(RedPRI2[J].Deaths < RedPRI2[Max].Deaths)) Max = J; else if((RedPRI2[J].Score == RedPRI2[Max].Score) &&(RedPRI2[J].Deaths == RedPRI2[Max].Deaths) &&(RedPRI2[J].PlayerID < RedPRI2[Max].Score)) Max = J; } TempPRI = RedPRI2[Max]; RedPRI2[Max] = RedPRI2[I]; RedPRI2[I] = TempPRI; } break; case Class'EUTTDMHud': for (I = 0; I < N - 1; I++) { Max = I; for ( J = I + 1; J < N; J++ ) { if(MyCRI.KillingSpree[RedPRI2[j].PlayerID].UltraKills + MyCRI.KillingSpree[RedPRI2[j].PlayerID].MonsterKills + MyCRI.KillingSpree[RedPRI2[j].PlayerID].LudicriousKills + MyCRI.KillingSpree[RedPRI2[j].PlayerID].HolyShitKills > MyCRI.KillingSpree[RedPRI2[Max].PlayerID].UltraKills + MyCRI.KillingSpree[RedPRI2[Max].PlayerID].MonsterKills + MyCRI.KillingSpree[RedPRI2[Max].PlayerID].LudicriousKills + MyCRI.KillingSpree[RedPRI2[Max].PlayerID].HolyShitKills) Max = J; else if((MyCRI.CurrentTotalAccuracy[RedPRI2[j].PlayerID] == MyCRI.CurrentTotalAccuracy[RedPRI2[Max].PlayerID]) &&(RedPRI2[J].Deaths < RedPRI2[Max].Deaths)) Max = J; else if((RedPRI2[J].Score == RedPRI2[Max].Score) &&(RedPRI2[J].Deaths == RedPRI2[Max].Deaths) &&(RedPRI2[J].PlayerID < RedPRI2[Max].Score)) Max = J; } TempPRI = RedPRI2[Max]; RedPRI2[Max] = RedPRI2[I]; RedPRI2[I] = TempPRI; } break; case Class'EUTDMHud': break; } } //------------------------------------- // SortScoresBlue2 //------------------------------------- function SortScoresBlue2(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if(MyCRI.KillingSpree[BluePRI2[j].PlayerID].UltraKills + MyCRI.KillingSpree[BluePRI2[j].PlayerID].MonsterKills + MyCRI.KillingSpree[BluePRI2[j].PlayerID].LudicriousKills + MyCRI.KillingSpree[BluePRI2[j].PlayerID].HolyShitKills > MyCRI.KillingSpree[BluePRI2[Max].PlayerID].UltraKills + MyCRI.KillingSpree[BluePRI2[Max].PlayerID].MonsterKills + MyCRI.KillingSpree[BluePRI2[Max].PlayerID].LudicriousKills + MyCRI.KillingSpree[BluePRI2[Max].PlayerID].HolyShitKills) Max = J; else if((MyCRI.CurrentTotalAccuracy[BluePRI2[j].PlayerID] == MyCRI.CurrentTotalAccuracy[BluePRI2[Max].PlayerID]) &&(BluePRI2[J].Deaths < BluePRI2[Max].Deaths)) Max = J; else if((BluePRI2[J].Score == BluePRI2[Max].Score) &&(BluePRI2[J].Deaths == BluePRI2[Max].Deaths) &&(BluePRI2[J].PlayerID < BluePRI2[Max].Score)) Max = J; } TempPRI = BluePRI2[Max]; BluePRI2[Max] = BluePRI2[I]; BluePRI2[I] = TempPRI; } break; case Class'EUTTDMHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if(MyCRI.KillingSpree[BluePRI2[j].PlayerID].UltraKills + MyCRI.KillingSpree[BluePRI2[j].PlayerID].MonsterKills + MyCRI.KillingSpree[BluePRI2[j].PlayerID].LudicriousKills + MyCRI.KillingSpree[BluePRI2[j].PlayerID].HolyShitKills > MyCRI.KillingSpree[BluePRI2[Max].PlayerID].UltraKills + MyCRI.KillingSpree[BluePRI2[Max].PlayerID].MonsterKills + MyCRI.KillingSpree[BluePRI2[Max].PlayerID].LudicriousKills + MyCRI.KillingSpree[BluePRI2[Max].PlayerID].HolyShitKills) Max = J; else if((MyCRI.CurrentTotalAccuracy[BluePRI2[j].PlayerID] == MyCRI.CurrentTotalAccuracy[BluePRI2[Max].PlayerID]) &&(BluePRI2[J].Deaths < BluePRI2[Max].Deaths)) Max = J; else if((BluePRI2[J].Score == BluePRI2[Max].Score) &&(BluePRI2[J].Deaths == BluePRI2[Max].Deaths) &&(BluePRI2[J].PlayerID < BluePRI2[Max].Score)) Max = J; } TempPRI = BluePRI2[Max]; BluePRI2[Max] = BluePRI2[I]; BluePRI2[I] = TempPRI; } break; case Class'EUTDMHud': break; } } //------------------------------------- // SortScores2 //------------------------------------- function SortScores2(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; if (bDM) { for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if (MyCRI.KillingSpree[OrderedPRI2[j].PlayerID].UltraKills + MyCRI.KillingSpree[OrderedPRI2[j].PlayerID].MonsterKills + MyCRI.KillingSpree[OrderedPRI2[j].PlayerID].LudicriousKills + MyCRI.KillingSpree[OrderedPRI2[j].PlayerID].HolyShitKills > MyCRI.KillingSpree[OrderedPRI2[Max].PlayerID].UltraKills + MyCRI.KillingSpree[OrderedPRI2[Max].PlayerID].MonsterKills + MyCRI.KillingSpree[OrderedPRI2[Max].PlayerID].LudicriousKills + MyCRI.KillingSpree[OrderedPRI2[Max].PlayerID].HolyShitKills) Max = J; else if((MyCRI.CurrentTotalAccuracy[OrderedPRI2[j].PlayerID] == MyCRI.CurrentTotalAccuracy[OrderedPRI2[Max].PlayerID]) &&(OrderedPRI2[J].Deaths < OrderedPRI2[Max].Deaths)) Max = J; else if((OrderedPRI2[J].Score == OrderedPRI2[Max].Score) &&(OrderedPRI2[J].Deaths == OrderedPRI2[Max].Deaths) &&(OrderedPRI2[J].PlayerID < OrderedPRI2[Max].Score)) Max = J; } TempPRI = OrderedPRI2[Max]; OrderedPRI2[Max] = OrderedPRI2[I]; OrderedPRI2[I] = TempPRI; } } } //------------------------------------- // defaultproperties //------------------------------------- B0@H>@y/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTServerInfo <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTServerInfo expands ServerInfoTeam; var EUTGameReplicationInfo MyCRI; var PlayerReplicationInfo RedPRI[32]; var PlayerReplicationInfo BluePRI[32]; var PlayerReplicationInfo Ordered[32]; var FontInfo _FontInfo; var bool bCTF, bTDM, bDM; var color ShadeColor, RedColor, BlueColor, GreenColor, GoldColor, WhiteColor, GrayColor, CyanColor, BronzeColor; var float FloatingY, RankLine, ScoresLine, KillsLine, DeathsLine, EffLine, CapsLine, AssistLine, CoversLine, GrabsLine, SavesLine, DeniedLine, SealsLine, FKillsLine, IpLine, AccLine; var localized string ServerInfoText, ContactInfoText, NameText, AdminText, EMailText, UnknownText, MOTD, ServerStatsText, FragsLoggedText, GamesHostedText, VictimsText, GameStatsText, GameTypeText, PlayersText, FragsText, TopPlayersText, BestNameText, BestFPHText, BestRecordSetText, BotText, FlagsCapturedText, TotalGrabsText, TotalSealsText, TotalAssistsText, TotalCoversText, TotalFlagKillsText, TotalDeniedText, TotalSavesText, PlayerStatsText, BestPlayersText[3]; var string ServerName; var texture BoxFill; //------------------------------------- // Destroyed //------------------------------------- function Destroyed() { Super.Destroyed(); if (_FontInfo != none) _FontInfo.Destroy(); } //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { Super.PostBeginPlay(); _FontInfo = FontInfo(Spawn(Class(DynamicLoadObject(class'ChallengeHUD'.default.FontInfoClass, class'Class')))); LoadTextures(); } //------------------------------------- // LoadTextures //------------------------------------- final function LoadTextures() { BoxFill = Texture(DynamicLoadObject("EUT_Textures.EUT_Fill", class'Texture')); bCTF = false; bTDM = false; bDM = false; } //------------------------------------- // RenderInfo //------------------------------------- function RenderInfo(canvas C) { local GameReplicationInfo GRI; GRI = PlayerPawn(Owner).GameReplicationInfo; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': bCTF = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); PlayerStatsText = "SmartCTF Stats Plus"; break; case Class'EUTTDMHud': bTDM = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); PlayerStatsText = "EUTTeamGame Stats Plus"; break; case Class'EUTDMHud': bDM = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); PlayerStatsText = "EUTDeathMatch Stats Plus"; break; } DrawTitle(C); if (C.ClipX > 512) { ServerName = GRI.ServerName; DrawShadedBack(C); DrawContactInfos(C, GRI, true); DrawServerStats(C, GRI); DrawCurrentStats(C, GRI); DrawGameStats(C, GRI); } else DrawContactInfos(C, GRI, false); } //------------------------------------- // DrawTitle //------------------------------------- function DrawTitle(canvas C) { local float XL, YL; C.Font = _FontInfo.GetHugeFont(C.ClipX); C.DrawColor = GrayColor; C.StrLen(ServerInfoText, XL, YL); C.SetPos((C.ClipX - XL) / 2, YL); C.DrawText(ServerInfoText, true); } //------------------------------------- // DrawShadedBack //------------------------------------- function DrawShadedBack(Canvas C) { C.DrawColor = ShadeColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(0,0); C.DrawRect(BoxFill, C.ClipX, C.ClipY); C.Style = ERenderStyle.STY_Normal; } //------------------------------------- // DrawMotd //------------------------------------- function DrawMotd( canvas C, GameReplicationInfo GRI ) { } //------------------------------------- // DrawGameStats //------------------------------------- function DrawGameStats( canvas C, GameReplicationInfo GRI ) { local float XL, YL, XL2, YL2, Y, X; local TournamentGameReplicationInfo TGRI; local byte i, NumBots; TGRI = TournamentGameReplicationInfo(GRI); C.DrawColor = GrayColor; C.Font = _FontInfo.GetBigFont(C.ClipX); C.StrLen("####", XL, YL); X = C.ClipX / 8; Y = (C.ClipY / 8) * 2 + (YL + 1); C.SetPos(X, (C.ClipY / 8) * 2 ); C.DrawText(GameStatsText, True); C.DrawColor = CyanColor; C.Font = _FontInfo.GetSmallFont( C.ClipX ); C.StrLen("########", XL2, YL2); YL2 = YL2 + 1; C.SetPos(X, Y); C.DrawText(GameTypeText, True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y); C.DrawText(GRI.GameName, True); C.DrawColor = CyanColor; C.SetPos(X, Y + YL2); C.DrawText(PlayersText, True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + YL2); for (i = 0; i < 32; i++) if ((GRI.PRIArray[i] != None) && (GRI.PRIArray[i].bIsABot)) NumBots++; C.DrawText(GRI.NumPlayers$" ["$NumBots@BotText$"]", True); if (PlayerPawn(Owner).HudType == Class'EUTDMHud') { C.StrLen("##############", XL2, YL2); C.DrawColor = CyanColor; C.SetPos(X, Y + (YL2*2)); C.DrawText("Best FPH #1:", True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + (YL2*2)); C.DrawText(TGRI.BestPlayers[0]$" "$TGRI.BestFPHs[0]$" "$TGRI.BestRecordDate[0], True); C.DrawColor = CyanColor; C.SetPos(X, Y + (YL2*3)); C.DrawText("Best FPH #2:", True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + (YL2*3)); C.DrawText(TGRI.BestPlayers[1]$" "$TGRI.BestFPHs[1]$" "$TGRI.BestRecordDate[1], True); C.DrawColor = CyanColor; C.SetPos(X, Y + (YL2*4)); C.DrawText("Best FPH #3:", True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + (YL2*4)); C.DrawText(TGRI.BestPlayers[2]$" "$TGRI.BestFPHs[2]$" "$TGRI.BestRecordDate[2], True); } } //------------------------------------- // DrawLeaderBoards //------------------------------------- function DrawLeaderBoards( canvas C, GameReplicationInfo GRI ) { } //------------------------------------- // DrawContactInfos //------------------------------------- function DrawContactInfos( canvas C, GameReplicationInfo GRI, bool bShort) { local float XL, YL, XL2, YL2, Y, X, ServerNameStart, ServerNameMax, ServerNameY, ServerNameX; C.DrawColor = GrayColor; C.Font = _FontInfo.GetBigFont(C.ClipX); C.StrLen( "####", XL, YL ); C.SetPos(C.ClipX / 8, (C.ClipY / 8)); C.DrawText(ContactInfoText, True); C.DrawColor = CyanColor; C.Font = _FontInfo.GetSmallFont(C.ClipX); C.StrLen("########", XL2, YL2); YL2 = YL2 + 1; if (bShort) { X = C.ClipX / 8; Y = (C.ClipY / 8) + (YL + 1); } else { X = C.ClipX / 4; Y = (C.ClipY / 4) + (YL + 1); } C.StrLen(ServerName, ServerNameX, ServerNameY); ServerNameMax = (C.ClipX / 8) * 5 - 2; ServerNameStart = X + XL2; if(ServerNameX > ServerNameMax - ServerNameStart) { while(ServerNameX > ServerNameMax - ServerNameStart) { ServerName = Left(ServerName,Len(ServerName)-1); C.StrLen(ServerName, ServerNameX, ServerNameY); } } else ServerName = GRI.ServerName; C.SetPos(X,Y); C.DrawText(NameText, True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y); C.DrawText(ServerName, True); C.DrawColor = CyanColor; C.SetPos(X, Y + YL2); C.DrawText(AdminText, True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + YL2); if (GRI.AdminName != "") C.DrawText(GRI.AdminName, True); else C.DrawText(UnknownText, True); C.DrawColor = CyanColor; C.SetPos(X, Y + (YL2*2)); C.DrawText(EMailText, True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + (YL2*2)); if (GRI.AdminEmail != "") C.DrawText(GRI.AdminEmail, True); else C.DrawText(UnknownText, True); } //------------------------------------- // DrawServerStats //------------------------------------- function DrawServerStats( canvas C, GameReplicationInfo GRI ) { local float XL, YL, XL2, YL2, Y, X; local TournamentGameReplicationInfo TGRI; TGRI = TournamentGameReplicationInfo(GRI); C.DrawColor = GrayColor; C.Font = _FontInfo.GetBigFont(C.ClipX); C.StrLen("####", XL, YL); X = (C.ClipX / 8) * 5; Y = (C.ClipY / 8) + (YL + 1); C.SetPos(X, C.ClipY / 8); C.DrawText( ServerStatsText, True); C.DrawColor = CyanColor; C.Font = _FontInfo.GetSmallFont(C.ClipX); C.StrLen("###############", XL2, YL2); C.SetPos(X, Y); C.DrawText(GamesHostedText, True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y); C.DrawText(TGRI.TotalGames, True); YL2 = YL2 + 1; C.DrawColor = CyanColor; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': C.SetPos(X, Y + YL2); C.DrawText(FlagsCapturedText, True); C.SetPos(X, Y + (YL2*2)); C.DrawText(TotalGrabsText, True); C.SetPos(X, Y + (YL2*3)); C.DrawText(TotalAssistsText, True); C.SetPos(X, Y + (YL2*4)); C.DrawText(TotalCoversText, True); C.SetPos(X, Y + (YL2*5)); C.DrawText(TotalSealsText, True); C.SetPos(X, Y + (YL2*6)); C.DrawText(TotalFlagKillsText, True); C.SetPos(X, Y + (YL2*7)); C.DrawText(TotalDeniedText, True); C.SetPos(X, Y + (YL2*8)); C.DrawText(TotalSavesText, True); C.SetPos(X, Y + (YL2*9)); C.DrawText(BestPlayersText[0], True); C.SetPos(X, Y + (YL2*10)); C.DrawText(BestPlayersText[1], True); C.SetPos(X, Y + (YL2*11)); C.DrawText(BestPlayersText[2], True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + YL2); C.DrawText(TGRI.TotalFlags, True); C.SetPos(X + XL2, Y + (YL2*2)); C.DrawText(MyCRI.SmartStats.FlagGrabs, True); C.SetPos(X + XL2, Y + (YL2*3)); C.DrawText(MyCRI.SmartStats.FlagAssists, True); C.SetPos(X + XL2, Y + (YL2*4)); C.DrawText(MyCRI.SmartStats.FlagCovers, True); C.SetPos(X + XL2, Y + (YL2*5)); C.DrawText(MyCRI.SmartStats.BaseSeals, True); C.SetPos(X + XL2, Y + (YL2*6)); C.DrawText(MyCRI.SmartStats.FlagKills, True); C.SetPos(X + XL2, Y + (YL2*7)); C.DrawText(MyCRI.SmartStats.FlagDenied, True); C.SetPos(X + XL2, Y + (YL2*8)); C.DrawText(MyCRI.SmartStats.FlagSaves, True); C.SetPos(X + XL2, Y + (YL2*9)); C.DrawText(MyCRI.BestPlayers[2]$" "$MyCRI.BestRanking[2], True); C.SetPos(X + XL2, Y + (YL2*10)); C.DrawText(MyCRI.BestPlayers[1]$" "$MyCRI.BestRanking[1], True); C.SetPos(X + XL2, Y + (YL2*11)); C.DrawText(MyCRI.BestPlayers[0]$" "$MyCRI.BestRanking[0], True); FloatingY = Y + (YL2*13); break; case Class'EUTTDMHud': C.SetPos(X, Y + YL2); C.DrawText(FragsText, True); C.SetPos(X, Y + (YL2*2)); C.DrawText(VictimsText, True); C.SetPos(X, Y + (YL2*3)); C.DrawText(BestPlayersText[0], True); C.SetPos(X, Y + (YL2*4)); C.DrawText(BestPlayersText[1], True); C.SetPos(X, Y + (YL2*5)); C.DrawText(BestPlayersText[2], True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + YL2); C.DrawText(TGRI.TotalFrags, True); C.SetPos(X + XL2, Y + (YL2*2)); C.DrawText(TGRI.TotalDeaths, True); C.SetPos(X + XL2, Y + (YL2*3)); C.DrawText(MyCRI.BestTDMPlayers[2]$" "$MyCRI.BestTDMRanking[2], True); C.SetPos(X + XL2, Y + (YL2*4)); C.DrawText(MyCRI.BestTDMPlayers[1]$" "$MyCRI.BestTDMRanking[1], True); C.SetPos(X + XL2, Y + (YL2*5)); C.DrawText(MyCRI.BestTDMPlayers[0]$" "$MyCRI.BestTDMRanking[0], True); FloatingY = Y + (YL2*13); break; case Class'EUTDMHud': C.SetPos(X, Y + YL2); C.DrawText(FragsText, True); C.SetPos(X, Y + (YL2*2)); C.DrawText(VictimsText, True); C.SetPos(X, Y + (YL2*3)); C.DrawText(BestPlayersText[0], True); C.SetPos(X, Y + (YL2*4)); C.DrawText(BestPlayersText[1], True); C.SetPos(X, Y + (YL2*5)); C.DrawText(BestPlayersText[2], True); C.DrawColor = WhiteColor; C.SetPos(X + XL2, Y + YL2); C.DrawText(TGRI.TotalFrags, True); C.SetPos(X + XL2, Y + (YL2*2)); C.DrawText(TGRI.TotalDeaths, True); C.SetPos(X + XL2, Y + (YL2*3)); C.DrawText(MyCRI.BestDMPlayers[2]$" "$MyCRI.BestDMRanking[2], True); C.SetPos(X + XL2, Y + (YL2*4)); C.DrawText(MyCRI.BestDMPlayers[1]$" "$MyCRI.BestDMRanking[1], True); C.SetPos(X + XL2, Y + (YL2*5)); C.DrawText(MyCRI.BestDMPlayers[0]$" "$MyCRI.BestDMRanking[0], True); FloatingY = Y + (YL2*13); break; } } //------------------------------------- // DrawCurrentStats //------------------------------------- function DrawCurrentStats(Canvas C, GameReplicationInfo GRI) { local float XL, YL, Y, X, Start; local TournamentGameReplicationInfo TGRI; local byte i, NumRed, NumBlue, Total; local PlayerReplicationInfo PRI; C.DrawColor = GrayColor; C.Font = _FontInfo.GetBigFont( C.ClipX ); C.StrLen( PlayerStatsText, XL, YL ); C.SetPos( (C.ClipX - XL) / 2, FloatingY); C.DrawText( PlayerStatsText, True); C.DrawColor.R = 0; C.DrawColor.G = 255; C.DrawColor.B = 50; if (C.ClipX > 800) C.Font = _FontInfo.GetSmallFont( C.ClipX ); else C.Font = _FontInfo.GetSmallestFont( C.ClipX ); C.StrLen("12345678901234567890", XL, YL); X = C.ClipX / 8; Y = FloatingY + (YL * 2); C.SetPos(X, Y); C.DrawText("Player",True); C.SetPos(X + (XL + 7), Y); C.DrawText("Ranking",True); RankLine = X + (XL + 7); C.StrLen("Ranking", XL, YL); C.SetPos(RankLine + (XL + 7), Y); C.DrawText("Score",True); ScoresLine = RankLine + (XL + 7); C.StrLen("Score", XL, YL); C.SetPos(ScoresLine + (XL + 7), Y); C.DrawText("Kills",True); KillsLine = ScoresLine + (XL + 7); C.StrLen("Kills", XL, YL); C.SetPos(KillsLine + (XL + 7), Y); C.DrawText("Deaths",True); DeathsLine = KillsLine + (XL + 7); C.StrLen("Deaths", XL, YL); C.SetPos(DeathsLine + (XL + 7), Y); C.DrawText(" Eff ",True); EffLine = DeathsLine + (XL + 7); C.StrLen(" Eff ", XL, YL); C.SetPos(EffLine + (XL + 7), Y); C.DrawText("Acc",True); AccLine = EffLine + (XL + 7); switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': C.StrLen("###", XL, YL); C.SetPos(AccLine + (XL + 7), Y); C.DrawText("Cps",True); CapsLine = AccLine + (XL + 7); C.SetPos(CapsLine + (XL + 7), Y); C.DrawText("Ass",True); AssistLine = CapsLine + (XL + 7); C.SetPos(AssistLine + (XL + 7), Y); C.DrawText("Cov",True); CoversLine = AssistLine + (XL + 7); C.SetPos(CoversLine + (XL + 7), Y); C.DrawText("Gbs",True); GrabsLine = CoversLine + (XL + 7); C.SetPos(GrabsLine + (XL + 7), Y); C.DrawText("Svs",True); SavesLine = GrabsLine + (XL + 7); C.SetPos(SavesLine + (XL + 7), Y); C.DrawText("Den",True); DeniedLine = SavesLine + (XL + 7); C.SetPos(DeniedLine + (XL + 7), Y); C.DrawText("Sls",True); SealsLine = DeniedLine + (XL + 7); C.SetPos(SealsLine + (XL + 7), Y); C.DrawText("Fkl",True); FKillsLine = SealsLine + (XL + 7); C.SetPos(FKillsLine + (XL + 7), Y); C.DrawText("IP Address ",True); IpLine = FKillsLine + (XL + 7); break; case Class'EUTTDMHud': case Class'EUTDMHud': C.StrLen("###", XL, YL); C.SetPos(AccLine + (XL + 7), Y); C.DrawText("---",True); CapsLine = AccLine + (XL + 7); C.SetPos(CapsLine + (XL + 7), Y); C.DrawText("---",True); AssistLine = CapsLine + (XL + 7); C.SetPos(AssistLine + (XL + 7), Y); C.DrawText("---",True); CoversLine = AssistLine + (XL + 7); C.SetPos(CoversLine + (XL + 7), Y); C.DrawText("---",True); GrabsLine = CoversLine + (XL + 7); C.SetPos(GrabsLine + (XL + 7), Y); C.DrawText("---",True); SavesLine = GrabsLine + (XL + 7); C.SetPos(SavesLine + (XL + 7), Y); C.DrawText("---",True); DeniedLine = SavesLine + (XL + 7); C.SetPos(DeniedLine + (XL + 7), Y); C.DrawText("---",True); SealsLine = DeniedLine + (XL + 7); C.SetPos(SealsLine + (XL + 7), Y); C.DrawText("---",True); FKillsLine = SealsLine + (XL + 7); C.SetPos(FKillsLine + (XL + 7), Y); C.DrawText("IP Address ",True); IpLine = FKillsLine + (XL + 7); break; } switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': for (i = 0; i < ArrayCount(RedPRI); i++) RedPRI[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player") && (PRI.Team == 0)) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { RedPRI[NumRed] = PRI; NumRed++; if (NumRed == ArrayCount(RedPRI)) break; } } } SortScoresRed(NumRed); for (i = 0; i < ArrayCount(BluePRI); i++) BluePRI[i] = None; for (i = 0; i < 32; i ++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player") && (PRI.Team == 1)) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { BluePRI[NumBlue] = PRI; NumBlue++; if (NumBlue == ArrayCount(BluePRI)) break; } } } SortScoresBlue(NumBlue); C.StrLen( "TEST", XL, YL ); Start = FloatingY + (YL * 4); Y = Start; for (i = 0; i < NumRed; i++) { Y = Start + i * YL; DrawData(C, RedPRI[i], Y); } Start = FloatingY + (YL * 5) + (YL * NumRed); for (i = 0; i < NumBlue; i++) { Y = Start + i * YL; DrawData(C, BluePRI[i], Y); } break; case Class'EUTDMHud': for (i = 0; i < ArrayCount(Ordered); i++) Ordered[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player")) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { Ordered[Total] = PRI; Total++; if (Total == ArrayCount(Ordered)) break; } } } SortScores(Total); Start = FloatingY + (YL * 4); for (i = 0; i < Total; i++) { Y = Start + i * YL; DrawData(C, Ordered[i], Y); } break; } } //------------------------------------- // DrawData //------------------------------------- function DrawData(Canvas C, PlayerReplicationInfo PRI, float Y) { local float XL, YL, XL2, YL2, X; local bool bLocal; local PlayerPawn MyPlayer; local int eff; local byte i; MyPlayer = PlayerPawn(Owner); bLocal = (PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName); if (C.ClipX > 800) C.Font = _FontInfo.GetSmallFont( C.ClipX ); else C.Font = _FontInfo.GetSmallestFont( C.ClipX ); if (bCTF) i = 0; else i = 1; eff = GetEffeciency( PRI.PlayerID, i ); switch (PRI.Team) { case 0: C.DrawColor = RedColor; break; case 1: C.DrawColor = BlueColor; break; case 2: C.DrawColor = GreenColor; break; case 3: C.DrawColor = GoldColor; break; case 255: C.DrawColor = BronzeColor; break; } if (bLocal) C.DrawColor = WhiteColor; C.SetPos(C.ClipX/8, Y); C.DrawText(PRI.PlayerName, False); C.SetPos(RankLine, Y); switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': case Class'EUTDMHud': C.DrawText(MyCRI.CurrentRanking[PRI.PlayerID], False); break; } C.SetPos(ScoresLine, Y); C.DrawText(int(PRI.Score), False); C.SetPos(KillsLine, Y); switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': C.DrawText(MyCRI.TotalKills[PRI.PlayerID], False); C.SetPos(DeathsLine, Y); C.DrawText(MyCRI.TotalDeaths[PRI.PlayerID], False); C.SetPos(EffLine, Y); C.DrawText(eff, False); C.SetPos(AccLine, Y); C.DrawText(MyCRI.CurrentTotalAccuracy[PRI.PlayerID], False); C.SetPos(CapsLine, Y); C.DrawText(MyCRI.IStats1[PRI.PlayerID].FlagCaps, False); C.SetPos(AssistLine, Y); C.DrawText(MyCRI.IStats1[PRI.PlayerID].FlagAssists, False); C.SetPos(CoversLine, Y); C.DrawText(MyCRI.IStats3[PRI.PlayerID].FlagCovers, False); C.SetPos(GrabsLine, Y); C.DrawText(MyCRI.IStats1[PRI.PlayerID].FlagGrabs, False); C.SetPos(SavesLine, Y); C.DrawText(MyCRI.IStats2[PRI.PlayerID].FlagSaves, False); C.SetPos(DeniedLine, Y); C.DrawText(MyCRI.IStats2[PRI.PlayerID].FlagsDenied, False); C.SetPos(SealsLine, Y); C.DrawText(MyCRI.IStats1[PRI.PlayerID].BaseSeals, False); C.SetPos(FKillsLine, Y); C.DrawText(MyCRI.IStats2[PRI.PlayerID].FlagKills, False); if (MyCRI.bShowIPS) { C.SetPos(IpLine, Y); C.DrawText(MyCRI.StoredPlayerIP[PRI.PlayerID], False); } else { C.SetPos(IpLine, Y); C.DrawText("Disabled", False); } break; case Class'EUTTDMHud': case Class'EUTDMHud': C.DrawText(MyCRI.TotalKills[PRI.PlayerID], False); C.SetPos(DeathsLine, Y); C.DrawText(MyCRI.TotalDeaths[PRI.PlayerID], False); C.SetPos(EffLine, Y); C.DrawText(eff, False); C.SetPos(AccLine, Y); C.DrawText(MyCRI.CurrentTotalAccuracy[PRI.PlayerID], False); C.SetPos(CapsLine, Y); C.DrawText(MyCRI.IStats1[PRI.PlayerID].FlagAssists, False); C.SetPos(CoversLine, Y); if (MyCRI.bShowIPS) { C.SetPos(IpLine, Y); C.DrawText(MyCRI.StoredPlayerIP[PRI.PlayerID], False); } else { C.SetPos(IpLine, Y); C.DrawText("Disabled", False); } break; } } //------------------------------------- // GetEffeciency //------------------------------------- function int GetEffeciency( int pid, byte i ) { local int rv; switch (i) { case 0: case 1: rv = Clamp(int((float(MyCRI.TotalKills[pid]) / float(MyCRI.TotalKills[pid] + MyCRI.TotalDeaths[pid])) * 100), 0, 100); break; } return rv; } //------------------------------------- // SortScoresRed //------------------------------------- function SortScoresRed(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if (MyCRI.CurrentRanking[RedPRI[j].PlayerID] > MyCRI.CurrentRanking[RedPRI[Max].PlayerID]) Max = J; else if ((MyCRI.CurrentRanking[RedPRI[j].PlayerID] == MyCRI.CurrentRanking[RedPRI[Max].PlayerID]) && (RedPRI[J].Deaths < RedPRI[Max].Deaths)) Max = J; else if ((RedPRI[J].Score == RedPRI[Max].Score) && (RedPRI[J].Deaths == RedPRI[Max].Deaths) && (RedPRI[J].PlayerID < RedPRI[Max].Score)) Max = J; } TempPRI = RedPRI[Max]; RedPRI[Max] = RedPRI[I]; RedPRI[I] = TempPRI; } break; case Class'EUTTDMHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if (MyCRI.CurrentRanking[RedPRI[j].PlayerID] > MyCRI.CurrentRanking[RedPRI[Max].PlayerID]) Max = J; else if ((MyCRI.CurrentRanking[RedPRI[j].PlayerID] == MyCRI.CurrentRanking[RedPRI[Max].PlayerID]) && (RedPRI[J].Deaths < RedPRI[Max].Deaths)) Max = J; else if ((RedPRI[J].Score == RedPRI[Max].Score) && (RedPRI[J].Deaths == RedPRI[Max].Deaths) && (RedPRI[J].PlayerID < RedPRI[Max].Score)) Max = J; } TempPRI = RedPRI[Max]; RedPRI[Max] = RedPRI[I]; RedPRI[I] = TempPRI; } break; case Class'EUTDMHud': break; } } //------------------------------------- // SortScoresBlue //------------------------------------- function SortScoresBlue(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if (MyCRI.CurrentRanking[BluePRI[j].PlayerID] > MyCRI.CurrentRanking[BluePRI[Max].PlayerID]) Max = J; else if ((MyCRI.CurrentRanking[BluePRI[j].PlayerID] == MyCRI.CurrentRanking[BluePRI[Max].PlayerID]) && (BluePRI[J].Deaths < BluePRI[Max].Deaths)) Max = J; else if ((BluePRI[J].Score == BluePRI[Max].Score) && (BluePRI[J].Deaths == BluePRI[Max].Deaths) && (BluePRI[J].PlayerID < BluePRI[Max].Score)) Max = J; } TempPRI = BluePRI[Max]; BluePRI[Max] = BluePRI[I]; BluePRI[I] = TempPRI; } break; case Class'EUTTDMHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if (MyCRI.CurrentRanking[BluePRI[j].PlayerID] > MyCRI.CurrentRanking[BluePRI[Max].PlayerID]) Max = J; else if ((MyCRI.CurrentRanking[BluePRI[j].PlayerID] == MyCRI.CurrentRanking[BluePRI[Max].PlayerID]) && (BluePRI[J].Deaths < BluePRI[Max].Deaths)) Max = J; else if ((BluePRI[J].Score == BluePRI[Max].Score) && (BluePRI[J].Deaths == BluePRI[Max].Deaths) && (BluePRI[J].PlayerID < BluePRI[Max].Score)) Max = J; } TempPRI = BluePRI[Max]; BluePRI[Max] = BluePRI[I]; BluePRI[I] = TempPRI; } break; case Class'EUTDMHud': break; } } //------------------------------------- // SortScores //------------------------------------- function SortScores(int N) { local int I, J, Max; local PlayerReplicationInfo TempPRI; if (bDM) { for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if (MyCRI.CurrentRanking[Ordered[j].PlayerID] > MyCRI.CurrentRanking[Ordered[Max].PlayerID]) Max = J; else if ((MyCRI.CurrentRanking[Ordered[j].PlayerID] == MyCRI.CurrentRanking[Ordered[Max].PlayerID]) && (Ordered[J].Deaths < Ordered[Max].Deaths)) Max = J; else if ((Ordered[J].Score == Ordered[Max].Score) && (Ordered[J].Deaths == Ordered[Max].Deaths) && (Ordered[J].PlayerID < Ordered[Max].Score)) Max = J; } TempPRI = Ordered[Max]; Ordered[Max] = Ordered[I]; Ordered[I] = TempPRI; } } } //------------------------------------- // defaultproperties //------------------------------------- I>@K>@h/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTSayMessagePlus <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTSayMessagePlus expands EUTStringMessagePlus; //------------------------------------- // RenderComplexMessage //------------------------------------- static function RenderComplexMessage( Canvas C, out float XL, out float YL, optional string MessageString, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == None) return; C.DrawColor = Default.GreenColor; C.DrawText( RelatedPRI_1.PlayerName$": ", false ); C.SetPos( C.CurX, C.CurY - YL ); C.DrawColor = Default.LightGreenColor; C.DrawText( MessageString, false ); } //------------------------------------- // AssembleString //------------------------------------- static function string AssembleString( HUD MyHud, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional String MessageString ) { if (RelatedPRI_1 == None) return ""; if (RelatedPRI_1.PlayerName == "") return ""; return RelatedPRI_1.PlayerName$": "@MessageString; } //------------------------------------- // defaultproperties //------------------------------------- O>@sk/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTReadyFlag <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTReadyFlag extends GreenFlag; //------------------------------------- // PreBeginPlay //------------------------------------- event PreBeginPlay() { } //------------------------------------- // PostBeginPlay //------------------------------------- event PostBeginPlay() { } //------------------------------------- // SendHome //------------------------------------- function SendHome() { } //------------------------------------- // Drop //------------------------------------- function Drop(vector v) { } //------------------------------------- // Home //------------------------------------- auto state Home { ignores Touch, Timer, BeginState, EndState; } //------------------------------------- // defaultproperties //------------------------------------- L>P>@Q>@R>@T>@C/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTMutatorHelper <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTMutatorHelper extends Info; var EUTMutator MyMut; var ListItem iMutators; var ListItem eMutators; const MaxArray = 40; //------------------------------------- // SetGameInfo //------------------------------------- function SetGameInfo() { MyMut.bCTF = false; MyMut.bTDM = false; MyMut.bDM = false; if (Level.Game.IsA('SmartCTFGame')) { MyMut.bCTF = true; MyMut.MyCTF = SmartCTFGame(level.Game); if (MyMut.MyCTF.bTournament) { CreateTournamentFlag(); MyMut.Timer(); MyMut.SetTimer(0.333, True); } return; } if (Level.Game.IsA('EUTTeamGamePlus') && (!Level.Game.IsA('CTFGame'))) { MyMut.bTDM = true; MyMut.MyTGP = EUTTeamGamePlus(level.game); if (MyMut.MyTGP.bTournament) { CreateTournamentFlag(); MyMut.Timer(); MyMut.SetTimer(0.333, True); } return; } if (Level.Game.IsA('EUTDeathMatchPlus') && (!Level.Game.IsA('CTFGame')) && (!Level.Game.IsA('TeamGamePlus'))) { MyMut.bDM = true; MyMut.MyDM = EUTDeathMatchPlus(level.game); if (MyMut.MyDM.bTournament) { CreateTournamentFlag(); MyMut.Timer(); MyMut.SetTimer(0.333, True); } return; } if (!MyMut.bCTF && !MyMut.bTDM && !MyMut.bDM) CheckRestart(); } //------------------------------------- // CheckRestart //------------------------------------- function CheckRestart() { if (Level.Game.IsA('CTFGame') && (!Level.Game.IsA('SmartCTFGame'))) { LoadMutators(); Level.ServerTravel(Left(string(Level), InStr(string(Level), "."))$".unr"$"?game="$"EUTSource.SmartCTFGame"$"?mutator="$UsedMutators(),false); Log("Level Restart to Authorized CTF Gametype",'EUTWarning'); return; } if (Level.Game.IsA('TeamGamePlus') && (!Level.Game.IsA('CTFGame')) && (!Level.Game.IsA('SmartCTFGame')) && (!Level.Game.IsA('EUTTeamGamePlus'))) { LoadMutators(); Level.ServerTravel(Left(string(Level), InStr(string(Level), "."))$".unr"$"?game="$"EUTSource.EUTTeamGamePlus"$"?mutator="$UsedMutators(),false); Log("Level Restart to Authorized TDM Gametype",'EUTWarning'); return; } if (Level.Game.IsA('DeathMatchPlus') && (!Level.Game.IsA('SmartCTFGame')) && (!Level.Game.IsA('EUTTeamGamePlus')) && (!Level.Game.IsA('EUTDeathMatchPlus'))) { LoadMutators(); Level.ServerTravel(Left(string(Level), InStr(string(Level), "."))$".unr"$"?game="$"EUTSource.EUTDeathMatchPlus"$"?mutator="$UsedMutators(),false); Log("Level Restart to Authorized DM Gametype",'EUTWarning'); return; } } //------------------------------------- // CreateTournamentFlag //------------------------------------- final function CreateTournamentFlag() { local Actor A; MyMut.ReadyFlag = Spawn(class'EUTReadyFlag'); if (MyMut.ReadyFlag != None) return; foreach AllActors(class'Actor', A) { MyMut.ReadyFlag = Spawn(class'EUTReadyFlag', None,, A.Location); if (MyMut.ReadyFlag != None) return; } } //------------------------------------- // LoadMutators //------------------------------------- function LoadMutators() { local int z; local string next, desc; local ListItem Item; local Mutator M; local byte i; eMutators = None; Level.GetNextIntDesc("Engine.Mutator", 0, next, desc); while((next != "") && (z < 250)) { Item = new(None) class'ListItem'; i = InStr(desc, ","); if (i == -1) Item.Tag = desc; else Item.Tag = Left(desc, i); Item.Data = next; if (eMutators == None) eMutators = Item; else eMutators.AddSortedElement(eMutators, Item); z++; Level.GetNextIntDesc("Engine.Mutator", z, next, desc); } iMutators = None; for (M = Level.Game.BaseMutator.NextMutator; M != None; M = M.NextMutator) { Item = eMutators.DeleteElement(eMutators, String(M.Class)); if (Item != None) { if (iMutators == None) iMutators = Item; else iMutators.AddElement(Item); } else Log("Unknown Mutator in use: "@String(M.Class),'EUTWarning'); } } //------------------------------------- // UsedMutators //------------------------------------- function String UsedMutators() { local ListItem Item; local string rv; if (iMutators == None) return ""; rv = iMutators.Data; for (Item = iMutators.Next; Item != None; Item = Item.Next) rv = rv$","$Item.Data; return rv; } //------------------------------------- // LogStartup //------------------------------------- function LogStartup(byte Mode) { switch (Mode) { case 0: MyMut.MyCRI = EUTGameReplicationInfo(Level.Game.GameReplicationInfo); MyMut.MyLog("Check Defaults/Tweaking.............."$MyMut.MyCTF.default.bCheckDefaults); MyMut.MyLog("Log/Check Mod Items.................."$MyMut.MyCTF.default.bLogMods); MyMut.MyLog("EnhancedSprees ......................"$MyMut.MyCTF.default.bEnhancedSprees); MyMut.MyLog("EnhancedMessages....................."$MyMut.MyCTF.default.bEnhancedMessages); MyMut.MyLog("EnhancedDeathMessages................"$MyMut.MyCTF.default.bEnhancedDeathMessages); MyMut.MyLog("ShowIPS.............................."$MyMut.MyCTF.default.bShowIPS); MyMut.MyLog("HitSounds...... ....................."$MyMut.MyCTF.default.bHitSounds); MyMut.MyLog("Demo Requests........................"$MyMut.MyCTF.default.bDemoRequest); MyMut.MyLog("AnnouncerLevel......................."$MyMut.MyCTF.default.AnnouncerLevel); MyMut.MyLog("Max Trace............................"$MyMut.MyCTF.default.TraceDistance); MyMut.MyLog("Team Beacons........................."$MyMut.MyCTF.default.bTeamBeacon); MyMut.MyLog("Min Mouse Y.........................."$MyMut.MyCTF.default.MinY); MyMut.MyLog("Kick Speed Hack......................"$MyMut.MyCTF.default.bKickSpeedHack); MyMut.MyLog("Report Messages......................"$MyMut.MyCTF.default.bReport); MyMut.MyLog("Auto Taunts.........................."$MyMut.MyCTF.default.bAutoTaunts); MyMut.MyLog("AntiTimer............................"$MyMut.MyCTF.default.bAntiTimer); MyMut.MyLog("Stat Link............................"$MyMut.MyCTF.default.bStatLink); MyMut.MyLog("Auto Record Tourney.................."$MyMut.MyCTF.default.bAlwaysRecordTourney); MyMut.MyLog("Kick MinY............................"$MyMut.MyCTF.default.bKickMinY); MyMut.MyLog("No Overtime.........................."$MyMut.MyCTF.default.bNoOverTime); MyMut.MyLog("IpToCountry.........................."$MyMut.MyCTF.default.bIpToCountry); MyMut.MyLog("bUsesCustomWeapon...................."$MyMut.MyCTF.default.bUsesCustomWeapon); MyMut.MyLog("bNoFlockPawns........................"$MyMut.MyCTF.default.bNoFlockPawns); MyMut.MyLog("bNoDroppedFlags......................"$MyMut.MyCTF.default.bNoDroppedFlags); MyMut.MyLog("bPauseJoin..........................."$MyMut.default.bPauseJoin); MyMut.MyLog(""); MyMut.MyLog("CTF.....:"$MyMut.bCTF); MyMut.MyLog("TDM.....:"$MyMut.bTDM); MyMut.MyLog("DM......:"$MyMut.bDM); MyMut.MyLog("*******************************************"); AssignGameBools(Mode); break; case 1: MyMut.MyCRI = EUTGameReplicationInfo(Level.Game.GameReplicationInfo); MyMut.MyLog("Check Defaults/Tweaking.............."$MyMut.MyTGP.default.bCheckDefaults); MyMut.MyLog("Log/Check Mod Items.................."$MyMut.MyTGP.default.bLogMods); MyMut.MyLog("EnhancedSprees ......................"$MyMut.MyTGP.default.bEnhancedSprees); MyMut.MyLog("EnhancedMessages....................."$MyMut.MyTGP.default.bEnhancedMessages); MyMut.MyLog("ShowIPS.............................."$MyMut.MyTGP.default.bShowIPS); MyMut.MyLog("HitSoundSounds ......................"$MyMut.MyTGP.default.bHitSounds); MyMut.MyLog("Demo Requests........................"$MyMut.MyTGP.default.bDemoRequest); MyMut.MyLog("AnnouncerLevel ......................"$MyMut.MyTGP.default.AnnouncerLevel); MyMut.MyLog("Max Trace............................"$MyMut.MyTGP.default.TraceDistance); MyMut.MyLog("Team Beacons........................."$MyMut.MyTGP.default.bTeamBeacon); MyMut.MyLog("Min Mouse Y.........................."$MyMut.MyTGP.default.MinY); MyMut.MyLog("Kick Speed Hack......................"$MyMut.MyTGP.default.bKickSpeedHack); MyMut.MyLog("Report Messages......................"$MyMut.MyTGP.default.bReport); MyMut.MyLog("Auto Taunts.........................."$MyMut.MyTGP.default.bAutoTaunts); MyMut.MyLog("AntiTimer............................"$MyMut.MyTGP.default.bAntiTimer); MyMut.MyLog("Stat Link............................"$MyMut.MyTGP.default.bStatLink); MyMut.MyLog("Auto Record Tourney.................."$MyMut.MyTGP.default.bAlwaysRecordTourney); MyMut.MyLog("Kick MinY............................"$MyMut.MyTGP.default.bKickMinY); MyMut.MyLog("No Overtime.........................."$MyMut.MyTGP.default.bNoOverTime); MyMut.MyLog("IpToCountry.........................."$MyMut.MyTGP.default.bIpToCountry); MyMut.MyLog("bUsesCustomWeapon...................."$MyMut.MyTGP.default.bUsesCustomWeapon); MyMut.MyLog("bSuddenDeathOverTime................."$MyMut.MyTGP.default.bSuddenDeathOverTime); MyMut.MyLog("bNoFlockPawns........................"$MyMut.MyTGP.default.bNoFlockPawns); MyMut.MyLog("bPauseJoin..........................."$MyMut.default.bPauseJoin); MyMut.MyLog(""); MyMut.MyLog("CTF.....:"$MyMut.bCTF); MyMut.MyLog("TDM.....:"$MyMut.bTDM); MyMut.MyLog("DM......:"$MyMut.bDM); MyMut.MyLog("*******************************************"); AssignGameBools(Mode); break; case 2: MyMut.MyCRI = EUTGameReplicationInfo(Level.Game.GameReplicationInfo); MyMut.MyLog("Check Defaults/Tweaking.............."$MyMut.MyDM.default.bCheckDefaults); MyMut.MyLog("Log/Check Mod Items.................."$MyMut.MyDM.default.bLogMods); MyMut.MyLog("EnhancedSprees ......................"$MyMut.MyDM.default.bEnhancedSprees); MyMut.MyLog("EnhancedMessages....................."$MyMut.MyDM.default.bEnhancedMessages); MyMut.MyLog("ShowIPS.............................."$MyMut.MyDM.default.bShowIPS); MyMut.MyLog("HitSoundSounds ......................"$MyMut.MyDM.default.bHitSounds); MyMut.MyLog("Demo Requests........................"$MyMut.MyDM.default.bDemoRequest); MyMut.MyLog("AnnouncerLevel ......................"$MyMut.MyDM.default.AnnouncerLevel); MyMut.MyLog("Max Trace............................"$MyMut.MyDM.default.TraceDistance); MyMut.MyLog("Team Beacons........................."$MyMut.MyDM.default.bLeaderBeacon); MyMut.MyLog("Min Mouse Y.........................."$MyMut.MyDM.default.MinY); MyMut.MyLog("Kick Speed Hack......................"$MyMut.MyDM.default.bKickSpeedHack); MyMut.MyLog("Report Messages......................"$MyMut.MyDM.default.bReport); MyMut.MyLog("Auto Taunts.........................."$MyMut.MyDM.default.bAutoTaunts); MyMut.MyLog("AntiTimer............................"$MyMut.MyDM.default.bAntiTimer); MyMut.MyLog("Stat Link............................"$MyMut.MyDM.default.bStatLink); MyMut.MyLog("Auto Record Tourney.................."$MyMut.MyDM.default.bAlwaysRecordTourney); MyMut.MyLog("Kick MinY............................"$MyMut.MyDM.default.bKickMinY); MyMut.MyLog("No Overtime.........................."$MyMut.MyDM.default.bNoOverTime); MyMut.MyLog("IpToCountry.........................."$MyMut.MyDM.default.bIpToCountry); MyMut.MyLog("bUsesCustomWeapon...................."$MyMut.MyDM.default.bUsesCustomWeapon); MyMut.MyLog("bNoFlockPawns........................"$MyMut.MyDM.default.bNoFlockPawns); MyMut.MyLog("bPauseJoin..........................."$MyMut.default.bPauseJoin); MyMut.MyLog(""); MyMut.MyLog("CTF.....:"$MyMut.bCTF); MyMut.MyLog("TDM.....:"$MyMut.bTDM); MyMut.MyLog("DM......:"$MyMut.bDM); MyMut.MyLog("*******************************************"); AssignGameBools(Mode); break; } } //------------------------------------- // AssignGameBools //------------------------------------- function AssignGameBools(byte Mode) { switch (Mode) { case 0: MyMut.bCheckDefaults = MyMut.MyCTF.default.bCheckDefaults; MyMut.bAutoTaunts = MyMut.MyCTF.default.bAutoTaunts; MyMut.bReport = MyMut.MyCTF.default.bReport; MyMut.bRecordTourney = MyMut.MyCTF.default.bAlwaysRecordTourney; MyMut.bDemoRequests = MyMut.MyCTF.default.bDemoRequest; MyMut.bKickMinY = MyMut.MyCTF.default.bKickMinY; MyMut.bLogMods = MyMut.MyCTF.default.bLogMods; MyMut.bKickSpeedHack = MyMut.MyCTF.Default.bKickSpeedHack; MyMut.MinY = MyMut.MyCTF.default.MinY; MyMut.bNoFlockPawns = MyMut.MyCTF.default.bNoFlockPawns; break; case 1: MyMut.bCheckDefaults = MyMut.MyTGP.default.bCheckDefaults; MyMut.bAutoTaunts = MyMut.MyTGP.default.bAutoTaunts; MyMut.bReport = MyMut.MyTGP.default.bReport; MyMut.bRecordTourney = MyMut.MyTGP.default.bAlwaysRecordTourney; MyMut.bDemoRequests = MyMut.MyTGP.default.bDemoRequest; MyMut.bKickMinY = MyMut.MyTGP.default.bKickMinY; MyMut.bLogMods = MyMut.MyTGP.default.bLogMods; MyMut.bKickSpeedHack = MyMut.MyTGP.Default.bKickSpeedHack; MyMut.MinY = MyMut.MyTGP.default.MinY; MyMut.bNoFlockPawns = MyMut.MyTGP.default.bNoFlockPawns; break; case 2: MyMut.bCheckDefaults = MyMut.MyDM.default.bCheckDefaults; MyMut.bAutoTaunts = MyMut.MyDM.default.bAutoTaunts; MyMut.bReport = MyMut.MyDM.default.bReport; MyMut.bRecordTourney = MyMut.MyDM.default.bAlwaysRecordTourney; MyMut.bDemoRequests = MyMut.MyDM.default.bDemoRequest; MyMut.bKickMinY = MyMut.MyDM.default.bKickMinY; MyMut.bLogMods = MyMut.MyDM.default.bLogMods; MyMut.bKickSpeedHack = MyMut.MyDM.Default.bKickSpeedHack; MyMut.MinY = MyMut.MyDM.default.MinY; MyMut.bNoFlockPawns = MyMut.MyDM.default.bNoFlockPawns; break; } } //------------------------------------- // GetClientIP //------------------------------------- function string GetClientIP(PlayerPawn MyPlayer) { local string rv; rv = MyPlayer.GetPlayerNetworkAddress(); if (Instr(rv,":") != -1) rv = Left(rv, InStr(rv,":")); return rv; } //------------------------------------- // FindIndexPI //------------------------------------- function int FindIndexPI(Pawn p) { local int i; for (i = 0; i < MaxArray; i++) if ((MyMut.PlayerList[i] != None) && (MyMut.PlayerList[i] == p)) return i; return -1; } //------------------------------------- // FindIndexPRI //------------------------------------- function int FindIndexPRI(PlayerPawn MyPlayer) { local int i; for (i = 0; i < MaxArray; i++) if (( MyMut.PlayerList[i] != None) && (MyMut.PlayerList[i] == MyPlayer)) return i; return -1; } //------------------------------------- // SetNewPlayerId //------------------------------------- final function SetNewPlayerId(Pawn P) { local Pawn NP; local int ID[40]; local int i; for (NP = Level.PawnList; NP != None; NP = NP.NextPawn ) ID[NP.PlayerReplicationInfo.PlayerID] = 1; for (i = 0; i < 32; i++) { if (ID[i] == 0) { P.PlayerReplicationInfo.PlayerID = i; Level.Game.AddDefaultInventory(P); break; } } } //------------------------------------- // IsLevelActive //------------------------------------- function bool IsLevelActive() { if ( Level.Game.IsA('DeathMatchPlus') ) if ( MyMut.DMP.bGameEnded ) return false; return true; } //------------------------------------- // LogDate //------------------------------------- function string LogDate() { local string d, t; d = Level.Year$"-"$PrePad(Level.Month,"0",2)$"-"$PrePad(Level.Day,"0",2); t = PrePad(Level.Hour,"0",2)$":"$PrePad(Level.Minute,"0",2)$"."$PrePad(Level.Second,"0",2); return d@t; } //------------------------------------- // PrePad //------------------------------------- function string PrePad(coerce string rv, string p, int i) { while (Len(rv) < i) rv = p$rv; return rv; } //------------------------------------- // SterilizeString //------------------------------------- function string SterilizeString(string s) { local string rv; local int i; rv = ""; for (i = 0; i < Len(s); i++) { if (InStr("\/*?:<>|"$Chr(34), Mid(s, i, 1)) != -1) rv = rv $ "_"; else rv = rv $ Mid(s, i, 1); } return rv; } //------------------------------------- // VerifyHudType //------------------------------------- function VerifyHudType(Pawn P) { if (MyMut.bCTF) { MyMut.MyCRI = EUTGameReplicationInfo(Level.Game.GameReplicationInfo); if (PlayerPawn(P).HUDType != Class'EUTCTFHud') LogInfraction(PlayerPawn(P), 0, "BH", ""); else if (PlayerPawn(P).ScoringType != Class'EUTCTFSB') LogInfraction(PlayerPawn(P), 0, "BSB", ""); return; } if (MyMut.bTDM) { MyMut.MyCRI = EUTGameReplicationInfo(Level.Game.GameReplicationInfo); if (PlayerPawn(P).HUDType != Class'EUTTDMHud') LogInfraction(PlayerPawn(P), 0, "BH", ""); else if (PlayerPawn(P).ScoringType != Class'EUTTDMSB') LogInfraction(PlayerPawn(P), 0, "BSB", ""); return; } if (MyMut.bDM) { MyMut.MyCRI = EUTGameReplicationInfo(Level.Game.GameReplicationInfo); if (PlayerPawn(P).HUDType != Class'EUTDMHud') LogInfraction(PlayerPawn(P), 0, "BH", ""); else if (PlayerPawn(P).ScoringType != Class'EUTDMSB') LogInfraction(PlayerPawn(P), 0, "BSB", ""); return; } } //------------------------------------- // LogInfraction //------------------------------------- function LogInfraction(PlayerPawn MyPlayer, byte Offense, string Code, string Opt) { local string PlayerName; local string PlayerIP; if (MyPlayer == None) return; if (MyPlayer.PlayerReplicationInfo != none) { PlayerName = MyPlayer.PlayerReplicationInfo.PlayerName; PlayerIP = GetClientIP(MyPlayer); } if (Len(Code) > 255 || Len(Opt) > 255) { opt = string(Offense); Offense = 99; } switch (Offense) { case 0://Illegal Hud Detected case 1://Illegal Mod Menu Item Detected case 2://Illagal Face Texture Detected case 3://Client Changed MouseLook Settings case 4://Client Has Illegal Tweaks case 5://Client Has Illegal Tweaks case 6://Client Has Illegal Tweaks case 7://Client Has Illegal Tweaks case 8://Client Changed MouseLook Settings MyMut.GameLog("****************************************"); MyMut.GameLog(logdate()@"[EUT CHEAT] - "$Code$" - "$Opt@PlayerName@"[IP]"@PlayerIP); MyMut.GameLog("****************************************"); NotifyPlayer(MyPlayer,Offense,Code,Opt); break; case 9://Client Time Exceded Server Time + 20 if ( !MyMut.bKickSpeedHack ) return; else { MyMut.GameLog("****************************************"); MyMut.GameLog(logdate()@"[EUT CHEAT] - "$Code$" - "$Opt@PlayerName@"[IP]"@PlayerIP); MyMut.GameLog("****************************************"); NotifyPlayer(MyPlayer,Offense,Code,Opt); } case 10://Illegal Hook case 11://Illegal LodBias Settings case 12://Illegal Spectator case 13://Illagal MouseY Settings MyMut.GameLog("****************************************"); MyMut.GameLog(logdate()@"[EUT CHEAT] - "$Code$" - "$Opt@PlayerName@"[IP]"@PlayerIP); MyMut.GameLog("****************************************"); NotifyPlayer(MyPlayer,Offense,Code,Opt); break; case 99://Bad Info MyMut.GameLog("****************************************"); MyMut.GameLog(logdate()@"[EUT CHEAT] - "$"BI"$" - "$Opt@PlayerName@"[IP]"@PlayerIP); MyMut.GameLog("****************************************"); NotifyPlayer(MyPlayer,Offense,Code,Opt); break; } } //------------------------------------- // NotifyPlayer //------------------------------------- function NotifyPlayer(PlayerPawn MyPlayer, byte Offense, string Code, string Opt) { if (MyPlayer == None) return; MyMut.PlayerRIList[FindIndexPRI(MyPlayer)].OpenConsole(); MyPlayer.ClientMessage("****************************************"); switch (Offense) { case 0: MyPlayer.ClientMessage("Illegal Hud Detected -"$Code$"-"); break; case 1: MyPlayer.ClientMessage("Illegal Mod Menu Item Detected -"$Code$"-"@Opt); break; case 2: MyPlayer.ClientMessage("Illagal Face Texture Detected -"@Opt$"-"); break; case 3: MyPlayer.ClientMessage("MouseY Settings Changed "$Code$"-"); break; case 4: MyPlayer.ClientMessage("Illegal Tweaks Detected -"$Code$"-"); break; case 5: MyPlayer.ClientMessage("Illegal Tweaks Detected -"$Code$"-"); break; case 6: MyPlayer.ClientMessage("Illegal Tweaks Detected -"$Code$"-"); break; case 7: MyPlayer.ClientMessage("Illegal Tweaks Detected -"$Code$"-"); break; case 8: MyPlayer.ClientMessage("Mouse Input Settings Changed "$Code$"-"); break; case 9: MyPlayer.ClientMessage("Illegal Time Variation between Client and Server "$Code$"-"); break; case 10: MyPlayer.ClientMessage("Illegal Hook Detected "$Code$"-"); break; case 11: MyPlayer.ClientMessage("Illegal LodBias Settings "$Code$"-"); break; case 12: MyPlayer.ClientMessage("Illegal Spectator "$Code$"-"); break; case 13: MyPlayer.ClientMessage("Illegal Mouse Y Settings "$Code$"-"); break; case 99: MyPlayer.ClientMessage("Illegal Info Sent "$Code$"-"); break; } MyPlayer.ClientMessage("If You Feel This was In Error Contact The Server Administrator"@Level.Game.GameReplicationInfo.AdminEmail); MyPlayer.ClientMessage(MyMut.VersionStr$MyMut.ThisVer); MyPlayer.ClientMessage("****************************************"); KickPlayer(MyPlayer); } //------------------------------------- // BaseLog //------------------------------------- function BaseLog(PlayerPawn MyPlayer, byte Code, string Opt) { local string PlayerName; local string PlayerIP; if (MyPlayer == None) return; if (MyPlayer.PlayerReplicationInfo != none) { PlayerName = MyPlayer.PlayerReplicationInfo.PlayerName; PlayerIP = GetClientIP(MyPlayer); } if (Len(Opt) > 255) { opt = string(Code); Code = 99; } switch (Code) { case 0: MyMut.MyLog(LogDate()@PlayerName$"....Client Connected"@"[IP]"@PlayerIP); break; case 1: MyMut.MyLog(LogDate()@PlayerName$"....Spectator Connected"@"[IP]"@PlayerIP); break; case 2: MyMut.MyLog(LogDate()@PlayerName@"[ERROR]: CRI == None"@"[IP]"@PlayerIP); break; case 3: MyMut.MyLog(LogDate()@"Auto Destroying FlockPawn:"@MyPlayer); break; case 4: MyMut.MyLog(logdate()@PlayerName@"[IP]"@PlayerIP@"[MMI]"@Opt); break; case 5: MyMut.MyLog(logdate()@PlayerName@"[IP]"@PlayerIP@"[Client MouseY]"@Opt); break; case 6: MyMut.MyLog(logdate()@PlayerName@"[IP]"@PlayerIP@"[Client MouseX]"@Opt); break; case 99: MyMut.MyLog(logdate()@PlayerName@"[IP]"@PlayerIP@"[BI]"@opt); KickPlayer(MyPlayer); break; } } //------------------------------------- // KickPlayer //------------------------------------- function KickPlayer(PlayerPawn MyPlayer) { if (MyPlayer == None) return; MyPlayer.Destroy(); } //------------------------------------- // defaultproperties //------------------------------------- K@Tl/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTMutator <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTMutator extends Mutator config (EUTServer); var DeathMatchPlus DMP; var Decoration ReadyFlag; var EUTMutatorHelper EMH; var SmartCTFGame MyCTF; var EUTTeamGamePlus MyTGP; var EUTDeathMatchPlus MyDM; var EUTGameLog gLog; var EUTGameReplicationInfo MyCRI; var Class MyServerInfo; var int PlayerNetspeed[40], PlayerHeld[40]; var PlayerPawn PlayerList[40]; var EUTClientReplication PlayerRIList[40]; var vector PlayerVectorList[40]; var float PlayerLoginTime[40]; var string VersionStr, ThisVer; var bool bCTF, bTDM, bDM, bCheckDefaults, bAutoTaunts, bReport, bRecordTourney, bDemoRequests, bKickMinY, bLogMods, bKickSpeedHack, bLogStarted, bNoFlockPawns; var float MinY; var globalconfig bool bPauseJoin; var globalconfig float ClientLoginDelay; var globalconfig string LogFolder; var globalconfig string IllegalMods[100]; var globalconfig string AllowedMods[10]; const MaxArray = 40; const SpecCounter = 10; const MenuItem = ".EUTLockedMenuItem"; const SoFunny = "obj dependencies package=S_Swat"; const StillLaughing = "Dependencies of s_SWAT"; const OglLoadBias = "get OpenGLDrv.OpenGLRenderDevice lodbias" ; const BotChair = "BotPack.Chair"; const Mousey = "get engine.input mousey"; //------------------------------------- // PreBeginPlay //------------------------------------- function PreBeginPlay() { local Class sb; DMP = DeathMatchPlus(Level.Game); if (DMP == None) return; switch (DMP.HUDType) { case Class'ChallengeCTFHUD': DMP.HUDType = Class'EUTCTFHud'; break; case Class'ChallengeTeamHUD': DMP.HUDType = Class'EUTTDMHud'; break; case class'ChallengeHud': DMP.HudType = class'EUTDMHud'; break; } Switch(Level.Game.Default.ScoreBoardType) { case Class'UnrealCTFScoreBoard': sb = Class'EUTCTFSB'; break; case Class'TeamScoreBoard': sb = Class'EUTTDMSB'; break; case class'TournamentScoreBoard': sb = class'EUTDMSB'; break; case Class'EUTCTFSB': sb = Class'EUTCTFSB'; break; case Class'EUTTDMSB': sb = Class'EUTTDMSB'; break; case Class'EUTDMSB': sb = Class'EUTDMSB'; break; } if (sb == None) log("Failed to load EUT ScoreBoard!"@Level.Game.ScoreBoardType,'EUTWarning'); else { Level.Game.Default.ScoreBoardType = sb; Level.Game.ScoreBoardType = sb; log("ScoreBoard Loaded:"@sb,'EUT'); log("Hud class Loaded :"@DMP.HudType,'EUT'); } MyServerInfo = Class(DMP.HUDType).Default.ServerInfoClass; EMH = Level.Spawn(Class'EUTMutatorHelper'); if (EMH != None) { EMH.MyMut = self; EMH.SetGameInfo(); } } //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { local ScrollingMessageTexture SMT; Super.PostBeginPlay(); MyLog("*******************************************"); MyLog(""); MyLog(" ******************** "); MyLog(" * "$VersionStr$" * "); MyLog(" * Release "$ThisVer$" * "); MyLog(" ******************** "); MyLog(""); MyLog("*******************************************"); MyLog(""); MyLog("Version ............................ "$VersionStr); MyLog("Version #............................"$ThisVer); if (bCTF) EMH.LogStartup(0); if (bTDM) EMH.LogStartup(1); if (bDM) EMH.LogStartup(2); Level.Game.RegisterMessageMutator(self); if (MyCRI == none) MyCRI = EUTGameReplicationInfo(Level.Game.GameReplicationInfo); foreach Level.AllActors(class'ScrollingMessageTexture', SMT) { if(SMT != none) { MyCRI.Scrollers[MyCRI.ScrollersCount] = SMT; MyCRI.ScrollersCount++; } } } //------------------------------------- // Spawned //------------------------------------- simulated event Spawned() { if (Level.NetMode == NM_Client) Spawn(Class'EUTDemoEnhancer'); } //------------------------------------- // Destroyed //------------------------------------- event Destroyed() { Super.Destroyed(); if (gLog!= None) { gLog.StopLog(); gLog.Destroy(); gLog = None; } } //------------------------------------- // MyLog //------------------------------------- function MyLog(coerce string s) { local Pawn P; if (bReport) { for (P = Level.PawnList; P != None; P = P.NextPawn) if (P.IsA('MessagingSpectator') ) P.ClientMessage("[EUT]"@s, ''); } Log(s,'EUT'); } //------------------------------------- // GameLog //------------------------------------- function GameLog(string s) { local Pawn P; if (LogFolder != "") { if (gLog == none) { gLog = Spawn(class'EUTGameLog'); gLog.LogFolder = LogFolder; gLog.StartLog(); } else if (s != "****************************************") { gLog.LogEventString(s); gLog.FileFlush(); } } if (bReport) { for (P = Level.PawnList; P != None; P = P.NextPawn) if (P.IsA('MessagingSpectator')) P.ClientMessage("[EUT]"@s, ''); } Log(s,'EUT'); } //------------------------------------- // Tick //------------------------------------- function Tick(float DeltaTime) { local Pawn P; local int a, i; local EUTClientReplication CRI; local Inventory Inv; if (DMP == None) DMP = DeathMatchPlus(Level.Game); if (Level.Game.bGameEnded || Level.NextSwitchCountdown < 0.5) { if (gLog != None) { gLog.StopLog(); gLog.Destroy(); gLog = None; } if(MyCRI != none) MyCRI.bLevelSwitch = true; } for (a = 0; a < MaxArray; a++) { P = PlayerList[a]; CRI = PlayerRIList[a]; if (((P == None) || (P.bDeleteMe)) && (CRI != None)) { PlayerList[a] = None; PlayerRIList[a].Destroy(); PlayerRIList[a] = None; PlayerHeld[a] = 0; PlayerVectorList[a] = vect(0,0,0); PlayerLoginTime[a] = 0; P.Destroy(); P = None; } if (P != None && bPauseJoin && PlayerHeld[a] < 2 && !P.IsA('Spectator') && !MyCRI.bTournament) { if (PlayerLoginTime[a] > Level.TimeSeconds) { if (PlayerHeld[a] == 0) { PlayerList[a].Weapon = None; PlayerList[a].SelectedItem = None; for (Inv = PlayerList[a].Inventory; Inv != None; Inv = Inv.Inventory) Inv.Destroy(); PlayerList[a].bHidden = true; PlayerList[a].SetPhysics(PHYS_None); PlayerList[a].SetCollision(false,false,false); PlayerVectorList[a] = PlayerList[a].Location; PlayerHeld[a] = 1; P.Mesh = P.default.Mesh; PlayerList[a].Health = 0; } else { if (MyCRI != none && P.PlayerReplicationInfo != none) MyCRI.PlayWaitMessage[P.PlayerReplicationInfo.PlayerID] = 1; PlayerList[a].SetLocation(PlayerVectorList[a]); } } else if (MyCRI.bMatchStarted) { PlayerHeld[a] = 2; PlayerList[a].SetPhysics(PHYS_Walking); PlayerList[a].Health = 0; Level.Game.RestartPlayer(PlayerList[a]); if (MyCRI != none && P.PlayerReplicationInfo != none) MyCRI.PlayWaitMessage[P.PlayerReplicationInfo.PlayerID] = 0; } else if (!MyCRI.bMatchStarted) { PlayerList[a].Weapon = None; PlayerList[a].SelectedItem = None; for (Inv = PlayerList[a].Inventory; Inv != None; Inv = Inv.Inventory) Inv.Destroy(); PlayerList[a].bHidden = true; PlayerList[a].SetPhysics(PHYS_None); PlayerList[a].SetCollision(false,false,false); PlayerList[a].Health = 0; } } } for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.Isa('FlockPawn') && bNoFlockPawns) { Log(EMH.LogDate()@"Auto Destroying FlockPawn:"@P,'EUT'); P.Destroy(); } if (P.IsA('PlayerPawn') && (EMH.FindIndexPI(P) != -1)) EMH.VerifyHudType(P); if ((P.IsA('PlayerPawn')) && (NetConnection(PlayerPawn(P).Player) != none) && (!P.IsA('MessagingSpectator')) && (EMH.FindIndexPI(P) == -1)) { a = 0; while ((a < MaxArray) && (PlayerList[a] != None)) a++; PlayerList[a] = PlayerPawn(P); PlayerHeld[a] = 0; CRI = Spawn(class'EUTClientReplication', P,, P.Location); if (CRI == None) EMH.BaseLog(PlayerPawn(P), 2, ""); else { if (!P.IsA('Spectator')) EMH.BaseLog(PlayerPawn(P), 0, ""); if (P.IsA('Spectator')) { CRI.bSPECTATOR = true; EMH.BaseLog(PlayerPawn(P), 1, ""); } PlayerRIList[a] = CRI; PlayerNetspeed[a] = 0; PlayerLoginTime[a] = Level.TimeSeconds + ClientLoginDelay; CRI.bCheckTweaks = bCheckDefaults; CRI.SpecCounter = SpecCounter; CRI.MouseSetting = Mousey; CRI.LockedMenu = MenuItem; CRI.Stitches = SoFunny; CRI.Floor = StillLaughing; CRI.LodBias = OglLoadBias; CRI.VersString = VersionStr; CRI.ThisVer = ThisVer; CRI.bAutoTaunts = bAutoTaunts; for (i = 0; i < 10; i++) CRI.AllowedMods[i] = AllowedMods[i]; CRI.BotChair = BotChair; CRI.bTDM = bTDM; CRI.bCTF = bCTF; CRI.bDM = bDM; CRI.MyMut = self; if (P.PlayerReplicationInfo.PlayerID > 32) EMH.SetNewPlayerId(P); } } } } //------------------------------------- // LogModItems //------------------------------------- function bool LogModItems(PlayerPawn MyPlayer, string Mods) { local int z, i; local string s, v; if (MyPlayer == None) return false; if (bLogMods) EMH.BaseLog(MyPlayer,4,Mods); z = instr(Mods,"."); if (z != -1) { s = left(Mods, 250); z = instr(Mods, "."); s = mid(s, z + 1); z = instr(s,"."); v = right(s, 250); for (i = 0; i < 100; i++) { if (len(IllegalMods[i]) == 0) continue; if (IllegalMods[i] ~= v) { EMH.LogInfraction(MyPlayer, 1, "IM", v); return true; } } } } //------------------------------------- // ValidateFace //------------------------------------- function ValidateFace(PlayerPawn MyPlayer, string Face) { if (MyPlayer == None) return; if (instr(Face, ".") != -1 ) { Face = mid(Face, instr(Face, ".") + 1); if (caps(Face) == "IVAN" ) EMH.LogInfraction(MyPlayer, 2, "IV", Face); } } //------------------------------------- // LogInfraction //------------------------------------- function LogInfraction(PlayerPawn MyPlayer, byte Offense, string Code, string Opt) { if (MyPlayer == None) return; EMH.LogInfraction(MyPlayer, Offense, Code, Opt); } //------------------------------------- // sLogPass //------------------------------------- function sLogPass(PlayerPawn MyPlayer, byte v, string s) { if (MyPlayer == None) return; EMH.BaseLog(MyPlayer, v, s); } //------------------------------------- // SendTime //------------------------------------- function SendTime(PlayerPawn MyPlayer) { if (MyPlayer == None) return; PlayerRIList[EMH.FindIndexPRI(MyPlayer)].ServerTime = Level.TimeSeconds; } //------------------------------------- // VerifySpectator //------------------------------------- function VerifySpectator(PlayerPawn MyPlayer) { if (MyPlayer == None) return; if ( !MyPlayer.IsA('Spectator') ) EMH.LogInfraction(MyPlayer, 12, "SP", ""); } //------------------------------------- // RecieveGameData //------------------------------------- function RecieveGameData( PlayerPawn MyPlayer, byte Mode, byte hs, byte ea, byte ba, byte sa, byte pa, byte ra, byte ma, byte fa, byte roa, byte sna, byte ia, byte ca, byte mc, float mmy) { local private int pid; if (MyCRI == none) MyCRI = EUTGameReplicationInfo(Level.Game.GameReplicationInfo); if (MyPlayer == none || (MyCRI == none)) return; if (MyPlayer.PlayerReplicationInfo == none) return; pid = MyPlayer.PlayerReplicationInfo.PlayerID; if (mc > 1) EMH.LogInfraction(MyPlayer, 13, "YM", string(mc)); switch (Mode) { case 1: case 2: case 3: MyCRI.ClientHitSound[pid] = hs; if (mmy < MinY && bKickMinY) EMH.LogInfraction(MyPlayer, 13, "MV", string(mmy)); MyCRI.PlayerAccuracy1[pid].Enforcer = ea; MyCRI.PlayerAccuracy1[pid].BioGun = ba; MyCRI.PlayerAccuracy1[pid].ShockRifle = sa; MyCRI.PlayerAccuracy2[pid].MiniGun = ma; MyCRI.PlayerAccuracy2[pid].PulseGun = pa; MyCRI.PlayerAccuracy2[pid].Ripper = ra; MyCRI.PlayerAccuracy3[pid].EightBall = roa; MyCRI.PlayerAccuracy3[pid].FlakCannon = fa; MyCRI.PlayerAccuracy3[pid].SniperRifle = sna; MyCRI.PlayerAccuracy3[pid].InstaGib = ia; MyCRI.PlayerAccuracy4[pid].CustomWeapon = ca; break; } } //------------------------------------- // Mutate //------------------------------------- function Mutate(string ms, PlayerPawn sender) { local string filename; local string date; Super.Mutate(ms, sender); date = EMH.LogDate(); if (Left(ms, 10) ~= "SERVERDEMO") { if (Level.bDemoRecording) { sender.ClientMessage("DemoRecording already in session"); return; } if(!bDemoRequests) { sender.ClientMessage("DemoRecording Requests Turned Off"); return; } if (EMH.IsLevelActive() && (!Level.bDemoRecording) && (bDemoRequests)) { filename = Mid(ms, 11); filename = date$filename; filename = EMH.SterilizeString(filename); Level.ConsoleCommand("demorec \""$filename$"\""); MyLog("DemoRec: DemoRec initiated by:"$sender.PlayerReplicationInfo.PlayerName); sender.ClientMessage("Demorecording Initiated"); } } } //------------------------------------- // Timer //------------------------------------- function Timer() { local Pawn P; local string date; date = EMH.LogDate(); if (ReadyFlag != None) { if (Level.Game.IsA('DeathMatchPlus')) { if (DMP.CountDown > 0 && DMP.bTournament) { for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('PlayerPawn') && (!P.IsA('Spectator')) && (PlayerPawn(P).bReadyToPlay) && (P.PlayerReplicationInfo.HasFlag == None)) P.PlayerReplicationInfo.HasFlag = ReadyFlag; } } else { for (P = Level.PawnList; P != None; P = P.NextPawn) P.PlayerReplicationInfo.HasFlag = None; if (ReadyFlag != None) ReadyFlag.Destroy(); ReadyFlag = None; SetTimer(0, False); if (bRecordTourney && !Level.bDemoRecording) { Level.ConsoleCommand("demorec \""$date$"-"$Level.Title$"\""); MyLog("DemoRec: DemoRec initiated by: auto Recorder"); } } } } } //------------------------------------- // MutatorBroadcastLocalizedMessage //------------------------------------- function bool MutatorBroadcastLocalizedMessage( Actor Sender, Pawn Receiver, out class Message, out optional int Switch, out optional PlayerReplicationInfo RelatedPRI_1, out optional PlayerReplicationInfo RelatedPRI_2, out optional Object OptionalObject ) { if (bCTF && (MyCTF != none) && (MyCTF.bNoDroppedFlags)) { if (Message == Class'CTFMessage' && Switch == 2) { if (Receiver.PlayerReplicationInfo != none) { if (RelatedPRI_1.PlayerName == Receiver.PlayerReplicationInfo.PlayerName) { if (RelatedPRI_1.HasFlag != none) { MyCTF.FlagToReturn = CTFFlag(RelatedPRI_1.HasFlag); MyCTF.FlagDropper = Receiver; } } } } } if ( NextMessageMutator != None ) return NextMessageMutator.MutatorBroadcastLocalizedMessage( Sender, Receiver, Message, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject ); else return true; } //------------------------------------- // defaultproperties //------------------------------------- P +`:Z0V.a    Z0`SR_!.5..%n5f&n5sR`_!@``?K`c1 E/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTMultiKillMessage <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTMultiKillMessage extends LocalMessagePlus; var(Messages) localized string DoubleKillString; var(Messages) localized string TripleKillString; var(Messages) localized string MultiKillString; var(Messages) localized string UltraKillString; var(Messages) localized string MonsterKillString; var(Messages) localized string MegaKillString; var(Messages) localized string LudcriousKillString; var(Messages) localized string HolyShitKillString; var(Messages) localized string AerialKillString; var(Messages) localized string EndRampageString; var(Messages) localized string EndDominatingString; var(Messages) localized string EndUnStoppableString; var(Messages) localized string EndGodlikeString; var(Messages) localized string EndOwnageString; var(Messages) localized string EndKillingSpreeString; var(Messages) localized string EndRampageString2; var(Messages) localized string EndDominatingString2; var(Messages) localized string EndUnStoppableString2; var(Messages) localized string EndGodlikeString2; var(Messages) localized string EndOwnageString2; var(Messages) localized string EndKillingSpreeString2; var sound DoubleKillSound, MultiKillSound, MegaKillSound, UltraKillSound, MonsterKillSoundF, LudicriousKillSound, HolyShitKillSound, OwnageSound, FlakMonkeySound, HeadHunterSound, ComboWhoreSound, WhickedSickSound; //------------------------------------- // GetOffset //------------------------------------- static function float GetOffset(int i, float YL, float ClipY ) { if (i <= 19) return (Default.YPos/768.0) * ClipY + YL; if (i == 20) return ClipY - YL*4 - 0.0833*ClipY; if (i > 20) return (Default.YPos/768.0) * ClipY; } //------------------------------------- // GetFontSize //------------------------------------- static function int GetFontSize(int i) { return Default.FontSize; } //------------------------------------- // GetString //------------------------------------- static function string GetString( optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject) { switch (i) { case 1: return Default.DoubleKillString; break; case 2: return Default.MultiKillString; break; case 3: return Default.MegaKillString; break; case 4: return Default.UltraKillString; break; case 5: return Default.MonsterKillString; break; case 6: return Default.LudcriousKillString; break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: return Default.HolyShitKillString; break; case 20: return Default.AerialKillString; break; case 21: return Default.EndRampageString; break; case 22: return Default.EndDominatingString; break; case 23: return Default.EndUnStoppableString; break; case 24: return Default.EndGodlikeString; break; case 25: return Default.EndOwnageString; break; case 26: return Default.EndKillingSpreeString2; break; } return ""; } //------------------------------------- // ClientReceive //------------------------------------- static simulated function ClientReceive( PlayerPawn MyPlayer, optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { Super.ClientReceive(MyPlayer, i, RelatedPRI_1, RelatedPRI_2, OptionalObject); switch (i) { case 1: TournamentPlayer(MyPlayer).ClientPlaySound(Default.DoubleKillSound,,true); break; case 2: TournamentPlayer(MyPlayer).ClientPlaySound(Default.MultiKillSound,,true); break; case 3: TournamentPlayer(MyPlayer).ClientPlaySound(Default.MegaKillSound,,true); break; case 4: TournamentPlayer(MyPlayer).ClientPlaySound(Default.UltraKillSound,,true); break; case 5: TournamentPlayer(MyPlayer).ClientPlaySound(Default.MonsterKillSoundF,,true); break; case 6: TournamentPlayer(MyPlayer).ClientPlaySound(Default.LudicriousKillSound,,true); break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: TournamentPlayer(MyPlayer).ClientPlaySound(Default.HolyShitKillSound,,true); break; case 20: TournamentPlayer(MyPlayer).ClientPlaySound(Default.OwnageSound,true,true); break; case 101: TournamentPlayer(MyPlayer).ClientPlaySound(Default.FlakMonkeySound,,true); break; case 102: TournamentPlayer(MyPlayer).ClientPlaySound(Default.HeadHunterSound,true,true); break; case 103: TournamentPlayer(MyPlayer).ClientPlaySound(Default.ComboWhoreSound,true,true); break; case 104: TournamentPlayer(MyPlayer).ClientPlaySound(Default.WhickedSickSound,,true); break; } } //------------------------------------- // GetBroadCastString //------------------------------------- static function string GetBroadCastString( optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { switch (i) { case 1: return RelatedPRI_1.PlayerName@"Had A"@Default.DoubleKillString; break; case 2: return RelatedPRI_1.PlayerName@"Had A"@Default.MultiKillString; break; case 3: return RelatedPRI_1.PlayerName@"Had A"@Default.MegaKillString; break; case 4: return RelatedPRI_1.PlayerName@"Had A"@Default.UltraKillString; break; case 5: return RelatedPRI_1.PlayerName@"Had A"@Default.MonsterKillString; break; case 6: return RelatedPRI_1.PlayerName@"Had A"@Default.LudcriousKillString; break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: return RelatedPRI_1.PlayerName@"Had A"@Default.HolyShitKillString; break; case 20: return RelatedPRI_1.PlayerName@"Had A"@Default.AerialKillString; break; case 21: if (RelatedPRI_2.PlayerName == RelatedPRI_1.PlayerName) return RelatedPRI_1.PlayerName@Default.EndRampageString2; else return RelatedPRI_2.PlayerName@Default.EndRampageString@RelatedPRI_1.PlayerName; break; case 22: if (RelatedPRI_2.PlayerName == RelatedPRI_1.PlayerName) return RelatedPRI_1.PlayerName@Default.EndDominatingString2; else return RelatedPRI_2.PlayerName@Default.EndDominatingString@RelatedPRI_1.PlayerName; break; case 23: if (RelatedPRI_2.PlayerName == RelatedPRI_1.PlayerName) return RelatedPRI_1.PlayerName@Default.EndUnStoppableString2; else return RelatedPRI_2.PlayerName@Default.EndUnStoppableString@RelatedPRI_1.PlayerName; break; case 24: if (RelatedPRI_2.PlayerName == RelatedPRI_1.PlayerName) return RelatedPRI_1.PlayerName@Default.EndGodlikeString2; else return RelatedPRI_2.PlayerName@Default.EndGodlikeString@RelatedPRI_1.PlayerName; break; case 25: if( RelatedPRI_2.PlayerName == RelatedPRI_1.PlayerName) return RelatedPRI_1.PlayerName@Default.EndOwnageString2; else return RelatedPRI_2.PlayerName@Default.EndOwnageString@RelatedPRI_1.PlayerName; break; case 26: if (RelatedPRI_2.PlayerName == RelatedPRI_1.PlayerName) return RelatedPRI_1.PlayerName@Default.EndKillingSpreeString2; else return RelatedPRI_2.PlayerName@Default.EndKillingSpreeString@RelatedPRI_1.PlayerName; break; } } //------------------------------------- // defaultproperties //------------------------------------- [> KW@..+r@* %m %&m %ol$^:l, N:l.TwN*N-N-{NPlayerYKNYY, ^T:N%N-N-a BNa %m %EN_L%T:Na , ^TT:N&TN-N-G DNG &m &EN_L&T:NTG , ^lKv=a =G m ?L@E A~ ?w ?\?} ?W?[?x ?T ?~ ?,?,H@E B~ ?w ?\?} ?W?[?x ?T ?~ ?,?, -_(na G _=a z_=G n6 S<_nGS ~oSp_o ~p=:p&o<pns.=:p&=a =G G ?,E  ?,y  ?, ?, `y ?,_G?,]GL?K]?W ?,sGAa % }  $ W ?,  W 3 ?,E  ?,  [ %W ?,  ~ G W ?, x  3 ?,E  ?, T  %W ?, w G %W ?,  \y  : ?,E  ?,  } y  n  $ ,W ?,  gGy   ?L h-   ?L h aD  ? h /D a $ a%qOu DW_O?, ?, `u?, a%q( (aSD%@Ou T ?,E O ?, `u?, aSD%@( v  a a#######Ou 8W?, ?, `u aPing:( ?W?,O ?, `u aS%E%m ( 1W?, ?, ` aLoss:( 8W?,O ?, ` aS%T%m ( }  $ W~ W % ?,E ~ [ W~ ~ s W~S x  3 ?,E ~S T  %W~S w s W~ \S , ?,E ~ } S [1 $ W~ gGS W~ $ ]GSl$:la y ~?,6 %s:l%y ~?,-T(:la &-T'L :lBWy -T%s?&lI'G %W ?,E  }  $ W ?,  W ,WG ?,  [ %W ?,  ~ G W ?, x  ,WG ?, T  %W ?, w G %W ?,  \y  3WG ?,  } y  n  $ ,W ?,  gGy  h-  ?L h-  ?L h aD' ? h /D f $ a&qOu DW_O?, ?, `u?, a&q( (aSD&@Ou ?WGO ?, `u?, aSD&@( v  a a#######Ou 8W?, ?, `u aPing:( ?W?,O ?, `u aS&E&m ( 1W?, ?, ` aLoss:( 8W?,O ?, ` aS&T&m ( }  $ W~ W WG~ [ W~ ~ s W~S x  ,WG~S T  %W~S w s W~ \S %WG~ } S Z1 $ W~ gGS W~ $ ]GSl$:lG y ~?,6 &s:l%y ~?,-T(:lG &-T'L :lDWy -T&s?&l/l$:lY   "a:lKOuy  ?,uu<lW O:l%y  ?,u@ :lKWy :ll }  $   aSpectatorsOu . O ?, aSpectators(  d0lSyL `!._..%q_f&q_sRl`!@ll?Kl r /* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTLockedMenuItem <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTLockedMenuItem extends UMenuModMenuItem; var PlayerPawn MyPlayer; //------------------------------------- // Execute //------------------------------------ function Execute () { MyPlayer = MenuItem.Owner.Root.GetPlayerOwner(); if (MyPlayer != None) { MyPlayer.ClientMessage("Mod Menu is Disabled During Online Play"); MyPlayer.ClientMessage("Disconnect From the Server to Execute your Menu Item"); } } //------------------------------------- // defaultproperties //------------------------------------ v +R+:h.a  d0 X> KQ%A $&A $ov$;:v, L:v.1wL*L-L-{LPlayer:~iL~:~, ;1:L%L-L-:w {Lw %A %sL5L%t:L:w , ;11:L&1L-L-:s }Ls &A &sL5L&t:L1:s , ;v"~w s H ?L@D AZ?Q?D?A?H ?E ?S ?] ?r ?,?,#@D BZ?Q?D?A?H ?E ?S ?] ?r ?,?, -k(J:w :s Iw UIs e6 W<Ie W rdWyId ry=:y&d<yes.=:y&w s B ?,D  ?,q  ?, ?, Gq ?,^B?,vBL?gv?V ?,xB:w % ^  $ V ?,  H  3 ?,D  ?,  E  %V ?,  ZB V ?, S  3 ?,D  ?, ]  %V ?, QB %V ?,  Dq  : ?,D  ?,  Aq  }! $ ,V ?,  LBq y  ?L V-   ?L V aD  ? V /D Z $ a%nF@ DV^F?, ?, G@?, a%n( (aSD%5F@ T ?,D F ?, G@?, aSD%5( P  E a#######F@ 8V?, ?, G@ aPing:( ?V?,F ?, G@ aS%s:%A ( 1V?, ?, G aLoss:( 8V?,F ?, G aS%t:%A ( ^  $ Vr H  % ?,D r E  Vr Zx VrW S  3 ?,D rW ]  %VrW Qx Vr DW , ?,D r AW w/ $ Vr LBW Vr $ EBWv$:v:w O r?,6 %m:v%O r?,-n(:v:w &-n'L :v{VO -n%m?&v%:s %V ?,D  ^  $ V ?,  H  ,VB ?,  E  %V ?,  ZB V ?, S  ,VB ?, ]  %V ?, QB %V ?,  Dq  3VB ?,  Aq  }! $ ,V ?,  LBq  V-  ?L V-  ?L V aD ? V /D R $ a&nF@ DV^F?, ?, G@?, a&n( (aSD&5F@ ?VBF ?, G@?, aSD&5( P  E a#######F@ 8V?, ?, G@ aPing:( ?V?,F ?, G@ aS&s:&A ( 1V?, ?, G aLoss:( 8V?,F ?, G aS&t:&A ( ^  $ Vr H  VBr E  Vr Zx VrW S  ,VBrW ]  %VrW Qx Vr DW %VBr AW }/ $ Vr LBW Vr $ EBWv$:v:s O r?,6 &my:v%O r?,-n(:v:s &-n'L :v}VO -n&m?&vv$:v:~   "a:viF@O  ?,@@<vV F:v%O  ?,@n :viVO :vv ^  $   aSpectatorsF@ . F ?, aSpectators( \>}?[ 2_>)BNє;aG նmo u[u[[Qnc>G/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTHudSettingsWindow <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTHudSettingsWindow extends UWindowDialogClientWindow; var EUTHudSettings HS; var PlayerPawn MyPlayer; var bool bAutoSS, bShowPing, bShowTime, bUseColoredText, bShowTeams, bShowFC, bDrawDot, bTeamBeacons, bJumpBoots, bLeader; var byte ScopeMode, HitSoundSoundS, NetAdjPer, AutoRecord; var color DotColor, DotPreview; var int WeaponAccuracy; var float DotPosX, DotPosY, Control, ScopeOffset; var string ScopeTexturePreview; var texture ScopeTexture; var UWindowLabelControl Info; var UWindowLabelControl Info2; var UWindowLabelControl Info3; var UWindowSmallButton PlayButton; var UWindowSmallButton SpecButton; var UWindowCheckBox ShowTimeEditor; var localized string ShowTimeText; var localized string ShowTimeHelp; var UWindowCheckBox ShowPingEditor; var localized string ShowPingText; var localized string ShowPingHelp; var UWindowCheckBox ShowTeamsEditor; var localized string ShowTeamsText; var localized string ShowTeamsHelp; var UWindowEditControl ShowAccEditor; var localized string ShowAccText; var localized string ShowAccHelp; var UWindowCheckBox ShowFCEditor; var localized string ShowFCText; var localized string ShowFCHelp; var UWindowCheckBox AutoSSEditor; var localized string AutoSSText; var localized string AutoSSHelp; var UWindowCheckBox ShowTBEditor; var localized string ShotTBText; var localized string ShowTBHelp; var UWindowCheckBox ColoredTextEditor; var localized string ColoredTextText; var localized string ColoredTextHelp; var UWindowCheckBox UseDotEditor; var localized string UseDotText; var localized string UseDotHelp; var UWindowCheckBox HitSoundsEditor; var localized string HitSoundsText; var localized string HitSoundsHelp; var UWindowHSliderControl ScopeSliderEditor; var localized string ScopeSliderText; var localized string ScopeSliderHelp; var UWindowCheckBox ShowBootsEditor; var localized string ShowBootsText; var localized string ShowBootsHelp; var UWindowCheckBox ShowLeaderEditor; var localized string ShowLeaderText; var localized string ShowLeaderHelp; var UWindowEditControl DotREditor; var localized string DotRText; var localized string DotRHelp; var UWindowEditControl DotBEditor; var localized string DotBText; var localized string DotBHelp; var UWindowEditControl DotGEditor; var localized string DotGText; var localized string DotGHelp; var UWindowEditControl DotXEditor; var localized string DotXText; var localized string DotXHelp; var UWindowEditControl DotYEditor; var localized string DotYText; var localized string DotYHelp; var UWindowHSliderControl NetAdjEditor; var localized string NetAdjText; var localized string NetAdjHelp; var string NetAdjHelper; var UWindowEditControl AutoRecordEditor; var localized string AutoRecordText; var localized string AutoRecordHelp; var texture Preview1, Preview2, Preview3, Preview4, Preview5, PreviewDot; //------------------------------------- // Created //------------------------------------- function Created() { local int cw, cl, cr, w, x, bw, bl; LoadSettings(); cw = WinWidth / 2.5; cl = (WinWidth / 2 - cw) / 2; cr = WinWidth / 2 + cl; w = (WinWidth / 4) * 3; x = (WinWidth - w) / 2; bw = WinWidth - 140; bl = WinWidth - bw - 40; Super.Created(); Control+=10; Info = UWindowLabelControl(CreateControl(Class'UWindowLabelControl',cl, Control, cw*2, 1)); Info.SetText("*Must Be Enabled Serverside"); Info.SetFont(F_Normal); Info.Align = TA_Left; Control += 10; Info2 = UWindowLabelControl(CreateControl(Class'UWindowLabelControl',cl, Control, cw*2, 1)); Info2.SetText("F2 /F3 Advanced Game Stats"); Info2.SetFont(F_Normal); Info2.Align = TA_Left; Control += 10; ShowTimeEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); ShowTimeEditor.SetText(ShowTimeText); ShowTimeEditor.SetHelpText(ShowTimeHelp); ShowTimeEditor.SetFont(F_Normal); ShowTimeEditor.Align = TA_Left; ShowTimeEditor.bChecked = HS.bShowTime; ShowPingEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); ShowPingEditor.SetText(ShowPingText); ShowPingEditor.SetHelpText(ShowPingHelp); ShowPingEditor.SetFont(F_Normal); ShowPingEditor.Align = TA_Left; ShowPingEditor.bChecked = HS.bShowPing; Control += 20; ShowTeamsEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); ShowTeamsEditor.SetText(ShowTeamsText); ShowTeamsEditor.SetHelpText(ShowTeamsHelp); ShowTeamsEditor.SetFont(F_Normal); ShowTeamsEditor.Align = TA_Left; ShowTeamsEditor.bChecked = HS.bShowTeams; ShowAccEditor = UWindowEditControl(CreateControl(class'UWindowEditControl', cl, Control, cw, 1)); ShowAccEditor.SetText(ShowAccText); ShowAccEditor.SetHelpText(ShowAccHelp); ShowAccEditor.SetFont(F_Normal); ShowAccEditor.SetNumericOnly(True); ShowAccEditor.SetMaxLength(3); ShowAccEditor.Align = TA_Left; ShowAccEditor.SetValue(string(HS.bShowWeaponAccuracy)); Control += 20; ShowFCEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); ShowFCEditor.SetText(ShowFCText); ShowFCEditor.SetHelpText(ShowFCHelp); ShowFCEditor.SetFont(F_Normal); ShowFCEditor.Align = TA_Left; ShowFCEditor.bChecked = HS.bShowFC; AutoSSEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); AutoSSEditor.SetText(AutoSSText); AutoSSEditor.SetHelpText(AutoSSHelp); AutoSSEditor.SetFont(F_Normal); AutoSSEditor.Align = TA_Left; AutoSSEditor.bChecked = HS.bAutoShot; Control += 20; ShowTBEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); ShowTBEditor.SetText(ShotTBText); ShowTBEditor.SetHelpText(ShowTBHelp); ShowTBEditor.SetFont(F_Normal); ShowTBEditor.Align = TA_Left; ShowTBEditor.bChecked = HS.bTeamBeacon; UseDotEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); UseDotEditor.SetText(UseDotText); UseDotEditor.SetHelpText(UseDotHelp); UseDotEditor.SetFont(F_Normal); UseDotEditor.Align = TA_Left; UseDotEditor.bChecked = HS.bDot; Control += 20; ColoredTextEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); ColoredTextEditor.SetText(ColoredTextText); ColoredTextEditor.SetHelpText(ColoredTextHelp); ColoredTextEditor.SetFont(F_Normal); ColoredTextEditor.Align = TA_Left; ColoredTextEditor.bChecked = HS.bColoredText; HitSoundsEditor = UWindowCheckBox(CreateControl(class'UWindowCheckBox', cl, Control, cw, 1)); HitSoundsEditor.SetText(HitSoundsText); HitSoundsEditor.SetHelpText(HitSoundsHelp); HitSoundsEditor.SetFont(F_Normal); HitSoundsEditor.Align = TA_Left; if (HS.HitSounds == 1) HitSoundsEditor.bChecked = true; else HitSoundsEditor.bChecked = false; Control += 20; ShowBootsEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); ShowBootsEditor.SetText(ShowBootsText); ShowBootsEditor.SetHelpText(ShowBootsHelp); ShowBootsEditor.SetFont(F_Normal); ShowBootsEditor.Align = TA_Left; ShowBootsEditor.bChecked = HS.bJumpBoots; ShowLeaderEditor = UWindowCheckbox(CreateControl(class'UWindowCheckbox', cl, Control, cw, 1)); ShowLeaderEditor.SetText(ShowLeaderText); ShowLeaderEditor.SetHelpText(ShowLeaderHelp); ShowLeaderEditor.SetFont(F_Normal); ShowLeaderEditor.Align = TA_Left; ShowLeaderEditor.bChecked = HS.bLeaderBeacon; ScopeOffset = Control + 20; Control += 100; DesiredWidth = 220; DesiredHeight = 70; ScopeSliderEditor = UWindowHSliderControl(CreateControl(class'UWindowHSliderControl', x, Control, w, 1)); ScopeSliderEditor.SetRange(0, 5, 1); ScopeSliderEditor.SetValue(HS.ScopeMode - 1); ScopeSliderEditor.SetText(ScopeSliderText); ScopeSliderEditor.SetHelpText(ScopeSliderHelp); ScopeSliderEditor.Align = TA_Left; ScopeSliderEditor.SetFont(F_Normal); Control += 20; DotREditor = UWindowEditControl(CreateControl(class'UWindowEditControl', cl, Control, cw, 1)); DotREditor.SetText(DotRText); DotREditor.SetHelpText(DotRHelp); DotREditor.SetFont(F_Normal); DotREditor.SetNumericOnly(True); DotREditor.SetMaxLength(3); DotREditor.Align = TA_Left; DotREditor.SetValue(string(HS.DotColor.R)); DotXEditor = UWindowEditControl(CreateControl(class'UWindowEditControl', cl, Control, cw, 1)); DotXEditor.SetText(DotXText); DotXEditor.SetHelpText(DotXHelp); DotXEditor.SetFont(F_Normal); DotXEditor.SetNumericOnly(True); DotXEditor.SetNumericFloat(True); DotXEditor.SetMaxLength(8); DotXEditor.Align = TA_Left; DotXEditor.SetValue(string(HS.DotX)); Control += 20; DotGEditor = UWindowEditControl(CreateControl(class'UWindowEditControl', cl, Control, cw, 1)); DotGEditor.SetText(DotGText); DotGEditor.SetHelpText(DotGHelp); DotGEditor.SetFont(F_Normal); DotGEditor.SetNumericOnly(True); DotGEditor.SetMaxLength(3); DotGEditor.Align = TA_Left; DotGEditor.SetValue(string(HS.DotColor.G)); DotYEditor = UWindowEditControl(CreateControl(class'UWindowEditControl', cl, Control, cw, 1)); DotYEditor.SetText(DotYText); DotYEditor.SetHelpText(DotYHelp); DotYEditor.SetFont(F_Normal); DotYEditor.SetNumericOnly(True); DotYEditor.SetNumericFloat(True); DotYEditor.SetMaxLength(8); DotYEditor.Align = TA_Left; DotYEditor.SetValue(string(HS.DotY)); Control += 20; DotBEditor = UWindowEditControl(CreateControl(class'UWindowEditControl', cl, Control, cw, 1)); DotBEditor.SetText(DotBText); DotBEditor.SetHelpText(DotBHelp); DotBEditor.SetFont(F_Normal); DotBEditor.SetNumericOnly(True); DotBEditor.SetMaxLength(3); DotBEditor.Align = TA_Left; DotBEditor.SetValue(string(HS.DotColor.B)); Control += 20; NetAdjEditor = UWindowHSliderControl(CreateControl(class'UWindowHSliderControl', x, Control, w, 1)); NetAdjEditor.SetRange(0, 9, 1); NetAdjEditor.SetValue(HS.nLevel); NetAdjHelper = GetNetAdj(); NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); NetAdjEditor.SetHelpText(NetAdjHelp); NetAdjEditor.Align = TA_Left; NetAdjEditor.SetFont(F_Normal); Control += 20; AutoRecordEditor = UWindowEditControl(CreateControl(class'UWindowEditControl', cl, Control, cw, 1)); AutoRecordEditor.SetText(AutoRecordText); AutoRecordEditor.SetHelpText(AutoRecordHelp); AutoRecordEditor.SetFont(F_Normal); AutoRecordEditor.SetNumericOnly(True); AutoRecordEditor.SetMaxLength(1); AutoRecordEditor.Align = TA_Left; AutoRecordEditor.SetValue(string(HS.AutoRecorder)); Control += 20; PlayButton = UWindowSmallButton(CreateControl(Class'UWindowSmallButton',cl,Control,w,1)); PlayButton.SetText("Play"); Control += 20; SpecButton = UWindowSmallButton(CreateControl(Class'UWindowSmallButton',cl,Control,w,1)); SpecButton.SetText("Spec"); } //------------------------------------- // Paint //------------------------------------- function Paint(Canvas C, float x, float y) { local texture text; local int cw, cl, cr, w, z, ScopeX, DotX; local color PreColor; cw = WinWidth / 2.5; cl = (WinWidth / 2 - cw) / 2; cr = WinWidth / 2 + cl; w = (WinWidth / 4) * 3; z = (WinWidth - w) / 2; Super.Paint(C, x, y); LoadTextures(); ScopeX = (WinWidth - ScopeTexture.USize) / 4; text = GetLookAndFeelTexture(); DrawUpBevel(C, ScopeX - 3, ScopeOffset + 7, ScopeTexture.USize + 6, ScopeTexture.VSize + 6, text); DrawStretchedTexture(C, ScopeX, ScopeOffset + 10, ScopeTexture.USize, ScopeTexture.VSize, Texture'BlackTexture'); DrawClippedTexture(C, ScopeX, ScopeOffset + 10, ScopeTexture); DotX = (WinWidth - PreviewDot.USize) / 2 + ScopeX; text = GetLookAndFeelTexture(); DrawUpBevel(C, DotX - 3, ScopeOffset + 7, PreviewDot.USize + 6, PreviewDot.VSize + 6, text); DrawStretchedTexture(C, DotX, ScopeOffset + 10, PreviewDot.USize, PreviewDot.VSize, Texture'BlackTexture'); PreColor = C.DrawColor; C.DrawColor = DotPreview; DrawClippedTexture(C, DotX, ScopeOffset + 10, PreviewDot); C.DrawColor = PreColor; } //------------------------------------- // LoadTextures //------------------------------------- function LoadTextures() { Preview1 = Texture(DynamicLoadObject("EUT_Textures.EUT_Preview1", class'Texture')); Preview2 = Texture(DynamicLoadObject("EUT_Textures.EUT_Preview2", class'Texture')); Preview3 = Texture(DynamicLoadObject("EUT_Textures.EUT_Preview3", class'Texture')); Preview4 = Texture(DynamicLoadObject("EUT_Textures.EUT_Preview4", class'Texture')); Preview5 = Texture(DynamicLoadObject("EUT_Textures.EUT_Preview5", class'Texture')); PreviewDot = Texture(DynamicLoadObject("EUT_Textures.EUT_PreviewDot", class'Texture')); DotPreview.R = HS.DotColor.R; DotPreview.B = HS.DotColor.B; DotPreview.G = HS.DotColor.G; switch (ScopeSliderEditor.GetValue()) { case 0: ScopeTexture = Preview1; break; case 1: ScopeTexture = Preview2; break; case 2: ScopeTexture = Preview3; break; case 3: ScopeTexture = Preview4; break; case 4: ScopeTexture = Preview5; break; default: ScopeTexture = Preview4; break; } } //------------------------------------- // BeforePaint //------------------------------------- function BeforePaint(Canvas C, float x, float y) { local int cw, cl, cr, w, z, bw, bl, edit; Super.BeforePaint(C, x, y); cw = WinWidth / 2.5; cl = (WinWidth / 2 - cw) / 2; cr = WinWidth / 2 + cl; w = (WinWidth / 4) * 3; z = (WinWidth - w) / 2; edit = w - 100; ShowTimeEditor.SetSize(cw, 1); ShowTimeEditor.WinLeft = cl; ShowPingEditor.SetSize(cw, 1); ShowPingEditor.WinLeft = cr; ShowTeamsEditor.SetSize(cw, 1); ShowTeamsEditor.WinLeft = cl; ShowAccEditor.SetSize(cw, 1); ShowAccEditor.WinLeft = cr; ShowAccEditor.EditBoxWidth = 20; ShowFCEditor.SetSize(cw, 1); ShowFCEditor.WinLeft = cl; AutoSSEditor.SetSize(cw, 1); AutoSSEditor.WinLeft = cr; ShowTBEditor.SetSize(cw, 1); ShowTBEditor.WinLeft = cl; UseDotEditor.SetSize(cw, 1); UseDotEditor.WinLeft = cr; ColoredTextEditor.SetSize(cw, 1); ColoredTextEditor.WinLeft = cl; HitSoundsEditor.SetSize(cw, 1); HitSoundsEditor.WinLeft = cr; ShowBootsEditor.SetSize(cw, 1); ShowBootsEditor.WinLeft = cl; ShowLeaderEditor.SetSize(cw,1); ShowLeaderEditor.WinLeft = cr; ScopeSliderEditor.SetSize(w, 1); ScopeSliderEditor.SliderWidth = 90; ScopeSliderEditor.WinLeft = cl; DotREditor.SetSize(cw, 1); DotREditor.WinLeft = cl; DotREditor.EditBoxWidth = 20; DotXEditor.SetSize(cw, 1); DotXEditor.WinLeft = cr; DotXEditor.EditBoxWidth = 50; DotBEditor.SetSize(cw, 1); DotBEditor.WinLeft = cl; DotBEditor.EditBoxWidth = 20; DotYEditor.SetSize(cw, 1); DotYEditor.WinLeft = cr; DotYEditor.EditBoxWidth = 50; DotGEditor.SetSize(cw, 1); DotGEditor.WinLeft = cl; DotGEditor.EditBoxWidth = 20; NetAdjEditor.SetSize(w, 1); NetAdjEditor.SliderWidth = 90; NetAdjEditor.WinLeft = cl; AutoRecordEditor.SetSize(WinWidth / 2 + WinWidth /4, 1); AutoRecordEditor.WinLeft = cl; AutoRecordEditor.EditBoxWidth = 20; } //------------------------------------- // Notify //------------------------------------- function Notify(UWindowDialogControl _Control, byte i) { Super.Notify(_Control, i); switch (i) { case DE_Change: switch (_Control) { case ShowTimeEditor: ShowTime(); break; case ShowPingEditor: ShowPing(); break; case ShowTeamsEditor: ShowTeams(); break; case ShowAccEditor: ShowWeaponAccuracy(); break; case ShowFCEditor: ShowFC(); break; case AutoSSEditor: AutoSS(); break; case ShowTBEditor: TB(); break; case ColoredTextEditor: ColoredText(); break; case HitSoundsEditor: HitSounds(); break; case ShowBootsEditor: ShowBoots(); break; case ScopeSliderEditor: ScopeChanged(); LoadTextures(); break; case ShowLeaderEditor: ShowLeader(); break; case UseDotEditor: UseDot(); break; case DotREditor: HS.ChangeDotColor("RED", byte(DotREditor.GetValue())); LoadTextures(); break; case DotBEditor: HS.ChangeDotColor("BLUE", byte(DotBEditor.GetValue())); LoadTextures(); break; case DotGEditor: HS.ChangeDotColor("GREEN", byte(DotGEditor.GetValue())); LoadTextures(); break; case DotXEditor: DotXChange(); break; case DotYEditor: DotYChange(); break; case NetAdjEditor: AdjustNet(); break; case AutoRecordEditor: AutoRecordSet(); break; } case DE_Click: switch (_Control) { case PlayButton: ExecPlay(); Close(); Root.Console.CloseUWindow(); break; case SpecButton: ExecSpec(); Close(); Root.Console.CloseUWindow(); break; } } } //------------------------------------- // AutoRecordSet //------------------------------------- function AutoRecordSet() { HS.AutoRecorder = byte(AutoRecordEditor.GetValue()); HS.SaveConfig(); LoadSettings(); } //------------------------------------- // DotXChange //------------------------------------- function DotXChange() { HS.DotX = float(DotXEditor.GetValue()); HS.SaveConfig(); LoadSettings(); } //------------------------------------- // DotYChange //------------------------------------- function DotYChange() { HS.DotY = float(DotYEditor.GetValue()); HS.SaveConfig(); LoadSettings(); } //------------------------------------- // ExecSpec //------------------------------------- function ExecSpec() { if (!MyPlayer.PlayerReplicationInfo.bIsSpectator) MyPlayer.ConsoleCommand("Spectate"); } //------------------------------------- // ExecPlay //------------------------------------- function ExecPlay() { if (MyPlayer.PlayerReplicationInfo.bIsSpectator) MyPlayer.ConsoleCommand("QuickJoin"); } //------------------------------------- // ShowTime //------------------------------------- function ShowTime() { if (ShowTimeEditor.bChecked) MyPlayer.ConsoleCommand("ShowTime On"); else MyPlayer.ConsoleCommand("ShowTime Off"); } //------------------------------------- // UseDot //------------------------------------- function UseDot() { if (UseDotEditor.bChecked) MyPlayer.ConsoleCommand("UseDot On"); else MyPlayer.ConsoleCommand("UseDot Off"); } //------------------------------------- // ShowPing //------------------------------------- function ShowPing() { if (ShowPingEditor.bChecked) MyPlayer.ConsoleCommand("ShowPing On"); else MyPlayer.ConsoleCommand("ShowPing Off"); } //------------------------------------- // ShowTeams //------------------------------------- function ShowTeams() { if (ShowTeamsEditor.bChecked) MyPlayer.ConsoleCommand("ShowTeams On"); else MyPlayer.ConsoleCommand("ShowTeams Off"); } //------------------------------------- // ShowWeaponAccuracy //------------------------------------- function ShowWeaponAccuracy() { if (ShowAccEditor.GetValue() == "1") MyPlayer.ConsoleCommand("ShowWeaponAccuracy 1"); else if (ShowAccEditor.GetValue() == "2") MyPlayer.ConsoleCommand("ShowWeaponAccuracy 2"); else MyPlayer.ConsoleCommand("ShowWeaponAccuracy 0"); } //------------------------------------- // ShowFC //------------------------------------- function ShowFC() { if (ShowFCEditor.bChecked) MyPlayer.ConsoleCommand("ShowFC On"); else MyPlayer.ConsoleCommand("ShowFC Off"); } //------------------------------------- // AutoSS //------------------------------------- function AutoSS() { if (AutoSSEditor.bChecked) MyPlayer.ConsoleCommand("AutoSS On"); else MyPlayer.ConsoleCommand("AutoSS Off"); } //------------------------------------- // TB //------------------------------------- function TB() { if (ShowTBEditor.bChecked) MyPlayer.ConsoleCommand("ShowBeacon On"); else MyPlayer.ConsoleCommand("ShowBeacon Off"); } //------------------------------------- // ColoredText //------------------------------------- function ColoredText() { if (ColoredTextEditor.bChecked) MyPlayer.ConsoleCommand("EText On"); else MyPlayer.ConsoleCommand("EText Off"); } //------------------------------------- // HitSounds //------------------------------------- function HitSounds() { if (HitSoundsEditor.bChecked) MyPlayer.ConsoleCommand("HitSounds On"); else MyPlayer.ConsoleCommand("HitSounds Off"); } //------------------------------------- // ShowBoots //------------------------------------- function ShowBoots() { if (ShowBootsEditor.bChecked) MyPlayer.ConsoleCommand("ShowBoots On"); else MyPlayer.ConsoleCommand("ShowBoots Off"); } //------------------------------------- // ShowLeader //------------------------------------- function ShowLeader() { if (ShowLeaderEditor.bChecked) MyPlayer.ConsoleCommand("ShowLeader On"); else MyPlayer.ConsoleCommand("ShowLeader Off"); } //------------------------------------- // ScopeChanged //------------------------------------- function ScopeChanged() { switch (ScopeSliderEditor.GetValue()) { case 0: MyPlayer.ConsoleCommand("Scope 1"); break; case 1: MyPlayer.ConsoleCommand("Scope 2"); break; case 2: MyPlayer.ConsoleCommand("Scope 3"); break; case 3: MyPlayer.ConsoleCommand("Scope 4"); break; case 4: MyPlayer.ConsoleCommand("Scope 5"); break; } } //------------------------------------- // AdjustNet //------------------------------------- function AdjustNet() { local int i; i = byte(NetAdjEditor.GetValue()); switch (i) { case 0: NetAdjHelper = "0%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 1: NetAdjHelper = "20%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 2: NetAdjHelper = "30%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 3: NetAdjHelper = "40%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 4: NetAdjHelper = "50%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 5: NetAdjHelper = "60%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 6: NetAdjHelper = "70%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 7: NetAdjHelper = "80%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 8: NetAdjHelper = "90%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; case 9: NetAdjHelper = "100%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; default: NetAdjHelper = "100%"; NetAdjEditor.SetText(NetAdjText$"("$NetAdjHelper$")"); MyPlayer.ConsoleCommand("Netcode"@i); break; } } //------------------------------------- // LoadSettings //------------------------------------- function LoadSettings() { local EUTHudSettings _HS; MyPlayer = EUTFramedWindow(ParentWindow).Root.GetPlayerOwner(); foreach MyPlayer.AllActors(class'EUTHudSettings', _HS) if (_HS != none) HS = _HS; bAutoSS = HS.bAutoShot; bShowPing = HS.bShowPing; bShowTime = HS.bShowTime; bUseColoredText = HS.bColoredText; bShowTeams = HS.bShowTeams; bShowFC = HS.bShowFC; WeaponAccuracy = HS.bShowWeaponAccuracy; ScopeMode = HS.ScopeMode; HitSoundSoundS = HS.HitSounds; ScopeTexturePreview = HS.NewScopeTexture; bDrawDot = HS.bDot; DotColor = HS.DotColor; bTeamBeacons = HS.bTeamBeacon; bJumpBoots = HS.bJumpBoots; bLeader = HS.bLeaderBeacon; DotPreview.R = HS.DotColor.R; DotPreview.B = HS.DotColor.B; DotPreview.G = HS.DotColor.G; DotPosX = HS.DotX; DotPosY = HS.DotY; NetAdjPer = HS.nLevel; AutoRecord = HS.AutoRecorder; } //------------------------------------- // GetNetAdj //------------------------------------- function string GetNetAdj() { local string s; switch (NetAdjEditor.GetValue()) { case 0: s = "0%"; break; case 1: s = "20%"; break; case 2: s = "30%"; break; case 3: s = "40%"; break; case 4: s = "50%"; break; case 5: s = "60%"; break; case 6: s = "70%"; break; case 7: s = "80%"; break; case 8: s = "90%"; break; case 9: s = "100%"; break; default: s = "100%"; break; } return s; } //------------------------------------- // defaultproperties //------------------------------------- m^> LSC-z<-b.`< $ :<:bw<*L<w<*L<L {LLLocation:Lw<* $ u?, E <a/!N P  ?< $ R  ? $ Z  ? D:<% ZX Rz<b f ?L V-  ?L V aDS ? V /DA R! tu?, a<IS!5-Tz`5|NONEba/!"`5|us{`5|{`5|NONEr`B*`B.pp5I .`5| #{qV`B`5|`B.pp5I .`5|  tE  -( E `B? -'tt?`BR?, R! tE  a<(-z P  aadminZT! uZE  aadmin( AWW-z-k(z<b P  amore>>ZT! uZE  amore>>( A aSD<Iv uBIE  aSD<( 0apS<5G/Kv %uBIKE  'apS<5G/( ? E V&  ?L V &aD  ? P  a#########KgjDB?,K?,R?,r g?,Mu?,E MKR?,HE S!O g?, :6T<5R, aCaps:#####Iv MH aCaps:( MKH 'aR6T<5R( :6T<5R%sD<q<6T<5R s,s,J :6T<5R, f :6T<5R, gst^:6T<5R:H E HO  F ?tr  E< :6T<5R, aHatTrick Iv u?,H aHatTrick ( ft^:6T<5R:H E HO  F ?tr  E aGrabs:####Iv MHg aGrabs:( MKHg 'aR6N <5R(:6N <5R%sD<q<6N <5R[s,s, gst^:6N <5R:H" E HgO  F ?tr  E aAssist:###Iv MHg?, aAssist:( #MKHg?, 'aR6L<5R(:6L<5R%sD<q<6L<5R.s,s, gst^:6L<5R:G" #E Hg?,O  F ?tr  EMu?,B?,E MKR?, aCovers: ##Iv MH aCovers:( MKH 'aR6Z<5^(:6Z<5^%sD<q<6Z<5^0s,s, gst^:6Z<5^:E" E HO  F ?tr  E aSeals: ##Iv MHg aSeals:( MKHg 'aR6W <5R(:6W <5R%sD<q<6W <5Rs,s, gst^:6W <5R:D" E HgO  F ?tr  E aFlgKls: ##Iv MHg?, aFlgKls:( #MKHg?, 'aR6R <5C(t:6R <5C%sD<q<6R <5Cs,s, gst^:6R <5C:B" #E Hg?,O  F ?tr  E]-w0 ^  $ (Mv?,Hg?, Hg f $ (Mv?,Hg?, HgV&D?b?<,< A" $ P  ? V ZaD5-S~D?<5G?<5G<5Y?,d%,d oaШTime:SVPing:S<5LLoss:R<Eff:S~Iv 1uBIHg?,v faѨTime:SVPing:S<5LLoss:R<Eff:S~( _aШTime:SVPing:S<5LLoss:R<Iv 1uBIHg?,v VaѨTime:SVPing:S<5LLoss:R<( A" /u?,Hg?,v aL( d>~Rn~EY~?L~V-~~?L~V aD~?~V /D~-'~aTestx0N!y!hB@D~?,2{ ~{P!~f~N!~aP!'~y!T~~-(~{  x>N@a/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTHudSettings <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTHudSettings extends info config(EUT); var PlayerPawn MyPlayer; var EUTHudSettings HS; var EUTHudHelper HH; var globalconfig bool bAutoShot; var globalconfig bool bShowPing; var globalconfig bool bShowTime; var globalconfig bool bColoredText; var globalconfig bool bShowTeams; var globalconfig bool bShowFC; var globalconfig bool bDot; var globalconfig bool bTeamBeacon; var globalconfig bool bShowCredits; var globalconfig bool bLeaderBeacon; var globalconfig bool bJumpBoots; var globalconfig byte ScopeMode; var globalconfig byte HitSounds; var globalconfig byte nLevel; var globalconfig byte AutoRecorder; var globalconfig color DotColor; var globalconfig int bShowWeaponAccuracy; var globalconfig float DotX; var globalconfig float DotY; var globalconfig string NewScopeTexture; var texture Scope1; //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { Super.PostBeginPlay(); Scope1 = Texture(DynamicLoadObject("EUT_Textures.EUT_Scope1", class'Texture')); } //------------------------------------- // ShowPing //------------------------------------- function ShowPing(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("Show Ping: ON"); bShowPing = true; self.default.bShowPing = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("Show Ping: OFF"); bShowPing = false; self.default.bShowPing = false; SaveConfig(); break; default: MyPlayer.ClientMessage("Show Ping: "$bShowPing); break; } } //------------------------------------- // ShowTime //------------------------------------- function ShowTime(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("Show Time: ON"); bShowTime = true; self.default.bShowTime = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("Show Time: OFF"); bShowTime = false; self.default.bShowTime = false; SaveConfig(); break; default: MyPlayer.ClientMessage("Show Time: "$bShowTime); break; } } //------------------------------------- // EText //------------------------------------- function EText(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("EText: ON"); bColoredText = true; self.default.bColoredText = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("EText: OFF"); bColoredText = false; self.default.bColoredText = false; SaveConfig(); break; default: MyPlayer.ClientMessage("EText: "$bColoredText); break; } } //------------------------------------- // ShowTeams //------------------------------------- function ShowTeams(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("ShowTeams: ON"); bShowTeams = true; self.default.bShowTeams = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("ShowTeams: OFF"); bShowTeams = false; self.default.bShowTeams = false; SaveConfig(); break; default: MyPlayer.ClientMessage("ShowTeams: "$bShowTeams); break; } } //------------------------------------- // ShowWeaponAccuracy //------------------------------------- function ShowWeaponAccuracy(string s) { switch(Caps(s)) { case "0": bShowWeaponAccuracy = int("0"); self.default.bShowWeaponAccuracy = int("0"); MyPlayer.ClientMessage("Show Accuracy/Efficiency: Off"); SaveConfig(); break; case "1": bShowWeaponAccuracy = int("1"); self.default.bShowWeaponAccuracy = int("1"); MyPlayer.ClientMessage("Show Accuracy: On"); SaveConfig(); break; case "2": bShowWeaponAccuracy = int("2"); self.default.bShowWeaponAccuracy = int("2"); MyPlayer.ClientMessage("Show Efficiency: On"); SaveConfig(); break; default: MyPlayer.ClientMessage("ShowWeaponAccuracyuracy/Efficiency: "$bShowWeaponAccuracy); break; } } //------------------------------------- // Scope //------------------------------------- function Scope(string s) { switch(Caps(s)) { case "1": NewScopeTexture = "EUT_Textures.EUT_Scope1"; ScopeMode = 1; self.default.ScopeMode = 1; SaveConfig(); MyPlayer.ClientMessage("Scope texture Set: "$GetCurrentScope(NewScopeTexture)); break; case "2": NewScopeTexture = "EUT_Textures.Sample1"; ScopeMode = 2; self.default.ScopeMode = 2; SaveConfig(); MyPlayer.ClientMessage("Scope texture Set: "$GetCurrentScope(NewScopeTexture)); break; case "3": NewScopeTexture = "EUT_Textures.Sample2"; ScopeMode = 3; self.default.ScopeMode = 3; SaveConfig(); MyPlayer.ClientMessage("Scope texture Set: "$GetCurrentScope(NewScopeTexture)); break; case "4": NewScopeTexture = "BotPack.RReticle"; ScopeMode = 4; self.default.ScopeMode = 4; SaveConfig(); MyPlayer.ClientMessage("Scope texture Set: Default"); break; case "5": NewScopeTexture = "EUT_Textures.EUTReticle"; ScopeMode = 5; self.default.ScopeMode = 5; SaveConfig(); MyPlayer.ClientMessage("Scope texture Set: Default Hidden"); MyPlayer.ClientMessage("L337 Scope Active"); break; } } //------------------------------------- // ShowHelp //------------------------------------- function ShowHelp(string s) { MyPlayer.ClientMessage("Client Commands: (Type directly into console or bind to key!)"); MyPlayer.ClientMessage("AutoSS on/off Turns auto SS on/off"); MyPlayer.ClientMessage("ShowPing on/off Turns Ping Display on/off"); MyPlayer.ClientMessage("ShowTime on/off Turns Time Display on/off"); MyPlayer.ClientMessage("ShowTeams on/off Turns Team Count Display on/off"); MyPlayer.ClientMessage("ShowBoots on/off Turns Boot Count Display on/off"); MyPlayer.ClientMessage("ShowBeacon on/off Turns Team Beacon Display on/off"); MyPlayer.ClientMessage("ShowFC on/off Turns Flag Carrier Display on/off"); MyPlayer.ClientMessage("ShowWeaponAccuracy on/off Turns Accuracy Display on/off"); MyPlayer.ClientMessage("UseDot on/off Turns Cross Dot on/off"); MyPlayer.ClientMessage("EText: on/off Turns Colored Teamsay Messages on/off"); MyPlayer.ClientMessage("HitSoundSounds: on/off Turns HitSoundSounds on/off"); MyPlayer.ClientMessage("Scope: 1,2,3,or 4 Toggle Through default Scopes"); MyPlayer.ClientMessage("Spectate auto Reconnect as Spectator if Spots Available"); MyPlayer.ClientMessage("QuickJoin auto Reconnect as Player"); MyPlayer.ClientMessage("F2 Advanced Server Stats"); MyPlayer.ClientMessage("F3 Advanced Player Stats"); MyPlayer.ClientMessage("ShowTeamInfo Advanced Team Info / bind to any key"); OpenSettingsWindow(); } //------------------------------------- // GetCurrentScope //------------------------------------- function string GetCurrentScope(string s) { if (InStr(s, ".") != -1) s = Right(s, Len(s) - InStr(s, ".") - 1); return s; } //------------------------------------- // ShowFC //------------------------------------- function ShowFC(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("ShowFC: ON"); bShowFC = true; self.default.bShowFC = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("ShowFC: OFF"); bShowFC = false; self.default.bShowFC = false; SaveConfig(); break; default: MyPlayer.ClientMessage("ShowFCs: "$bShowFC); break; } } //------------------------------------- // _HitSounds //------------------------------------- function _HitSounds(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("HitSounds: ON"); HitSounds = 1; self.default.HitSounds = 1; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("HitSounds: OFF"); HitSounds = 0; self.default.HitSounds = 0; SaveConfig(); break; default: MyPlayer.ClientMessage("HitSounds: "$HitSounds); break; } } //------------------------------------- // AutoSS //------------------------------------- function AutoSS(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("AutoSS: ON"); bAutoShot = true; self.default.bAutoShot = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("AutoSS: OFF"); bAutoShot = false; self.default.bAutoShot = false; SaveConfig(); break; default: MyPlayer.ClientMessage("AutoSS: "$bAutoShot); break; } } //------------------------------------- // UseDot //------------------------------------- function UseDot(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("UseDot: ON"); bDot = true; self.default.bDot = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("UseDot: OFF"); bDot = false; self.default.bDot = false; SaveConfig(); break; default: MyPlayer.ClientMessage("UseDot: "$bDot); break; } } //------------------------------------- // ShowBeacon //------------------------------------- function ShowBeacon(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("ShowBeacon: ON"); bTeamBeacon = true; self.default.bTeamBeacon = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("ShowBeacon: OFF"); bTeamBeacon = false; self.default.bTeamBeacon = false; SaveConfig(); break; default: MyPlayer.ClientMessage("ShowBeacon: "$bTeamBeacon); break; } } //------------------------------------- // ShowLeader //------------------------------------- function ShowLeader(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("ShowLeader: ON"); bLeaderBeacon = true; self.default.bLeaderBeacon = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("ShowLeader: OFF"); bLeaderBeacon = false; self.default.bLeaderBeacon = false; SaveConfig(); break; default: MyPlayer.ClientMessage("ShowLeader: "$bLeaderBeacon); break; } } //------------------------------------- // ShowBoots //------------------------------------- function ShowBoots(string s) { switch(Caps(s)) { case "1": case "TRUE": case "ON": MyPlayer.ClientMessage("ShowBoots: ON"); bJumpBoots = true; self.default.bJumpBoots = true; SaveConfig(); break; case "0": case "FALSE": case "OFF": MyPlayer.ClientMessage("ShowBoots: OFF"); bJumpBoots = false; self.default.bJumpBoots = false; SaveConfig(); break; default: MyPlayer.ClientMessage("ShowBoots: "$bJumpBoots); break; } } //------------------------------------- // ChangeDotColor //------------------------------------- function ChangeDotColor(string Type, byte Value) { switch(Caps(Type)) { case "RED": DotColor.R = Value; self.default.DotColor.R = Value; break; case "BLUE": DotColor.B = Value; self.default.DotColor.B = Value; break; case "GREEN": DotColor.G = Value; self.default.DotColor.G = Value; break; } SaveConfig(); } //------------------------------------- // OpenSettingsWindow //------------------------------------- final function OpenSettingsWindow() { local WindowConsole Con; local EUTFramedWindow FW; const W = 520; const H = 500; if (MyPlayer == none || MyPlayer.Player == none || MyPlayer.Player.Console == none) { log("I'm an access none :P"); return; } Con = WindowConsole(MyPlayer.Player.Console); if (Con == none) { MyPlayer.ClientMessage("Unable to locate WindowConsole in EUTHudSettings>>OpenSettingsWindow()"); log("Unable to locate WindowConsole in EUTHudSettings>>OpenSettingsWindow()"); return; } if (!Con.bCreatedRoot || (Con.Root == None)) Con.CreateRootWindow(None); Con.bQuickKeyEnable = True; FW = EUTFramedWindow(Con.Root.CreateWindow(Class'EUTFramedWindow', 30.0, 30.0, W, H)); FW.HS = self; FW.ShowWindow(); } //------------------------------------- // ChangenLevel //------------------------------------- function ChangenLevel(string s) { local byte i; i = byte(s); if (i >= 0 && (i <= 9)) { nLevel = i; default.nLevel = i; SaveConfig(); } } //------------------------------------- // defaultproperties //------------------------------------- g>@i>@e;/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTHudMessages <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTHudMessages extends LocalMessagePlus; var color RedColor, YellowColor, CyanColor, GreenColor; var localized string TeamsUneven, RedCantCap, BlueCantCap, Ownage, Denied, Saved, GameWinningSave, HeadHunter, FlagCover, CoverSpree, UltraCover, Sealed, HatTrick, YouHaveTheFlag, EnemyHasTheFlag, FlakMonkey, ComboWhore, PlayerWaiting; //------------------------------------- // GetColor //------------------------------------- static function color GetColor( optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 ) { switch (i) { case 0: return Default.YellowColor; break; case 1: case 2: return Default.RedColor; break; case 3: return Default.CyanColor; break; case 4: return Default.RedColor; break; case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: return Default.GreenColor; break; case 14: return Default.YellowColor; break; case 15: case 16: case 17: return Default.GreenColor; break; } } //------------------------------------- // GetOffset //------------------------------------- static function float GetOffset(int i, float YL, float ClipY ) { switch (i) { case 0: return ClipY - YL*2 - 0.0833*ClipY; break; case 1: return ClipY - YL*3 - 0.0833*ClipY; break; case 2: case 3: return (ClipY / 2)+ (YL * 1.5); break; case 4: return (ClipY / 2); break; case 5: return (Default.YPos/768.0) * ClipY - 3*YL; break; case 6: case 7: case 8: return (Default.YPos/768.0) * ClipY + YL*2; break; case 9: return ClipY - YL*4 - 0.0833*ClipY; break; case 10: case 11: case 12: case 13: return (Default.YPos/768.0) * ClipY - 3*YL; case 14: case 15: case 16: return ClipY - YL*4 - 0.0833*ClipY; break; case 17: return ClipY - YL*2 - 0.0833*ClipY; break; } } //------------------------------------- // GetString //------------------------------------- static function string GetString( optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { switch (i) { case 0: return Default.YouHaveTheFlag; break; case 1: return Default.EnemyHasTheFlag; break; case 2: return Default.RedCantCap; break; case 3: return Default.BlueCantCap; break; case 4: return Default.TeamsUneven; break; case 5: return Default.Ownage@RelatedPRI_1.PlayerName$"!"; break; case 6: return Default.Denied; break; case 7: return Default.Saved@RelatedPRI_1.playerName$"!"; break; case 8: return Default.GameWinningSave; break; case 9: return Default.HeadHunter; break; case 10: return RelatedPRI_1.PlayerName@Default.FlagCover; break; case 11: return RelatedPRI_1.PlayerName@Default.CoverSpree; break; case 12: return RelatedPRI_1.PlayerName@Default.UltraCover; break; case 13: return RelatedPRI_1.PlayerName@Default.Sealed; break; case 14: return RelatedPRI_1.PlayerName@Default.HatTrick; break; case 15: return Default.FlakMonkey; break; case 16: return Default.ComboWhore; break; case 17: return Default.PlayerWaiting; break; } return ""; } //------------------------------------- // defaultproperties //------------------------------------- j>@l>@B/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTHudHelper <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTHudHelper expands Info; var FontInfo _FontInfo; var PlayerReplicationInfo OrderedPRI[32]; var EUTGameReplicationInfo MyCRI; var Pawn P; var font MySmallFont; var bool bCTF, bTDM, bDM, bCheckKeyBindings, bDebugLoad, bWeaponFired, bScreenShotTaken, bShowStats, bShowTeamInfo, bSetMessageDefaults, bCheckForAutoRecorder, bDemoLoaded; var byte StageCount, MouseYCount, SniperFireAnim0, SniperFireAnim1, SniperFireAnim2, SniperFireAnim3, SniperFireAnim4, SniperFireAnim5, ScreenShotDelay, DelayDataClear, ScopeMode; var color YellowColor, GreenColor, WhiteColor, GoldColor, BlueColor, LightCyanColor, SilverColor, BronzeColor, CyanColor, RedColor, ShadeColor, DarkRedColor, DarkBlueColor; var float WeaponDrawOffset, ShotTotal, DamageTotal, CurrentAccuracy, TapTime, TapRate; var texture NewReticle, NewScopeReticle; struct _ShotData { var int Enforcer, BioGun, ShockRifle, PulseGun, Ripper, MiniGun, FlakGun, EightBall, SniperRifle, SuperShockRifle, CustomWeapon; } ; var _ShotData SD; struct _Accuracy { var byte Enforcer, BioGun, ShockRifle, PulseGun, Ripper, MiniGun, FlakGun, EightBall, SniperRifle, SuperShockRifle, CustomWeapon; }; var _Accuracy Acc; struct _ShotCount { var byte Enforcer, BioGun, ShockRifle, PulseGun, Ripper, MiniGun, FlakGun, EightBall, SniperRifle, CustomWeapon; }; var _ShotCount SC; struct _AmmoCount { var float Enforcer, BioGun, ShockRifle, PulseGun, Ripper, MiniGun, FlakGun, EightBall, SniperRifle, CustomWeapon; }; var _AmmoCount AC; struct _StatInfo { var byte Accuracy; var int Effeciency; }; var _StatInfo StatInfo; const ReticleSize = 256; const ReticleOut = 0; //------------------------------------- // Destroyed //------------------------------------- function Destroyed() { Super.Destroyed(); if (_FontInfo != none) _FontInfo.Destroy(); } //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { Super.PostBeginPlay(); _FontInfo = FontInfo(Spawn(Class(DynamicLoadObject(class'ChallengeHUD'.default.FontInfoClass, class'Class')))); MySmallFont = Font(DynamicLoadObject("EUT_Textures.EUTSmallFont", class'Font')); } //------------------------------------- // RenderInfo //------------------------------------- simulated function RenderInfo(Canvas C ) { local GameReplicationInfo GRI; GRI = PlayerPawn(Owner).GameReplicationInfo; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': bCTF = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); break; case Class'EUTTDMHud': bTDM = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); break; case Class'EUTDMHud': bDM = true; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); break; } if (C.ClipX > 512) PreLoadData(C,GRI); } //------------------------------------- // PreLoadData //------------------------------------- simulated function PreLoadData(Canvas C, GameReplicationInfo GRI) { local byte i, NumPlayers; local PlayerReplicationInfo PRI; local PlayerPawn MyPlayer; local float X, Y, Loop, YPos, XL, YL; MyPlayer = PlayerPawn(Owner); NumPlayers = 0; for (i = 0; i < ArrayCount(OrderedPRI); i++) OrderedPRI[i] = None; for (i = 0; i < 32; i++) { PRI = GRI.PRIArray[i]; if (PRI != none && (PRI.PlayerName != "Player") && (PRI.Team == MyPlayer.PlayerReplicationInfo.Team)) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { OrderedPRI[NumPlayers] = PRI; NumPlayers++; if (NumPlayers == ArrayCount(OrderedPRI)) break; } } } SortPlayers(NumPlayers); C.Font = _FontInfo.GetSmallFont(C.ClipX); C.StrLen("PreLoadData", XL, YL ); YPos = YL*5 + 8; for (i = 0; i < NumPlayers; i++) { X = 10; Y = (YPos) + (GetYOffset(C) * Loop); if (i == 0) Y = YPos; DrawPlayerData(C, OrderedPRI[i], X, Y); Loop += 1; } } //------------------------------------- // DrawPlayerData //------------------------------------- simulated function DrawPlayerData(Canvas C, PlayerReplicationInfo PRI, float X, float Y) { local float XL, YL, XL2, YL2, XL3, YL3, Buffer; local PlayerPawn MyPlayer; local string Loc; local byte pid; MyPlayer = PlayerPawn(Owner); pid = PRI.PlayerID; C.Style = ERenderStyle.STY_Normal; //Location if (PRI.Team == MyPlayer.PlayerReplicationInfo.Team) { if (PRI.PlayerLocation != none) Loc = PRI.PlayerLocation.LocationName; else if (PRI.PlayerZone != None) Loc = PRI.PlayerZone.ZoneName; else Loc = ""; if (Loc != "" ) Loc = ""$Loc; } C.Font = _FontInfo.GetSmallestFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallestFont(900); if (C.ClipX < 900) C.Font = MySmallFont; C.DrawColor = GoldColor; C.StrLen(PRI.PlayerName, XL, YL); C.SetPos(X, Y); C.DrawText(PRI.PlayerName, false); C.StrLen("###########", Buffer, YL2); if (bCTF) { if (PRI.HasFlag != none && (!PRI.HasFlag.IsA('EUTReadyFlag'))) { C.DrawColor = GreenColor; C.SetPos(X + XL + (Buffer / 9), Y); C.DrawText("***Flag Carrier***", false); } } C.DrawColor = GreenColor; C.SetPos(X, Y + YL); C.DrawText("Location:",false); C.DrawColor = CyanColor; C.SetPos(X + Buffer, Y + YL); C.DrawText(Loc, false); C.DrawColor = GreenColor; C.SetPos(X, Y + (YL * 2)); C.DrawText("Health:",false); C.DrawColor = WhiteColor; C.SetPos(X + Buffer, Y + (YL * 2)); switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': C.DrawText(MyCRI.HealthAmmount[pid],false); break; case Class'EUTDMHud': break; } C.DrawColor = GreenColor; C.SetPos(X, Y + (YL * 3)); C.DrawText("Armor:",false); C.DrawColor = WhiteColor; C.SetPos(X + Buffer, Y + (YL * 3)); switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': case Class'EUTTDMHud': C.DrawText(MyCRI.ArmorAmmount[pid],false); break; case Class'EUTDMHud': break; } } //------------------------------------- // SortPlayers //------------------------------------- simulated function SortPlayers(byte N) { local byte I, J, Max; local PlayerReplicationInfo TempPRI; switch (PlayerPawn(Owner).HudType) { case Class'EUTCTFHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if (OrderedPRI[J].HasFlag != none) Max = J; else if (OrderedPRI[J].Score > OrderedPRI[Max].Score && (OrderedPRI[Max].HasFlag == none)) Max = J; else if ((OrderedPRI[J].Score == OrderedPRI[Max].Score) && (OrderedPRI[J].Deaths < OrderedPRI[Max].Deaths) && (OrderedPRI[Max].HasFlag == none)) Max = J; else if ((OrderedPRI[J].Score == OrderedPRI[Max].Score) && (OrderedPRI[J].Deaths == OrderedPRI[Max].Deaths) && (OrderedPRI[J].PlayerID < OrderedPRI[Max].Score) && (OrderedPRI[Max].HasFlag == none)) Max = J; } TempPRI = OrderedPRI[Max]; OrderedPRI[Max] = OrderedPRI[I]; OrderedPRI[I] = TempPRI; } break; case Class'EUTTDMHud': for (I = 0; I < N - 1; I++) { Max = I; for (J = I + 1; J < N; J++) { if (OrderedPRI[J].Score > OrderedPRI[Max].Score) Max = J; else if ((OrderedPRI[J].Score == OrderedPRI[Max].Score) && (OrderedPRI[J].Deaths < OrderedPRI[Max].Deaths)) Max = J; else if ((OrderedPRI[J].Score == OrderedPRI[Max].Score) && (OrderedPRI[J].Deaths == OrderedPRI[Max].Deaths) && (OrderedPRI[J].PlayerID < OrderedPRI[Max].Score)) Max = J; } TempPRI = OrderedPRI[Max]; OrderedPRI[Max] = OrderedPRI[I]; OrderedPRI[I] = TempPRI; } break; case Class'EUTDMHud': break; } } //------------------------------------- // GetYOffset //------------------------------------- simulated function float GetYOffset(Canvas C) { local float XL, YL, YL2; C.Font = _FontInfo.GetSmallestFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallestFont(900); if (C.ClipX < 900) C.Font = MySmallFont; C.StrLen("TEST", XL, YL); return YL * 5; } //------------------------------------- // ParseLoad //------------------------------------- simulated final function ParseLoad(Canvas C) { local string Full, Rate, ActorTime, NetTime; local int x; local float Time, Load, XL, YL; Full = PlayerPawn(Owner).Player.Console.MsgText[0]; if (Instr(Full,"r=") != -1) Rate = Mid(Full, 2, 2); if (Instr(Full,"act=") != -1) ActorTime = Mid(Full, Instr(Full,"act=") + 4, 3); if (instr(Full,"net=") != -1) NetTime = Mid(Full, instr(Full,"net=") + 4, 3); if (Rate != "" && (ActorTime != "") && (NetTime != "")) { Time = float(ActorTime) + float(NetTime) + 10.0; x = int(Rate); Load = (x * Time / 1000) * 100; C.Font = _FontInfo.GetStaticMediumFont(C.ClipX); C.Style = ERenderStyle.STY_Normal; C.DrawColor = RedColor; C.StrLen("Load:"@int(Load)@"%", XL, YL); C.SetPos(C.ClipX - XL, C.ClipY / 4 + YL); C.DrawText("Load:"@int(Load)@"%", false); } } //------------------------------------- // DrawBeacon //------------------------------------- simulated function DrawBeacon(Canvas C, Pawn P, byte Mode) { local float X, Y, W, H; local bool bLineOfSight; local vector vPawn; if (P == None || (P.PlayerReplicationInfo == none)) return; vPawn = P.Location; vPawn.Z += P.CollisionHeight; bLineOfSight = WorldToScreen(vPawn, Pawn(Owner), C.ClipX, C.ClipY, X, Y); if (bLineOfSight && IsValidCoord(x,C.ClipX) && IsValidCoord(y,C.ClipY)) { switch(P.PlayerReplicationInfo.Team) { case 0: C.DrawColor = RedColor * 0.333 * 3; break; case 1: C.DrawColor = BlueColor * 0.333 * 3; break; case 2: C.DrawColor = GreenColor * 0.333 * 3; break; case 3: C.DrawColor = GoldColor * 0.333 * 3; break; default: C.DrawColor = GreenColor * 0.333 * 3; break; } C.Font = _FontInfo.GetStaticSmallestFont(C.ClipX); C.SetPos(0, 0); switch (Mode) { case 0: C.TextSize(P.PlayerReplicationInfo.PlayerName@P.Health , W, H); C.SetPos(X - W / 2, Y - (H * 3)); C.DrawText(P.PlayerReplicationInfo.PlayerName@P.Health, false); break; case 1: C.TextSize(P.PlayerReplicationInfo.PlayerName$" (Leader)" , W, H); C.SetPos(X - W / 2, Y - (H * 3)); C.DrawText(P.PlayerReplicationInfo.PlayerName$" (Leader)", false); break; } } } //------------------------------------- // WorldToScreen //------------------------------------- simulated function bool IsValidCoord(float start, float stop) { if (start > 0 && start < stop) return true; else return false; } //------------------------------------- // WorldToScreen //------------------------------------- simulated static function bool WorldToScreen( Vector vPawn, Pawn P, float ClipX, float ClipY, out float X, out float Y ) { local vector Base, Screen; local float Scale; Base = P.Location; Base.Z += P.BaseEyeHeight; Screen = (vPawn - Base) << P.ViewRotation; if (Screen.X < 0.01) return false; scale = (ClipX / 2) / Tan(P.FovAngle / 2 / 180 * Pi); X = Screen.Y / Screen.X * scale + ClipX / 2; Y = - Screen.Z / Screen.X * scale + ClipY / 2; return true; } //------------------------------------- // NetAdjustment //------------------------------------- simulated final function float NetAdjustment(float Base, byte Request) { local float rv; switch (Request) { case 0: return Base; break; case 1: return Base * 0.95; break; case 2: return Base * 0.90; break; case 3: return Base * 0.85; break; case 4: return Base * 0.80; break; case 5: return Base * 0.75; break; case 6: return Base * 0.70; break; case 7: return Base * 0.65; break; case 8: return Base * 0.60; break; case 9: return Base * 0.55; break; default: return Base * 0.50; break; } return rv; } //------------------------------------- // SetMessageDefaults //------------------------------------- simulated function SetMessageDefaults(byte Mode) { bSetMessageDefaults = true; SetupReticle(0); if (!PlayerPawn(Owner).IsA('Spectator')) { if (PlayerPawn(Owner).DefaultFOV < 80 || PlayerPawn(Owner).DefaultFOV < 80) { PlayerPawn(Owner).DefaultFOV = 90; PlayerPawn(Owner).DesiredFOV = PlayerPawn(Owner).DefaultFOV; } else if (PlayerPawn(Owner).DesiredFOV != PlayerPawn(Owner).DefaultFOV && (PlayerPawn(Owner).DesiredFOV >= 80 || PlayerPawn(Owner).DefaultFOV >= 80)) { if (PlayerPawn(Owner).DesiredFOV > PlayerPawn(Owner).DefaultFOV) PlayerPawn(Owner).DefaultFOV = PlayerPawn(Owner).DesiredFOV; else PlayerPawn(Owner).DesiredFOV = PlayerPawn(Owner).DefaultFOV; } } else PlayerPawn(Owner).ConsoleCommand("fly"); switch (Mode) { case 0: case 1: if (MyCRI == none) MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); MyCRI.default._EnforcerKillMessage = MyCRI.EnforcerKillMessage; MyCRI.default._BioKillMessage = MyCRI.BioKillMessage; MyCRI.default._ShockRifleKillMessage = MyCRI.ShockRifleKillMessage; MyCRI.default._PulseGunKillMessage = MyCRI.PulseGunKillMessage; MyCRI.default._RipperKillMessage = MyCRI.RipperKillMessage; MyCRI.default._MiniGunKillMessage = MyCRI.MiniGunKillMessage; MyCRI.default._FlakGunKillMessage = MyCRI.FlakCannonKillMessage; MyCRI.default._EightBallKillMessage = MyCRI.RocketLauncherKillMessage; MyCRI.default._SniperRifleKillMessage = MyCRI.SniperRifleKillMessage; MyCRI.default._CustomeWeaponKillMessage = MyCRI.CustomWeaponKillMessage; MyCRI.default._AerialKillBioGunMessage = MyCRI.AerialKillBio; MyCRI.default._AerialKillRipperMessage = MyCRI.AerialKillRipper; MyCRI.default._AerialKillFlakGunMessage = MyCRI.AerialKillFlak; MyCRI.default._AerialKillEightBallMessage = MyCRI.AerialKillRockets; MyCRI.default._AerialKillSniperRifleMessage = MyCRI.AerialKillSniper; MyCRI.default._AerialKillShockRifleMessage = MyCRI.AerialKillSuper; MyCRI.default._AerialKillTranslocatorMessage = MyCRI.AerialKillTrans; MyCRI.default._AerialKillComboMessage = MyCRI.AerialKillCombo; MyCRI.default._AerialKillEnforcerMessage = MyCRI.AerialKillEnforcer; MyCRI.default._AerialKillPulseGunMessage = MyCRI.AerialKillPulse; MyCRI.default._AerialKillMiniGunMessage = MyCRI.AerialKillMini; MyCRI.default._AerialKillPistonMessage = MyCRI.AerialKillPiston; MyCRI.default._AerialKillImpactMessage = MyCRI.ImpactKillMessage; MyCRI.default._AerialKillTransMessage = MyCRI.TransKillMessage; MyCRI.default._AerialKillCustom = MyCRI.AerialKillCustom; if(MyCRI.bUsesSpreeSounds) { if(MyCRI.SpreeSound[0] != none) class'KillingSpreeMessage'.default.SpreeSound[0] = MyCRI.SpreeSound[0]; if(MyCRI.SpreeSound[1] != none) class'KillingSpreeMessage'.default.SpreeSound[1] = MyCRI.SpreeSound[1]; if(MyCRI.SpreeSound[2] != none) class'KillingSpreeMessage'.default.SpreeSound[2] = MyCRI.SpreeSound[2]; if(MyCRI.SpreeSound[3] != none) class'KillingSpreeMessage'.default.SpreeSound[3] = MyCRI.SpreeSound[3]; if(MyCRI.SpreeSound[4] != none) class'KillingSpreeMessage'.default.SpreeSound[4] = MyCRI.SpreeSound[4]; if(MyCRI.DoubleKillSound != none) class'EUTMultiKillMessage'.default.DoubleKillSound = MyCRI.DoubleKillSound; if(MyCRI.MultiKillSound != none) class'EUTMultiKillMessage'.default.MultiKillSound = MyCRI.MultiKillSound; if(MyCRI.MegaKillSound != none) class'EUTMultiKillMessage'.default.MegaKillSound = MyCRI.MegaKillSound; if(MyCRI.UltraKillSound != none) class'EUTMultiKillMessage'.default.UltraKillSound = MyCRI.UltraKillSound; if(MyCRI.MonsterKillSoundF != none) class'EUTMultiKillMessage'.default.MonsterKillSoundF = MyCRI.MonsterKillSoundF; if(MyCRI.LudicriousKillSound != none) class'EUTMultiKillMessage'.default.LudicriousKillSound = MyCRI.LudicriousKillSound; if(MyCRI.HolyShitKillSound != none) class'EUTMultiKillMessage'.default.HolyShitKillSound = MyCRI.HolyShitKillSound; if(MyCRI.OwnageSound != none) class'EUTMultiKillMessage'.default.OwnageSound = MyCRI.OwnageSound; if(MyCRI.WhickedSickSound != none) class'EUTMultiKillMessage'.default.WhickedSickSound = MyCRI.WhickedSickSound; } if(MyCRI.bEnhancedMessages) { if(MyCRI.RedTeamScoresSound != none) class'EUTTeamGameSounds'.default.RedTeamScoresSound = MyCRI.RedTeamScoresSound; if(MyCRI.BlueTeamScoresSound != none) class'EUTTeamGameSounds'.default.BlueTeamScoresSound = MyCRI.BlueTeamScoresSound; if(MyCRI.RedTeamTakesTheLeadSound != none) class'EUTTeamGameSounds'.default.RedTeamTakesTheLeadSound = MyCRI.RedTeamTakesTheLeadSound; if(MyCRI.BlueTeamTakesTheLeadSound != none) class'EUTTeamGameSounds'.default.BlueTeamTakesTheLeadSound = MyCRI.BlueTeamTakesTheLeadSound; if(MyCRI.RedTeamIncreasesThierLeadSound != none) class'EUTTeamGameSounds'.default.RedTeamIncreasesThierLeadSound = MyCRI.RedTeamIncreasesThierLeadSound; if(MyCRI.BlueTeamIncreasesThierLeadSound != none) class'EUTTeamGameSounds'.default.BlueTeamIncreasesThierLeadSound = MyCRI.BlueTeamIncreasesThierLeadSound; if(MyCRI.RedTeamDominatingSound != none) class'EUTTeamGameSounds'.default.RedTeamDominatingSound = MyCRI.RedTeamDominatingSound; if(MyCRI.BlueTeamDominatingSound != none) class'EUTTeamGameSounds'.default.BlueTeamDominatingSound = MyCRI.BlueTeamDominatingSound; if(MyCRI.HatTrickSound != none) class'EUTTeamGameSounds'.default.HatTrickSound = MyCRI.HatTrickSound; if(MyCRI.DeniedSound != none) class'EUTTeamGameSounds'.default.DeniedSound = MyCRI.DeniedSound; if(MyCRI.LastSecondSaveSound != none) class'EUTTeamGameSounds'.default.LastSecondSaveSound = MyCRI.LastSecondSaveSound; if(MyCRI.RedTeamIsTheWinnerSound != none) class'EUTTeamGameSounds'.default.RedTeamIsTheWinnerSound = MyCRI.RedTeamIsTheWinnerSound; if(MyCRI.BlueTeamIsTheWinnerSound != none) class'EUTTeamGameSounds'.default.BlueTeamIsTheWinnerSound = MyCRI.BlueTeamIsTheWinnerSound; if(MyCRI.FlawlessVictorySound != none) class'EUTTeamGameSounds'.default.FlawlessVictorySound = MyCRI.FlawlessVictorySound; class'CTFGame'.default.CaptureSound[0] = none; class'CTFGame'.default.CaptureSound[1] = none; class'CTFGame'.default.CaptureSound[2] = none; class'CTFGame'.default.CaptureSound[3] = none; } if(MyCRI.FlakMonkeySound != none) class'EUTMultiKillMessage'.default.FlakMonkeySound = MyCRI.FlakMonkeySound; if(MyCRI.HeadHunterSound != none) class'EUTMultiKillMessage'.default.HeadHunterSound = MyCRI.HeadHunterSound; if(MyCRI.ComboWhoreSound != none) class'EUTMultiKillMessage'.default.ComboWhoreSound = MyCRI.ComboWhoreSound; if(MyCRI.HitSoundSound != none) class'EUTHitSoundMessage'.default.HitSoundSound = MyCRI.HitSoundSound; if(MyCRI.HitSoundFriendlySound != none) class'EUTHitSoundMessage'.default.HitSoundFriendlySound = MyCRI.HitSoundFriendlySound; MyCRI.TextureCounter = 0; MyCRI.TextureSwitch = 0; MyCRI.bClassInitialized = true; break; } } //------------------------------------- // GetAccuracy //------------------------------------- simulated function byte GetAccuracy(int pid, Weapon W) { local int i; local byte rv; local string WeaponName; rv = 0; if (W == none || PlayerPawn(Owner) == none) return rv; WeaponName = _GetItemName(W); if (W.AmmoType == none) return GetLastAccuracy(WeaponName); if (MyCRI == none) MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); switch (WeaponName) { case "ZP_SUPERSHOCKRIFLE": case "SUPERSHOCKRIFLE": if (W.AnimFrame > 0 && (W.AnimSequence == 'Fire1') && (TapRate < W.AnimFrame) && (!bWeaponFired)) { SD.SuperShockRifle++; TapRate = W.AnimFrame; bWeaponFired = true; } else if (W.AnimFrame > 0 && (W.AnimSequence == 'Fire1') && (W.AnimFrame > TapRate) && (bWeaponFired)) TapRate = W.AnimFrame; else if (W.AnimFrame > 0 && (W.AnimSequence == 'Fire1') && (W.AnimFrame < TapRate) && (bWeaponFired)) { SD.SuperShockRifle++; TapRate = W.AnimFrame; bWeaponFired = true; } else if (W.AnimSequence == 'Still') { TapRate = 0; bWeaponFired = false; } //Verify against speedstepping this would be faster. /*if (W.AnimSequence == 'Fire1' && TapTime + 1.4 < PlayerPawn(Owner).CurrentTimeStamp) { SD.SuperShockRifle++; TapTime = PlayerPawn(Owner).CurrentTimeStamp; }*/ DamageTotal = MyCRI.TotalDamageAmmount[pid]; ShotTotal = SD.SuperShockRifle; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.SuperShockRifle = CurrentAccuracy; return Acc.SuperShockRifle; break; case "ZP_SNIPERRIFLE": case "SNIPERRIFLE": i = 0; if (W.AmmoType.AmmoAmount > AC.SniperRifle && (AC.SniperRifle != 0)) { i = W.AmmoType.AmmoAmount - AC.SniperRifle; AC.SniperRifle += i; return Acc.SniperRifle; } if (W.AmmoType.AmmoAmount < AC.SniperRifle && (AC.SniperRifle != 0)) SC.SniperRifle = AC.SniperRifle - W.AmmoType.AmmoAmount; AC.SniperRifle = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.SniperRifleHitCount[pid]; ShotTotal = SD.SniperRifle + SC.SniperRifle; SD.SniperRifle = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.SniperRifle = CurrentAccuracy; SC.SniperRifle = 0; return Acc.SniperRifle; break; case "ENFORCER": case "DOUBLEENFORCER": case "ZP_ENFORCER": i = 0; if (W.AmmoType.AmmoAmount > AC.Enforcer && (AC.Enforcer != 0)) { i = W.AmmoType.AmmoAmount - AC.Enforcer; AC.Enforcer += i; return Acc.Enforcer; } if (W.AmmoType.AmmoAmount < AC.Enforcer && (AC.Enforcer != 0)) SC.Enforcer = AC.Enforcer - W.AmmoType.AmmoAmount; AC.Enforcer = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.EnforcerHitCount[pid]; ShotTotal = SD.Enforcer + SC.Enforcer; SD.Enforcer = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.Enforcer = CurrentAccuracy; SC.Enforcer = 0; return Acc.Enforcer; break; case "UT_BIORIFLE": i = 0; if (W.AmmoType.AmmoAmount > AC.BioGun && (AC.BioGun != 0)) { i = W.AmmoType.AmmoAmount - AC.BioGun; AC.BioGun += i; return Acc.BioGun; } if (W.AmmoType.AmmoAmount < AC.BioGun && (AC.BioGun != 0)) SC.BioGun = AC.BioGun - W.AmmoType.AmmoAmount; AC.BioGun = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.BioGunHitCount[pid]; ShotTotal = SD.BioGun + SC.BioGun; SD.BioGun = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.BioGun = CurrentAccuracy; SC.BioGun = 0; return Acc.BioGun; break; case "SHOCKRIFLE": case "ZP_SHOCKRIFLE": i = 0; if (W.AmmoType.AmmoAmount > AC.ShockRifle && (AC.ShockRifle != 0)) { i = W.AmmoType.AmmoAmount - AC.ShockRifle; AC.ShockRifle += i; return Acc.ShockRifle; } if (W.AmmoType.AmmoAmount < AC.ShockRifle && (AC.ShockRifle != 0)) SC.ShockRifle = AC.ShockRifle - W.AmmoType.AmmoAmount; AC.ShockRifle = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.ShockRifleHitCount[pid]; ShotTotal = SD.ShockRifle + SC.ShockRifle; SD.ShockRifle = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.ShockRifle = CurrentAccuracy; SC.ShockRifle = 0; return Acc.ShockRifle; break; case "PULSEGUN": i = 0; if (W.AmmoType.AmmoAmount > AC.PulseGun && (AC.PulseGun != 0)) { i = W.AmmoType.AmmoAmount - AC.PulseGun; AC.PulseGun += i; return Acc.PulseGun; } if (W.AmmoType.AmmoAmount < AC.PulseGun && (AC.PulseGun != 0)) SC.PulseGun = AC.PulseGun - W.AmmoType.AmmoAmount; AC.PulseGun = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.PulseGunHitCount[pid]; ShotTotal = SD.PulseGun + SC.PulseGun; SD.PulseGun = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.PulseGun = CurrentAccuracy; SC.PulseGun = 0; return Acc.PulseGun; break; case "RIPPER": i = 0; if (W.AmmoType.AmmoAmount > AC.Ripper && (AC.Ripper != 0)) { i = W.AmmoType.AmmoAmount - AC.Ripper; AC.Ripper += i; return Acc.Ripper; } if (W.AmmoType.AmmoAmount < AC.Ripper && (AC.Ripper != 0)) SC.Ripper = AC.Ripper - W.AmmoType.AmmoAmount; AC.Ripper = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.RipperHitCount[pid]; ShotTotal = SD.Ripper + SC.Ripper; SD.Ripper = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.Ripper = CurrentAccuracy; SC.Ripper = 0; return Acc.Ripper; break; case "MINIGUN2": i = 0; if (W.AmmoType.AmmoAmount > AC.MiniGun && (AC.MiniGun != 0)) { i = W.AmmoType.AmmoAmount - AC.MiniGun; AC.MiniGun += i; return Acc.MiniGun; } if (W.AmmoType.AmmoAmount < AC.MiniGun && (AC.MiniGun != 0)) SC.MiniGun = AC.MiniGun - W.AmmoType.AmmoAmount; AC.MiniGun = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.MiniGunHitCount[pid]; ShotTotal = SD.MiniGun + SC.MiniGun; SD.MiniGun = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.MiniGun = CurrentAccuracy; SC.MiniGun = 0; return Acc.MiniGun; break; case "UT_FLAKCANNON": i = 0; if (W.AmmoType.AmmoAmount > AC.FlakGun && (AC.FlakGun != 0)) { i = W.AmmoType.AmmoAmount - AC.FlakGun; AC.FlakGun += i; return Acc.FlakGun; } if ( W.AmmoType.AmmoAmount < AC.FlakGun && ( AC.FlakGun != 0 )) SC.FlakGun = AC.FlakGun - W.AmmoType.AmmoAmount; AC.FlakGun = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.FlakGunHitCount[pid]; ShotTotal = SD.FlakGun + SC.FlakGun; SD.FlakGun = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.FlakGun = CurrentAccuracy; SC.FlakGun = 0; return Acc.FlakGun; break; case "UT_EIGHTBALL": i = 0; if (W.AmmoType.AmmoAmount > AC.EightBall && (AC.EightBall != 0)) { i = W.AmmoType.AmmoAmount - AC.EightBall; AC.EightBall += i; return Acc.EightBall; } if (W.AmmoType.AmmoAmount < AC.EightBall && (AC.EightBall != 0)) SC.EightBall = AC.EightBall - W.AmmoType.AmmoAmount; AC.EightBall = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.EightBallHitCount[pid]; ShotTotal = SD.EightBall + SC.EightBall; SD.EightBall = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.EightBall = CurrentAccuracy; SC.EightBall = 0; return Acc.EightBall; break; case caps(MyCRI.CustomWeaponName): if (MyCRI.bUsesCustomWeapon) { i = 0; if (W.AmmoType.AmmoAmount > AC.CustomWeapon && (AC.CustomWeapon != 0)) { i = W.AmmoType.AmmoAmount - AC.CustomWeapon; AC.CustomWeapon += i; return Acc.CustomWeapon; } if (W.AmmoType.AmmoAmount < AC.CustomWeapon && (AC.CustomWeapon != 0)) SC.CustomWeapon = AC.CustomWeapon - W.AmmoType.AmmoAmount; AC.CustomWeapon = W.AmmoType.AmmoAmount; DamageTotal = MyCRI.CustomWeaponHitCount[pid]; ShotTotal = SD.CustomWeapon + SC.CustomWeapon; SD.CustomWeapon = ShotTotal; CurrentAccuracy = DamageTotal / ShotTotal * 100; if (CurrentAccuracy < 0) CurrentAccuracy = 0; Acc.CustomWeapon = CurrentAccuracy; SC.CustomWeapon = 0; return Acc.CustomWeapon; } break; } return rv; } //------------------------------------- // DrawTeamCount //------------------------------------- simulated function DrawTeamCount( Canvas C, texture TeamBack, byte rts, byte bts, float Scale, byte AccuracyOrEffeciency) { local float X, Y; local byte CanvasStyle; CanvasStyle = C.Style; C.Style = ERenderStyle.STY_Translucent; switch(AccuracyOrEffeciency) { case 0: Y = C.ClipY - (63.5 + WeaponDrawOffset) * Scale; break; case 1: case 2: Y = C.ClipY - (127 + WeaponDrawOffset) * Scale; break; } C.CurX = X; C.CurY = Y; if (rts != -1) { C.DrawColor = RedColor; C.SetPos(X, Y); C.DrawTile(TeamBack, 128.00 * Scale, 64.00 * Scale, 0.00,0.00, 128.00, 64.00); C.DrawColor = WhiteColor; DrawBigNumber(C, Max(0, rts), X + 32 * Scale, Y + 16 * Scale, Scale, 1); } if (bts != -1) { C.DrawColor = BlueColor; Y = Y - 63.5 * Scale; C.SetPos(X, Y); C.DrawTile(TeamBack, 128.00 * Scale, 64.00 * Scale, 0.00, 0.00, 128.00, 64.00); C.DrawColor = WhiteColor; DrawBigNumber(C, Max(0, bts), X + 32 * Scale, Y + 16 * Scale, Scale, 1); } C.Style = CanvasStyle; } //------------------------------------- // DrawAccuracy //------------------------------------- simulated function DrawAccuracy( Canvas C, byte i, texture AccuracyBack, float Scale, color HudColor) { local float X, Y, YX; local byte CanvasStyle; CanvasStyle = C.Style; C.Style = ERenderStyle.STY_Translucent; Y = C.ClipY - (63.5 + WeaponDrawOffset) * Scale; C.CurX = X; C.CurY = Y; C.DrawColor = HudColor; C.SetPos(X, Y); C.DrawTile(AccuracyBack, 128.00 * Scale, 64.00 * Scale, 0.00, 0.00, 128.00, 64.00); C.DrawColor = WhiteColor; DrawBigNumber(C, Max(0, i), X + 24 * Scale, Y + 16 * Scale, Scale, 1); C.Style = CanvasStyle; } //------------------------------------- // DrawEffeciency //------------------------------------- simulated function DrawEffeciency( Canvas C, texture text, int eff, float Scale, color HudColor) { local float X, Y; local byte CanvasStyle; CanvasStyle = C.Style; C.Style = ERenderStyle.STY_Translucent; C.Style = Style; Y = C.ClipY - (63.5 + WeaponDrawOffset) * Scale; C.CurX = X; C.CurY = Y; C.DrawColor = HudColor; C.SetPos(X, Y); C.DrawTile(text, 128.00 * Scale, 64.00 * Scale, 0.00, 64.00, 128.00, 64.00); C.DrawColor = WhiteColor; DrawBigNumber(C, Max(0, eff), X + 24 * Scale, Y + 16 * Scale, Scale, 1); C.Style = CanvasStyle; } //------------------------------------- // ResetAmmoCount //------------------------------------- simulated final function ResetAmmoCount() { AC.Enforcer = 0; AC.BioGun = 0; AC.ShockRifle = 0; AC.PulseGun = 0; AC.Ripper = 0; AC.MiniGun = 0; AC.FlakGun = 0; AC.EightBall = 0; AC.SniperRifle = 0; AC.CustomWeapon = 0; } //------------------------------------- // ResetScope //------------------------------------- simulated function ResetScope(PlayerPawn MyPlayer) { if (MyPlayer != none) if (texture'RReticle'.USize == ReticleOut && (MyPlayer.DesiredFOV == MyPlayer.DefaultFOV)) SetupReticle(0); } //------------------------------------- // DrawReticle //------------------------------------- simulated function DrawReticle( Canvas C, PlayerPawn MyPlayer, string s, byte i, color CrossColor, color DotColor) { local float Offset; local color CanvasColor; if (MyPlayer == none || (MyPlayer.Weapon == None) || (MyCRI == none)) return; if (!PlayerPawn(Owner).IsA('Spectator')) { if (MyPlayer.DefaultFOV < 90) { switch(MyCRI.SetFOV) { case 1: MyPlayer.DefaultFOV = 90; MyPlayer.DesiredFOV = MyPlayer.DefaultFOV; break; } } } if (MyPlayer.DesiredFOV == MyPlayer.DefaultFOV) return; if (MyCRI.bLevelSwitch) MyPlayer.DesiredFOV = MyPlayer.DefaultFOV; if (i == 4) { SetupReticle(0); CanvasColor = C.DrawColor; Offset = C.ClipX / 640; C.SetPos(0.5 * C.ClipX - 128 * Offset, 0.5 * C.ClipY - 128 * Offset ); C.Style = ERenderStyle.STY_Translucent; C.DrawColor = GreenColor; C.DrawIcon(texture'RReticle', Offset); C.DrawColor = CanvasColor; return; } if (i < 4) { SetupReticle(1); if (MyPlayer != none && (MyPlayer.DesiredFOV != MyPlayer.DefaultFOV)) { if (NewReticle == none) { ScopeMode = i; NewReticle = texture(DynamicLoadObject(s, class'Texture')); } if (ScopeMode != i) { ScopeMode = i; NewReticle = texture(DynamicLoadObject(s, class'Texture')); } Offset = C.ClipX / 640; C.SetPos(0.5 * C.ClipX - 128 * Offset, 0.5 * C.ClipY - 128 * Offset ); C.Style = ERenderStyle.STY_Translucent; C.DrawColor = 15 * CrossColor; C.DrawIcon(NewReticle, Offset); C.DrawColor = CanvasColor; return; } } if(i > 4) { SetupReticle(1); if (MyPlayer != none && (MyPlayer.DesiredFOV != MyPlayer.DefaultFOV)) { if (NewScopeReticle == none) NewScopeReticle = Texture(DynamicLoadObject(s, class'Texture')); DrawNewScope(C, MyPlayer, CrossColor, DotColor); return; } } } //------------------------------------- // DrawNewScope //------------------------------------- simulated function DrawNewScope ( Canvas C, PlayerPawn MyPlayer, color CrossColor, color DotColor) { local float Offset, Range, X, Y, X1, Y1, X2, Y2, Y3, Fov; local vector HitLocation, HitNormal, StartTrace, EndTrace, xv, yv, zv; local float Radi; local font CanvasFont; local Actor A; C.DrawColor = 15 * CrossColor; CanvasFont = C.Font; X = C.ClipX / 401; Y = C.ClipY / 401; X1 = C.ClipX / 7; Y1 = C.ClipY / 7; X2 = C.ClipX / 9; Y2 = C.ClipY / 9; Y3 = C.ClipY / 1360; Fov = 90 - MyPlayer.DesiredFOV; if (Level.bHighDetailMode) { C.Style = ERenderStyle.STY_Modulated; C.SetPos(3 * X1 + C.ClipX / 601.5, 3 * Y1 + C.ClipY / 601.5); C.DrawTile(NewScopeReticle, X1 - 2 * C.ClipX / 601.5, Y1 - 2 * C.ClipY / 601.5, 220, 220, 0, 0 ); C.Style = ERenderStyle.STY_Translucent; } else C.Style = ERenderStyle.STY_Translucent; C.SetPos(3 * X1, 3 * Y1); C.DrawTile(NewScopeReticle, X1, Y1, 0, 0, 256, 193); C.SetPos(200 * X, C.ClipY / 229 * (Fov)+ 0.6 * C.ClipY / 28); C.DrawTile(NewScopeReticle, X, C.ClipY / 28, 0, 20, 3, 10); C.SetPos(200 * X, 15.35 * C.ClipY / 28 + C.ClipY / 229 * MyPlayer.DesiredFOV); C.DrawTile(NewScopeReticle, X, C.ClipY / 28, 0, 20, 3, 10); C.SetPos(C.ClipX / 229 * (Fov) + 0.6 * C.ClipX / 28, 200 * Y); C.DrawTile(NewScopeReticle, C.ClipX / 28, Y, 10, 0, 10, 3); C.SetPos(15.35 * C.ClipX / 28 + C.ClipX / 229 * MyPlayer.DesiredFOV, 200 * Y ); C.DrawTile(NewScopeReticle, C.ClipX / 28, Y, 10, 0, 10, 3); C.DrawColor = DotColor; C.Style = ERenderStyle.STY_Normal; C.SetPos(199.5 * X, 199.5 * Y); C.DrawTile(NewScopeReticle, 2 * X, 2 * Y, 0, 202, 53, 53); C.DrawColor = 15 * CrossColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(200 * X, 4 * Y2); C.DrawTile(NewScopeReticle, X, Y3 * (Fov), 129, 197, 3, 54); C.SetPos(4 * X2, 200 * Y); C.DrawTile(NewScopeReticle, C.ClipX / 1360 * (Fov), Y, 69, 200, 54, 3); C.SetPos(200 * X, 5 * Y2 - Y3 * (Fov)); C.DrawTile(NewScopeReticle, C.ClipX/401, C.ClipY/1360 * (Fov), 144, 199, 3, 54); C.SetPos(5 * X2 - C.ClipX / 1360 * (Fov), 200 * Y); C.DrawTile(NewScopeReticle, C.ClipX / 1360 * (Fov), Y, 163, 199, 54, 3); GetAxes(Pawn(owner).ViewRotation, xv, yv, zv); if ((Pawn(Owner).ViewRotation.Pitch >= 0) && (Pawn(Owner).ViewRotation.Pitch <= 18000)) Radi = float(Pawn(Owner).ViewRotation.Pitch) / float(182) * (Pi / float(180)); else Radi = float(Pawn(Owner).ViewRotation.Pitch - 65535) / float(182) * (Pi / float(180)); StartTrace = Owner.Location + Pawn(Owner).EyeHeight * zv * cos(Radi); MyPlayer.Weapon.AdjustedAim = Pawn(owner).AdjustAim(1000000, StartTrace, 2.75 * MyPlayer.Weapon.AimError, False, False); EndTrace = StartTrace + (20000 * vector(MyPlayer.Weapon.AdjustedAim)); A = Pawn(Owner).TraceShot(HitLocation, HitNormal, EndTrace, StartTrace); Range = Vsize(StartTrace - HitLocation) / 48 - 0.25; C.SetPos(202 * X - 50, 4 * Y1 + Y); C.Font = Font'Botpack.WhiteFont'; C.DrawColor = DotColor; Offset = MyPlayer.DefaultFOV / MyPlayer.DesiredFOV; C.DrawText("X"$int(Offset)$"."$int(10 * Offset - 10 * int(Offset))); C.SetPos(202 * X, 4 * Y1 + Y); C.Font = Font'Botpack.WhiteFont'; C.DrawText( "R: "$int(Range)$"."$int(10 * RANGE - 10 * int(RANGE))$""); C.Font = CanvasFont; } //------------------------------------- // CheckKeyBindings //------------------------------------- simulated final function CheckKeyBindings() { local int i; local string k; local string a, f; local bool bFound; local PlayerPawn PP; if (PlayerPawn(Owner) == none) return; bCheckKeyBindings = true; PP = PlayerPawn(Owner); MouseYCount = 0; for (i = 0; i < 255; i++) { k = PP.ConsoleCommand("KEYNAME "$i); if (k != "") { a = PP.ConsoleCommand("KEYBINDING "$k ); if (a ~= "ShowStats") bFound = true; f = caps(a); if (instr(f,"AMOUSEY") != -1) { MouseYCount++; if (instr(f,"SPEED=") != -1) { f = Mid(f, instr(f,"SPEED=") + 6); if (MyCRI != none) MyCRI.MouseYSetting = float(f); else { MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); MyCRI.MouseYSetting = float(f); } } } } } if (!bFound) { PP.ConsoleCommand("Set Input F3 ShowStats"); PP.ClientMessage("ShowStats bound to F3"); } } //------------------------------------- // DrawDigit //------------------------------------- simulated function DrawDigit( Canvas C, int i, int x, float up, out byte bMin) { if (bMin == 1) { C.CurX -= x; C.DrawTile(Texture'BotPack.HudElements1', up * 25, 64 * up, 0, 64, 25.0, 64.0); bMin= 0; } if (i == 1) C.CurX -= 0.625 * x; else C.CurX -= 0.25 * x; C.DrawTile(Texture'BotPack.HudElements1', up * 25, 64 * up, i * 25, 0, 25.0, 64.0); C.CurX += 7 * up; } //------------------------------------- // DrawBigNumber //------------------------------------- simulated function DrawBigNumber( Canvas C, int val, int X, int Y, float Scale, optional float sf) { local int i, max, step; local float _Scale; local byte bMin; if (sf != 0) _Scale = Scale * sf; else _Scale = Scale; C.CurX = X; C.CurY = Y; step = 16 * _Scale; if (val < 0) bMin = 1; max = FMin(9999, Abs(val)); if (max >= 1000) { C.CurX -= step; i = 0.001 * max; DrawDigit(C, i, step, _Scale, bMin); max = max - 1000 * i; i = 0.01 * max; DrawDigit(C, i, step, _Scale, bMin); max = max - 100 * i; } else if (max >= 100) { i = 0.01 * max; DrawDigit(C, i, step, _Scale, bMin); max = max - 100 * i; } else C.CurX += step; if (max >= 10) { i = 0.1 * max; DrawDigit(C, i, step, _Scale, bMin); max = max - 10 * i; } else if (i > 0) DrawDigit(C, 0, step, _Scale, bMin); else C.CurX += step; DrawDigit(C, max, step, _Scale, bMin); } //------------------------------------- // _GetItemName //------------------------------------- simulated function string _GetItemName(Weapon W) { return caps(mid(string(W.Class), instr(string(W.Class), ".") + 1)); } //------------------------------------- // GetLastAccuracy //------------------------------------- simulated function byte GetLastAccuracy(string s) { local byte rv; switch (s) { case "ZP_SUPERSHOCKRIFLE": case "SUPERSHOCKRIFLE": return Acc.SuperShockRifle; break; case "ZP_SNIPERRIFLE": case "SNIPERRIFLE": return Acc.SniperRifle; break; case "ENFORCER": case "DOUBLEENFORCER": case "ZP_ENFORCER": return Acc.Enforcer; break; case "UT_BIORIFLE": return Acc.BioGun; break; case "SHOCKRIFLE": case "ZP_SHOCKRIFLE": return Acc.ShockRifle; break; case "PULSEGUN": return Acc.PulseGun; break; case "RIPPER": return Acc.Ripper; break; case "MINIGUN2": return Acc.MiniGun; break; case "UT_FLAKCANNON": return Acc.FlakGun; break; case "UT_EIGHTBALL": return Acc.EightBall; break; } return rv; } //------------------------------------- // FixPhysics //------------------------------------- simulated function FixPhysics(PlayerPawn MyPlayer) { if (MyPlayer != none && (MyPlayer.Physics == PHYS_Walking)) { if (MyPlayer.DodgeDir == DODGE_Active) MyPlayer.DodgeDir = DODGE_Done; } } //------------------------------------- // CheckForAutoRecorder //------------------------------------- simulated final function CheckForAutoRecorder(PlayerPawn MyPlayer, byte i) { local string s; bCheckForAutoRecorder = true; if (!MyPlayer.bClientDemoNetFunc) return; switch (i) { case -1: case 0: break; case 1: bDemoLoaded = true; s = LogDate()$"-"$MyPlayer.Level.Title; s = SterilizeString(s); MyPlayer.ConsoleCommand("demorec \""$s$"\""); break; case 2: bDemoLoaded = true; s = MyPlayer.Level.Title; s = SterilizeString(s); MyPlayer.ConsoleCommand("demorec \""$s$"\""); break; default: break; } } //------------------------------------- // StopDemo //------------------------------------- simulated final function StopDemo(PlayerPawn MyPlayer) { if (!bDemoLoaded && MyPlayer.bClientDemoNetFunc) return; MyPlayer.ConsoleCommand("stopdemo"); } //------------------------------------- // LogDate //------------------------------------- simulated function string LogDate() { local string d, t; d = Level.Year$"-"$PrePad(Level.Month,"0",2)$"-"$PrePad(Level.Day,"0",2); t = PrePad(Level.Hour,"0",2)$":"$PrePad(Level.Minute,"0",2)$"."$PrePad(Level.Second,"0",2); return d@t; } //------------------------------------- // PrePad //------------------------------------- simulated function string PrePad(coerce string rv, string p, int i) { while (Len(rv) < i) rv = p$rv; return rv; } //------------------------------------- // SterilizeString //------------------------------------- simulated function string SterilizeString(string s) { local string rv; local int i; rv = ""; for (i = 0; i < Len(s); i++) { if (InStr("\/*?:<>|"$Chr(34), Mid(s, i, 1)) != -1) rv = rv $ "_"; else rv = rv $ Mid(s, i, 1); } return rv; } //------------------------------------- // GetTime //------------------------------------- simulated function string GetTime(GameReplicationInfo GRI) { local int Min, Sec; local string s; Min = GRI.RemainingTime; if (Min == 0) Min = MyCRI.RealTotalGameTime; Sec = Min % 60; Min = Min / 60; if (Min < 10) s = s$"0"$string(Min); else s = s$string(Min); if (Sec < 10) s = s$"0"$string(Sec); else s = s$string(Sec); return s; } //------------------------------------- // GetTimeDigit 15 x 27 >> 4 //------------------------------------- simulated function GetTimeDigit(string Dig, out float X, out float Y) { switch (int(Dig)) { case 0: X = 0; Y = 128; break; case 1: X = 32; Y = 128; break; case 2: X = 64; Y = 128; break; case 3: X = 96; Y = 128; break; case 4: X = 128; Y = 128; break; case 5: X = 160; Y = 128; break; case 6: X = 192; Y = 128; break; case 7: X = 224; Y = 128; break; case 8: X = 0; Y = 192; break; case 9: X = 32; Y = 192; break; } } //------------------------------------- // SetupReticle //------------------------------------- simulated final function SetupReticle(byte i) { switch(i) { case 0: texture'RReticle'.USize = ReticleSize; texture'RReticle'.VSize = ReticleSize; break; case 1: texture'RReticle'.USize = ReticleOut; texture'RReticle'.VSize = ReticleOut; break; } } //------------------------------------- // ResetWeaponData //------------------------------------- simulated final function ResetWeaponData() { SniperFireAnim0 = 0; SniperFireAnim1 = 0; SniperFireAnim2 = 0; SniperFireAnim3 = 0; SniperFireAnim4 = 0; SniperFireAnim5 = 0; AC.Enforcer = 0; AC.BioGun = 0; AC.ShockRifle = 0; AC.PulseGun = 0; AC.Ripper = 0; AC.MiniGun = 0; AC.FlakGun = 0; AC.EightBall = 0; AC.SniperRifle = 0; AC.CustomWeapon = 0; ShotTotal = 0; DamageTotal = 0; CurrentAccuracy = 0; SD.Enforcer = 0; SD.BioGun = 0; SD.ShockRifle = 0; SD.PulseGun = 0; SD.Ripper = 0; SD.MiniGun = 0; SD.FlakGun = 0; SD.EightBall = 0; SD.SniperRifle = 0; SD.SuperShockRifle = 0; SD.CustomWeapon = 0; Acc.Enforcer = 0; Acc.BioGun = 0; Acc.ShockRifle = 0; Acc.PulseGun = 0; Acc.Ripper = 0; Acc.MiniGun = 0; Acc.FlakGun = 0; Acc.EightBall = 0; Acc.SniperRifle = 0; Acc.SuperShockRifle = 0; Acc.CustomWeapon = 0; SC.Enforcer = 0; SC.BioGun = 0; SC.ShockRifle = 0; SC.PulseGun = 0; SC.Ripper = 0; SC.MiniGun = 0; SC.FlakGun = 0; SC.EightBall = 0; SC.SniperRifle = 0; SC.CustomWeapon = 0; } simulated final function bool IsUdemoSpectator(PlayerPawn P) { if ( P != none && (!P.bCollideActors) && ( P.GetStateName() == 'CheatFlying') && ( caps(mid(string(P.Class), instr(string(P.Class), ".") + 1)) == "DEMOPLAYBACKSPEC")) return true; else return false; } //------------------------------------- // defaultproperties //------------------------------------- m>@o>@I/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTHitSoundMessage <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTHitSoundMessage extends LocalMessagePlus; var sound HitSoundSound, HitSoundFriendlySound; //------------------------------------- // ClientReceive //------------------------------------- static simulated function ClientReceive( PlayerPawn MyPlayer, optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { Super.ClientReceive(MyPlayer, i, RelatedPRI_1, RelatedPRI_2, OptionalObject); switch (i) { case 0: TournamentPlayer(MyPlayer).ClientPlaySound(Default.HitSoundSound,,true); break; case 1: TournamentPlayer(MyPlayer).ClientPlaySound(Default.HitSoundFriendlySound,,true); break; } } //------------------------------------- // defaultproperties //------------------------------------- U/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTGameReplicationInfo <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTGameReplicationInfo expands CTFReplicationInfo; var bool bShowIPS, bCanSpectate, bAutoShot, bTemp, bTeamBeacon, bDestroy, bJumpBoots, bLeaderBeacon, bDebug, bScoreBoardEff, bWarmupSwitch, bUsesCustomWeapon, bIpToCountry, bUsesSpreeSounds, bLevelSwitch, bMatchStarted, bEnhancedMessages, bTournament, bClassInitialized; var byte SealsSpreeCount[40], CoversSpreeCount[40], HeadShotsCount[40], ClientHitSound[40], HeadHunterCount[40], ComboWhoreCount[40], FlakMonkeyCount[40], Dumx, RequestHitsounds, MouseYRefCount, ClientIdentified[40], SetFOV, TextureCounter, TextureSwitch, ScrollersCount, TimeOffset, PlayWaitMessage[40]; var int TotalDamageAmmount[40], TotalKills[40], TotalDeaths[40], CurrentRanking[40], CurrentTotalAccuracy[40], BestRanking[3], ArmorAmmount[40], HealthAmmount[40], ClientCrosshair, ClientPing[40], EnforcerHitCount[40], BioGunHitCount[40], PulseGunHitCount[40], RipperHitCount[40], MiniGunHitCount[40], FlakGunHitCount[40], EightBallHitCount[40], SniperRifleHitCount[40], SuperShockRifleHitCount[40], ShockRifleHitCount[40], CustomWeaponHitCount[40], BestTDMRanking[3], LeaderID, BestDMRanking[3], RealTotalGameTime; var float TraceDistance, MouseYSetting; var string RedTeamName, BlueTeamName, BestPlayers[3], TransKillMessage, ImpactKillMessage, EnforcerKillMessage, BioKillMessage, ShockRifleKillMessage, PulseGunKillMessage, RipperKillMessage, MiniGunKillMessage, FlakCannonKillMessage, RocketLauncherKillMessage, SniperRifleKillMessage, CustomWeaponKillMessage, BestTDMPlayers[3], BestDMPlayers[3], IpToCountryTexturePackage, AerialKillBio, AerialKillRipper, AerialKillFlak, AerialKillRockets, AerialKillSniper, AerialKillSuper, AerialKillTrans, AerialKillCombo, AerialKillEnforcer, AerialKillPulse, AerialKillMini, AerialKillPiston, AerialKillCustom, _EnforcerKillMessage, _BioKillMessage, _ShockRifleKillMessage, _PulseGunKillMessage, _RipperKillMessage, _MiniGunKillMessage, _FlakGunKillMessage, _EightBallKillMessage, _SniperRifleKillMessage, _CustomeWeaponKillMessage, _AerialKillBioGunMessage, _AerialKillRipperMessage, _AerialKillFlakGunMessage, _AerialKillEightBallMessage, _AerialKillSniperRifleMessage, _AerialKillShockRifleMessage, _AerialKillTranslocatorMessage, _AerialKillComboMessage, _AerialKillEnforcerMessage, _AerialKillPulseGunMessage, _AerialKillMiniGunMessage, _AerialKillPistonMessage, _AerialKillImpactMessage, _AerialKillTransMessage, _AerialKillCustom, CustomWeaponName, StoredPlayerIP[40], IPCTexture[40], MessageOfTheDay; var texture ClientCrosshairTexture; struct _Accuracy1 { var byte Enforcer, BioGun, ShockRifle; }; var _Accuracy1 PlayerAccuracy1[40]; struct _Accuracy2 { var byte PulseGun, Ripper, MiniGun; } ; var _Accuracy2 PlayerAccuracy2[40]; struct _Accuracy3 { var byte FlakCannon, EightBall, SniperRifle, InstaGib; } ; var _Accuracy3 PlayerAccuracy3[40]; struct _Accuracy4 { var byte CustomWeapon; } ; var _Accuracy4 PlayerAccuracy4[40]; struct _SmartCTFStats { var int FlagGrabs, FlagAssists, BaseSeals, FlagCovers, FlagKills, FlagDenied, FlagSaves; } ; var _SmartCTFStats SmartStats; struct _IndividualCTFStats1 { var byte FlagCaps, FlagGrabs, BaseSeals, FlagAssists; } ; var _IndividualCTFStats1 IStats1[40]; struct _IndividualCTFStats2 { var byte FlagKills, FlagsDenied, FlagSaves, GameSaves; } ; var _IndividualCTFStats2 IStats2[40]; struct _IndividualCTFStats3 { var byte FlagCovers; } ; var _IndividualCTFStats3 IStats3[40]; struct _KillingSpreeStats { var byte UltraKills, MonsterKills, LudicriousKills, HolyShitKills; } ; var _KillingSpreeStats KillingSpree[40]; struct _MultiKills1 { var byte KillingSpree, Rampage, Dominating; } ; var _MultiKills1 MultiKills1[40]; struct _MultiKills2 { var byte UnStoppable, Godlike, Ownage; } ; var _MultiKills2 MultiKills2[40]; struct _ClientWeaponAccuracy { var byte Enforcer, BioGun, ShockRifle, PulseGun, Ripper, MiniGun, FlakCannon, EightBall, SniperRifle, SuperShockRifle, CustomWeapon; }; var _ClientWeaponAccuracy WeaponAccuracy; var sound SpreeSound[10], DoubleKillSound, MultiKillSound, MegaKillSound, UltraKillSound, MonsterKillSoundF, LudicriousKillSound, HolyShitKillSound, OwnageSound, RedTeamScoresSound, BlueTeamScoresSound, RedTeamTakesTheLeadSound, BlueTeamTakesTheLeadSound, RedTeamIncreasesThierLeadSound, BlueTeamIncreasesThierLeadSound, RedTeamDominatingSound, BlueTeamDominatingSound, DeniedSound, FlakMonkeySound, HeadHunterSound, ComboWhoreSound, WhickedSickSound, RedTeamIsTheWinnerSound, BlueTeamIsTheWinnerSound, FlawlessVictorySound, LastSecondSaveSound, HatTrickSound, HitSoundSound, HitSoundFriendlySound; var ScrollingMessageTexture Scrollers[10]; //------------------------------------- // replication //------------------------------------- replication { reliable if ( Role == ROLE_Authority ) SmartStats, SealsSpreeCount, CoversSpreeCount, TotalDamageAmmount, HeadShotsCount, bShowIPS, bIpToCountry, RedTeamName, BlueTeamName, TotalKills, TotalDeaths, CurrentRanking, CurrentTotalAccuracy, ClientHitSound, BestPlayers, BestRanking, bCanSpectate, EnforcerHitCount, BioGunHitCount, PulseGunHitCount, RipperHitCount, MiniGunHitCount, FlakGunHitCount, EightBallHitCount, SniperRifleHitCount, SuperShockRifleHitCount, ShockRifleHitCount, CustomWeaponHitCount, PlayerAccuracy1, PlayerAccuracy2, PlayerAccuracy3, PlayerAccuracy4, IStats1, IStats2, IStats3, KillingSpree, MultiKills1, HeadHunterCount, ComboWhoreCount, FlakMonkeyCount, ArmorAmmount, HealthAmmount, MultiKills2, bTemp, TraceDistance, bTeamBeacon, EnforcerKillMessage, BioKillMessage, ShockRifleKillMessage, PulseGunKillMessage, RipperKillMessage, MiniGunKillMessage, FlakCannonKillMessage, RocketLauncherKillMessage, SniperRifleKillMessage, CustomWeaponKillMessage, ImpactKillMessage, TransKillMessage, AerialKillBio, AerialKillRipper, AerialKillFlak, AerialKillRockets, AerialKillSniper, AerialKillSuper, AerialKillTrans, AerialKillCombo, AerialKillEnforcer, AerialKillPulse, AerialKillMini, AerialKillPiston, AerialKillCustom, ClientPing, bScoreBoardEff, CustomWeaponName, bLeaderBeacon, BestTDMRanking, BestTDMPlayers, LeaderID, bWarmupSwitch, StoredPlayerIP, IPCTexture, IpToCountryTexturePackage, bUsesCustomWeapon, SpreeSound, DoubleKillSound, MultiKillSound, MegaKillSound, UltraKillSound, MonsterKillSoundF, LudicriousKillSound, HolyShitKillSound, OwnageSound, bUsesSpreeSounds, SetFOV, bLevelSwitch, bMatchStarted, bEnhancedMessages, RedTeamScoresSound, BlueTeamScoresSound, RedTeamTakesTheLeadSound, BlueTeamTakesTheLeadSound, RedTeamIncreasesThierLeadSound, BlueTeamIncreasesThierLeadSound, RedTeamDominatingSound, BlueTeamDominatingSound, DeniedSound, FlakMonkeySound, HeadHunterSound, ComboWhoreSound, WhickedSickSound, RedTeamIsTheWinnerSound, BlueTeamIsTheWinnerSound, FlawlessVictorySound, LastSecondSaveSound, HatTrickSound, HitSoundSound, HitSoundFriendlySound, bTournament, MessageOfTheDay, BestDMRanking, BestDMPlayers, ScrollersCount, Scrollers, RealTotalGameTime, PlayWaitMessage; } //------------------------------------- // PostBeginPlay //------------------------------------- simulated function PostBeginPlay() { super(TournamentGameReplicationInfo).PostBeginPlay(); if (SmartCTFGame(Level.Game) != None) { SmartStats.FlagGrabs = SmartCTFGame(Level.Game)._EndStatsClass.default.TotalGrabs; SmartStats.BaseSeals = SmartCTFGame(Level.Game)._EndStatsClass.default.TotalSeals; SmartStats.FlagAssists = SmartCTFGame(Level.Game)._EndStatsClass.default.TotalAssists; SmartStats.FlagCovers = SmartCTFGame(Level.Game)._EndStatsClass.default.TotalCovers; SmartStats.FlagKills = SmartCTFGame(Level.Game)._EndStatsClass.default.TotalFlagKills; SmartStats.FlagDenied = SmartCTFGame(Level.Game)._EndStatsClass.default.TotalDenied; SmartStats.FlagSaves = SmartCTFGame(Level.Game)._EndStatsClass.default.TotalSaves; BestPlayers[0] = SmartCTFGame(Level.Game)._EndStatsClass.default.BestPlayers[0]; BestRanking[0] = SmartCTFGame(Level.Game)._EndStatsClass.default.BestRanking[0]; BestPlayers[1] = SmartCTFGame(Level.Game)._EndStatsClass.default.BestPlayers[1]; BestRanking[1] = SmartCTFGame(Level.Game)._EndStatsClass.default.BestRanking[1]; BestPlayers[2] = SmartCTFGame(Level.Game)._EndStatsClass.default.BestPlayers[2]; BestRanking[2] = SmartCTFGame(Level.Game)._EndStatsClass.default.BestRanking[2]; } else if (EUTTeamGamePlus(Level.Game) != None) { BestTDMPlayers[0] = EUTTeamGamePlus(Level.Game)._EndStatsClass.default.BestTDMPlayers[0]; BestTDMRanking[0] = EUTTeamGamePlus(Level.Game)._EndStatsClass.default.BestTDMRanking[0]; BestTDMPlayers[1] = EUTTeamGamePlus(Level.Game)._EndStatsClass.default.BestTDMPlayers[1]; BestTDMRanking[1] = EUTTeamGamePlus(Level.Game)._EndStatsClass.default.BestTDMRanking[1]; BestTDMPlayers[2] = EUTTeamGamePlus(Level.Game)._EndStatsClass.default.BestTDMPlayers[2]; BestTDMRanking[2] = EUTTeamGamePlus(Level.Game)._EndStatsClass.default.BestTDMRanking[2]; } else if (EUTDeathMatchPlus(Level.Game) != None) { BestDMPlayers[0] = EUTDeathMatchPlus(Level.Game)._EndStatsClass.default.BestDMPlayers[0]; BestDMRanking[0] = EUTDeathMatchPlus(Level.Game)._EndStatsClass.default.BestDMRanking[0]; BestDMPlayers[1] = EUTDeathMatchPlus(Level.Game)._EndStatsClass.default.BestDMPlayers[1]; BestDMRanking[1] = EUTDeathMatchPlus(Level.Game)._EndStatsClass.default.BestDMRanking[1]; BestDMPlayers[2] = EUTDeathMatchPlus(Level.Game)._EndStatsClass.default.BestDMPlayers[2]; BestDMRanking[2] = EUTDeathMatchPlus(Level.Game)._EndStatsClass.default.BestDMRanking[2]; } } simulated function Timer() { if (TimeOffset == 4) { RealTotalGameTime++; TimeOffset = 0; } TimeOffset++; Super.Timer(); } //------------------------------------- // defaultproperties //------------------------------------- p>@E/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTGameLog <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTGameLog extends StatLogFile; var string LogFolder; //------------------------------------- // StartLog //------------------------------------- function StartLog() { local string s; s = "../"$LogFolder$"/[EUT]"; s = s@SantitizeString(LogDate()); StatLogFile = s$".tmp"; StatLogFinal = s$".log"; OpenLog(); } //------------------------------------- // LogDate //------------------------------------- function string LogDate() { local string Date, Time, Map, rv; Date = Level.Year$"-"$PrePad(Level.Month,"0",2)$"-"$PrePad(Level.Day,"0",2); Time = PrePad(Level.Hour,"0",2)$":"$PrePad(Level.Minute,"0",2)$"."$PrePad(Level.Second,"0",2); Map = GetMapFileName(); return Map$"-"$Date$"-"$Time; } //------------------------------------- // PrePad //------------------------------------- function string PrePad(coerce string s, string p, int i) { while (Len(s) < i) s = p$s; return s; } //------------------------------------- // SantitizeString //------------------------------------- function string SantitizeString(string s) { local string rv; local int i; rv = ""; for (i = 0; i < Len(s); i++) { if (InStr("\/*?:<>|"$Chr(34), Mid(s, i, 1) ) != -1) rv = rv $ "_"; else rv = rv $ Mid(s, i, 1); } return rv; } //------------------------------------- // Timer //------------------------------------- function Timer() {} //------------------------------------- // defaultproperties //------------------------------------- c/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTGameHelper <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTGameHelper extends Info; s>@S1@{ e>jT=qY..+rY* j6j=,6j$6j$djaѨSmartYjaTestx mjmX1jmY%jm6j=,6j$6j$dj7aѨppSY Caps or SYMinjaTestx mj jm ]u>d {>IZ2%U[y>=@^0u=-'=V=y=?L=V aD=?=Vq==aTestW{ 6==,6=$6=$dd.=,=?,{ ?9::$a/!t+.-=gapp.dZKK'6.-=iapp: dZKK'6=mapp:, dZKK'6==,6=$6=$d=,=?,{ ?=2aѨdZ'6==,6=$6=$d=%=?,{ =*appd - M'= ={ -I"d%-I"'$d%=aѨr!00:00'o =d,<L C?d?,<=*appr!):o :):L 'XL =do =:L ,<T=:o ,<L =:L :o ,<o =:o :T,<==appppF0):T:):o :):L 'G{d=-'=aTestW{ =?=?D{ ?,D===P2::$=aѨt!C0'D= at!'wd*d%=-'=aTestW{ =?=?D{ ?,D===^ = aB0'=-(==6=$x6=$x6=$x=,=?,P=?,=aѨAutoSS:T5-t A /* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTFramedWindow <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTFramedWindow extends UWindowFramedWindow; var EUTHudSettings HS; //------------------------------------- // Created //------------------------------------- function Created() { Super.Created(); bLeaveOnscreen = True; SetSizePos(); } //------------------------------------- // SetSizePos //------------------------------------- function SetSizePos() { SetSize(FMin(Root.WinWidth-20, 520), 500); WinLeft = Int((Root.WinWidth - WinWidth) / 2); WinTop = Int((Root.WinHeight - WinHeight) / 2); } //------------------------------------- // defaultproperties //------------------------------------- IHg YHD @dD?,?H,Y1D?,?d~D?,,H D?~,r D?,]1D?r ?,(t?, ^. ?dt?H,?^#*Must Be Enabled Serverside^%^$t?, _. ?dt?H,?_"F2 /F3 Advanced Game Stats_%_$t?, L . ?dt?H?L X/L $c/L %L $L -I-hJ . ?dt?H?J j/J $u/J %J $J -I-xt?,H . ?dt?H?H z/H $~/H %H $H -I-` z. ?dt?H?z @0z $G0z%zh'zf,z$zZSIGt?,v . ?dt?H?v H0v $I0v %v $v -I-o r . ?dt?H?r J0r $K0r %r $r -I-kt?,k . ?dt?H?k N0k $O0k %k $k -I-d h . ?dt?H?h S0h $V0h %h $h -I-_ t?,j . ?dt?H?j P0j $R0j %j $j -I-{f . ?dt?H?f Y0f $]0f %f $:I` &f -'f -(t?,y . ?dt?H?y g0y $i0y %y $y -I-aQ . ?dt?H?Q k0Q $t0Q %Q $Q -I-r  t?,t?,d \C BS. ?H t?~?Sx@&SZ?:IG&S ^0S $a0S$S%t?,X. ?dt?H?X u0X $v0X%Xh'Xf,X$XZR6IQ[. ?dt?H?[ G1[ $K1[%[h'[p'[f,[$[ZUI}t?,e. ?dt?H?e }0e $~0e%eh'ef,e$eZR6IQY. ?dt?H?Y L1Y $N1Y%Yh'Yp'Yf,Y$YZUI|t?,[. ?dt?H?[ y0[ $|0[%[h'[f,[$[ZR6IQt?,r. ?H t?~?rxA&rZ<Icogrpppx(o)r $O1r$r%t?,n. ?dt?H?n P1n $U1n%nh'nf&n$nZRIn t?,C . ?dt?~?C Playt?,D . ?dt?~?D Spec @ /* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTEndStats <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTEndStats expands Info config(user); var globalconfig int TotalGrabs; var globalconfig int TotalSeals; var globalconfig int TotalAssists; var globalconfig int TotalCovers; var globalconfig int TotalFlagKills; var globalconfig int TotalDenied; var globalconfig int TotalSaves; var globalconfig string BestPlayers[3]; var globalconfig int BestRanking[3]; var globalconfig string BestTDMPlayers[3]; var globalconfig int BestTDMRanking[3]; var globalconfig string BestDMPlayers[3]; var globalconfig int BestDMRanking[3]; //------------------------------------- // defaultproperties //------------------------------------- c/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTDMSB <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTDMSB expands TournamentScoreBoard; var font MySmallFont; var EUTGameReplicationInfo MyCRI; var PlayerReplicationInfo OrdPRI[32]; var PlayerReplicationInfo SpecPRI[32]; var FontInfo _FontInfo; var bool bTimeDown, bPlayerMoved; var color SpecColor[5], GreenColor, WhiteColor, GoldColor, BlueColor, LightCyanColor, SilverColor, BronzeColor, CyanColor, RedColor, ShadeColor, DarkRedColor, DarkBlueColor; var float CenterBoxX, CenterBoxY, TextureSize, FillBoxX, FillBoxY, FillBoxX2, FillBoxY2, DivW, DivS, ScoreStart, PlayerStart, PAlign, SAlign, DAlign, ScoreX, ScoreY, DeathX, DeathY, Step; var localized string MapTitleString, AuthorString, RestartString, ContinueString, GameEndedString, ElapsedTimeString, RemainingTimeString, FragGoalString, TimeLimitString, PlayerString, FragsString, DeathsString, PingString, TimeString, LossString, FPHString, MTQ; var texture TopSpan, BotSpan, LeftSpan, RightSpan, TopLeftCorner, TopRightCorner, BotLeftCorner, BotRightCorner, BoxFillBase, BoxFillColored, FlagIcon, PlayerDivider, Country[40]; //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { Super.PostBeginPlay(); _FontInfo = FontInfo(Spawn(Class(DynamicLoadObject(class'ChallengeHUD'.default.FontInfoClass, class'Class')))); LoadTextures(); } //------------------------------------- // LoadTextures //------------------------------------- final function LoadTextures() { MySmallFont = Font(DynamicLoadObject("EUT_Textures.EUTSmallFont", class'Font')); TopSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_T", class'Texture')); BotSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_B", class'Texture')); LeftSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_L", class'Texture')); RightSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_R", class'Texture')); BoxFillBase = Texture(DynamicLoadObject("EUT_Textures.EUT_Fill", class'Texture')); BoxFillColored = Texture(DynamicLoadObject("EUT_Textures.EUT_FillColor", class'Texture')); TopLeftCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_TL", class'Texture')); TopRightCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_TR", class'Texture')); BotLeftCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_BL", class'Texture')); BotRightCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_BR", class'Texture')); PlayerDivider = Texture(DynamicLoadObject("EUT_Textures.EUT_Divider", class'Texture')); FlagIcon = Texture(DynamicLoadObject("BotPack.GreenFlag", class'Texture')); SpecColor[0]=GreenColor; SpecColor[1]=GoldColor; SpecColor[2]=BlueColor; SpecColor[3]=RedColor; SpecColor[4]=CyanColor; MTQ = MapTitleQuote; } //------------------------------------- // ShowScores //------------------------------------- function ShowScores( canvas C ) { local GameReplicationInfo GRI; GRI = PlayerPawn(Owner).GameReplicationInfo; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); DrawHead(C, GRI); DrawFoot(C); if (C.ClipX > 512) DrawMain(C); } //------------------------------------- // DrawMain //------------------------------------- function DrawMain(Canvas C) { local PlayerReplicationInfo PRI; local TournamentGameReplicationInfo TGRI; local byte i, NumPlayers, NumSpecs, MaxLength, MySpot; local float XL, YL, XL2, YL2, TeamLoopCount, DrawLength, X, Y, Mid, TempY, Length; local bool bLast; local PlayerPawn MyPlayer; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (TGRI == None) return; NumPlayers = 0; for (i = 0; i < ArrayCount(OrdPRI); i++) OrdPRI[i] = None; for (i = 0; i < ArrayCount(SpecPRI); i++) SpecPRI[i] = None; for (i = 0; i < 32; i++) { if (PlayerPawn(Owner).GameReplicationInfo.PRIArray[i] != None) { PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i]; if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { OrdPRI[NumPlayers] = PRI; NumPlayers++; if (NumPlayers == ArrayCount(OrdPRI)) break; } if (PRI.bIsSpectator && (!PRI.bWaitingPlayer) && (PRI.PlayerName != "Player")) { SpecPRI[NumSpecs] = PRI; NumSpecs++; if (NumSpecs == ArrayCount(SpecPRI)) break; } } } SortScores(NumPlayers); if (C.ClipX < 1100) { TextureSize = 2; mid = 24; TopSpan.DrawScale = 0.50; BotSpan.DrawScale = 0.50; LeftSpan.DrawScale = 0.50; RightSpan.DrawScale = 0.50; TopLeftCorner.DrawScale = 0.50; TopRightCorner.DrawScale = 0.50; BotLeftCorner.DrawScale = 0.50; BotRightCorner.DrawScale = 0.50; PlayerStart = C.CliPY / 7 + TextureSize + 24; } else { TextureSize = 4; mid = 32; TopSpan.DrawScale = 1; BotSpan.DrawScale = 1; LeftSpan.DrawScale = 1; RightSpan.DrawScale = 1; TopLeftCorner.DrawScale = 1; TopRightCorner.DrawScale = 1; BotLeftCorner.DrawScale = 1; BotRightCorner.DrawScale = 1; PlayerStart = C.CliPY / 7 + TextureSize + 32; } bPlayerMoved = false; MaxLength = NumPlayers; Length = GetYOffset(C); DrawLength = MaxLength * Length; if (DrawLength > C.ClipY - PlayerStart) { TempY = DrawLength; MySpot = MaxLength; while (TempY > C.ClipY - PlayerStart) { MySpot = MySpot - 1; TempY = MySpot * Length; } MoveToVisible(PlayerPawn(Owner).PlayerReplicationInfo, MySpot - 1, NumPlayers); } FillBoxX = C.ClipX - (C.ClipX / 8 * 2) - mid - TextureSize; FillBoxY = C.ClipY / 7 - TextureSize - C.ClipY / 10; CenterBoxY = FillBoxY / 2 + TextureSize; CenterBoxX = FillBoxX / 2 + TextureSize; DivW = FillBoxX * 0.8; x = C.ClipX / 8; FillBoxX2 = FillBoxX; if (NumPlayers > 0) { C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(x, C.ClipY / 10); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos((C.ClipX - C.ClipX / 8) - mid, C.ClipY / 10); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(x + TextureSize, C.ClipY / 10); C.DrawRect(TopSpan, FillBoxX, TextureSize); C.SetPos(x, C.ClipY / 7); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos((C.ClipX - C.ClipX / 8) - mid, C.ClipY / 7); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(x + TextureSize, C.ClipY / 7); C.DrawRect(BotSpan, FillBoxX, TextureSize); C.SetPos(x, C.ClipY / 10 + TextureSize); C.DrawRect(LeftSpan, TextureSize, FillBoxY); C.SetPos((C.ClipX - C.ClipX / 8) - mid, C.ClipY / 10 + TextureSize); C.DrawRect(RightSpan, TextureSize, FillBoxY); C.DrawColor = ShadeColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(x + TextureSize, C.ClipY / 10 + TextureSize); C.DrawRect(BoxFillBase, FillBoxX, FillBoxY); if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.DrawColor = CyanColor; C.Style = ERenderStyle.STY_Normal; C.StrLen("Player", XL, YL); PAlign = x + (XL / 2); C.SetPos(PAlign, C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText("Player", false); C.DrawColor = RedColor; C.StrLen("Deaths", DeathX, DeathY); DAlign = (C.ClipX - C.ClipX / 8) - mid - (DeathX * 1.5); C.SetPos(DAlign, C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText("Deaths", false); C.DrawColor = LightCyanColor; C.StrLen("Frags", ScoreX, ScoreY); SAlign = (C.ClipX - C.ClipX / 8) - mid - (DeathX * 1.5) - (ScoreX * 2.0); C.SetPos(SAlign, C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText("Frags", false); DivS = FillBoxX - (XL / 2) - (DeathX / 2); C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(x, PlayerStart); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos( (C.ClipX - C.ClipX / 8) - mid, PlayerStart); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(x + TextureSize, PlayerStart); C.DrawRect(TopSpan, FillBoxX2, TextureSize); C.SetPos(x, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos( (C.ClipX - C.ClipX / 8) - mid, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(x + TextureSize, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotSpan, FillBoxX2, TextureSize); C.SetPos(x, PlayerStart + TextureSize); C.DrawRect(LeftSpan, TextureSize, DrawLength); C.SetPos((C.ClipX - C.ClipX / 8) - mid, PlayerStart + TextureSize); C.DrawRect(RightSpan, TextureSize, DrawLength); C.DrawColor = DarkRedColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(x + TextureSize, PlayerStart + TextureSize); C.DrawRect(BoxFillBase, FillBoxX, DrawLength); C.SetPos(x + TextureSize, PlayerStart + TextureSize); C.Style = ERenderStyle.STY_Translucent; C.DrawRect(BoxFillColored, FillBoxX, DrawLength); } for (i = 0; i < NumPlayers; i++) { y = PlayerStart + (TextureSize * 4) + (GetYOffset(C) * TeamLoopCount); if (i == 0) { y = PlayerStart + (TextureSize * 4); bLast = false; } if (i == NumPlayers - 1) bLast = true; DrawPlayerData(C, OrdPRI[i], x, y, bLast); TeamLoopCount += 1; } for (i = 0; i < NumSpecs; i++ ) { C.Font = C.smallfont; C.StrLen(SpecPRI[i].PlayerName, XL, YL); y = C.ClipY / 2 + YL +(YL * i); x = C.ClipX - XL; if (i == 0) y = C.ClipY / 2 + YL; DrawSpectators(C, SpecPRI[i], x, y, i); } C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Normal; C.Font = C.smallfont; C.StrLen("Spectators", XL, YL); C.SetPos(C.ClipX - XL, C.ClipY / 2); C.DrawText("Spectators", false); } //------------------------------------- // DrawPlayerData //------------------------------------- function DrawPlayerData(Canvas C, PlayerReplicationInfo PRI, float x, float y, bool bLast) { local float XL, YL, XL2, YL2, XL3, YL3, PY, FX; local bool bAdmin; local PlayerPawn MyPlayer; local int Time, eff, pid; local Font CanvasFont; local color CanvasColor; bAdmin = PRI.bAdmin; MyPlayer = PlayerPawn(Owner); C.Style = ERenderStyle.STY_Normal; pid = PRI.PlayerID; if (PRI.HasFlag != none && (PRI.HasFlag.IsA('EUTReadyFlag'))) { C.DrawColor = GreenColor; C.Style = ERenderStyle.STY_Normal; C.SetPos(x - 32, y); C.DrawIcon(Texture'Botpack.Icons.GreenFlag', 1.00); } C.DrawColor = CyanColor; if (PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName) C.DrawColor = GoldColor; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticSmallFont(1000); CanvasFont = C.Font; CanvasColor = C.DrawColor; FX = PAlign; C.StrLen(PRI.PlayerName, XL, PY); if (MyCRI.bIpToCountry) { if (caps(MyCRI.IPCTexture[pid]) == "NONE" && (!MyPlayer.IsA('Bot'))) MyCRI.IPCTexture[pid] = "us"; if (MyCRI.IPCTexture[pid] != "" && caps(MyCRI.IPCTexture[pid]) != "NONE") { if (Country[pid] == none) Country[pid] = Texture(DynamicLoadObject(MyCRI.IpToCountryTexturePackage$"."$MyCRI.IPCTexture[pid], class'Texture')); else { if (_GetTextureName(string(Country[pid])) != caps(MyCRI.IPCTexture[pid])) Country[pid] = Texture(DynamicLoadObject(MyCRI.IpToCountryTexturePackage$"."$MyCRI.IPCTexture[pid], class'Texture')); C.SetPos(FX,Y); C.bNoSmooth = false; C.DrawColor = WhiteColor; C.DrawIcon(Country[pid],1.0); C.bNoSmooth = true; FX = FX + Country[pid].USize + (Step*2); } } } C.DrawColor = CanvasColor; C.SetPos(FX, y); C.DrawText(PRI.PlayerName, false); if (bAdmin) { C.Font = MySmallFont; C.StrLen("admin", XL3, YL3); C.SetPos(x - XL3 - TextureSize, y); C.DrawText("admin", false); C.Font = CanvasFont; } else if (!bAdmin && bPlayerMoved && PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName) { C.Font = MySmallFont; C.StrLen("more>>", XL3, YL3); C.SetPos(X - XL3 - TextureSize, y); C.DrawText("more>>", false); C.Font = CanvasFont; } C.DrawColor = LightCyanColor; C.StrLen(string(int(PRI.Score)), XL, YL); C.SetPos(SAlign, y); C.DrawText(int(PRI.Score), False); C.DrawColor = RedColor; C.StrLen(string(int(PRI.Deaths)), XL, YL); C.SetPos(DAlign, y); C.DrawText(int(PRI.Deaths), False); if (C.ClipX > 512) { C.DrawColor = WhiteColor; C.Font = _FontInfo.GetSmallestFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallestFont(900); if (C.ClipX < 900) C.Font = MySmallFont; C.StrLen("#########", XL2, YL2); if (!bLast) { C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(PAlign, y + PY + (YL2 * 1)); C.DrawRect(PlayerDivider, DivS, TextureSize); C.DrawColor = GoldColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(PAlign, y + PY + (YL2 * 1)); C.DrawRect(PlayerDivider, DivS, TextureSize); } Time = Max(1, (Level.TimeSeconds + MyPlayer.PlayerReplicationInfo.StartTime - PRI.StartTime) / 60); C.DrawColor = LightCyanColor; C.Style = ERenderStyle.STY_Normal; C.Font = MySmallFont; if (C.ClipX < 700) C.Font = _FontInfo.GetStaticAReallySmallFont(900); if (MyCRI.bScoreBoardEff) { eff = Clamp(int((float(MyCRI.TotalKills[PRI.PlayerID]) / float(MyCRI.TotalKills[PRI.PlayerID] + MyCRI.TotalDeaths[PRI.PlayerID])) * 100), 0, 100); C.StrLen("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss@"FPH:"@int(60 * PRI.Score / Time)@"Eff:"@eff, XL, YL); C.SetPos(PAlign, y + PY + (YL2 * 1) - YL); C.DrawText("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss@"FPH:"@int(60 * PRI.Score / Time)@"Eff:"@eff, false); } else { C.StrLen("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss@"FPH:"@int(60 * PRI.Score / Time), XL, YL); C.SetPos(PAlign, y + PY + (YL2 * 1) - YL); C.DrawText("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss@"FPH:"@int(60 * PRI.Score / Time), false); } } } //------------------------------------- // SortScores //------------------------------------- function SortScores(int x) { local int I, J, Max; local PlayerReplicationInfo TempPRI; for (I = 0; I < x - 1; I++) { Max = I; for (J = I + 1; J < x; J++) { if (OrdPRI[J].Score > OrdPRI[Max].Score) Max = J; else if ((OrdPRI[J].Score == OrdPRI[Max].Score) && (OrdPRI[J].Deaths < OrdPRI[Max].Deaths)) Max = J; else if ((OrdPRI[J].Score == OrdPRI[Max].Score) && (OrdPRI[J].Deaths == OrdPRI[Max].Deaths) && (OrdPRI[J].PlayerID < OrdPRI[Max].Score)) Max = J; } TempPRI = OrdPRI[Max]; OrdPRI[Max] = OrdPRI[I]; OrdPRI[I] = TempPRI; } } //------------------------------------- // DrawHead //------------------------------------- function DrawHead(canvas C, GameReplicationInfo GRI) { local float XL, YL, XL2, YL2; local font CanvasFont; C.DrawColor = WhiteColor; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.bCenter = True; C.StrLen("Test", XL, YL); ScoreStart = 58.0 / 768.0 * C.ClipY - 50; CanvasFont = C.Font; if (GRI.GameEndedComments != "") { C.DrawColor = GoldColor; C.SetPos(0, 0 + YL); C.DrawText(GRI.GameEndedComments, True); } else { C.SetPos(0, ScoreStart); DrawEndGame(C); } C.bCenter = False; C.Font = CanvasFont; } //------------------------------------- // DrawEndGame //------------------------------------- function DrawEndGame(Canvas C) { local TournamentGameReplicationInfo TGRI; local float XL, YL, YL2; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (TGRI == None) return; C.SetPos(0, 0); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.DrawText(TGRI.GameName); C.StrLen("Test", XL, YL); C.SetPos(0, 0 + YL); YL2 = C.CurY - YL; if (TGRI.GoalTeamScore > 0) { C.SetPos(0, 0 + YL); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.DrawText(TGRI.GoalTeamScore$" Points or "$TGRI.TimeLimit@"Min"); C.StrLen("Test", XL, YL); C.SetPos(0, C.CurY - YL); } } //------------------------------------- // DrawFoot //------------------------------------- function DrawFoot(canvas C) { local byte Hours, Minutes, Seconds; local float XL, YL; local PlayerPawn MyPlayer; C.bCenter = true; C.Font = _FontInfo.GetSmallFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticSmallestFont(C.ClipX); C.StrLen("Test", XL, YL); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; MyPlayer = PlayerPawn(Owner); C.SetPos(0, C.ClipY - 2 * YL * 1.5); if ((Level.NetMode == NM_Standalone) && Level.Game.IsA('DeathMatchPlus')) { if (DeathMatchPlus(Level.Game).bRatedGame) C.DrawText(DeathMatchPlus(Level.Game).RatedGameLadderObj.SkillText@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MTQ$Level.Title$MTQ, true); else if (DeathMatchPlus(Level.Game).bNoviceMode) C.DrawText(class'ChallengeBotInfo'.default.Skills[Level.Game.Difficulty]@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MTQ$Level.Title$MTQ, true); else C.DrawText(class'ChallengeBotInfo'.default.Skills[Level.Game.Difficulty + 4]@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MTQ$Level.Title$MTQ, true); } else { C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.SetPos(0, C.ClipY - 2 * YL * 1.5); C.DrawText(MyPlayer.GameReplicationInfo.GameName@MapTitleString@Level.Title, true); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.SetPos(0, C.ClipY - 2 * YL); C.DrawText(MyPlayer.GameReplicationInfo.ServerName$" - "$GetTime(), true); C.SetPos(0, C.ClipY - YL); } if (bTimeDown || (MyPlayer.GameReplicationInfo.RemainingTime > 0)) { bTimeDown = true; if (MyPlayer.GameReplicationInfo.RemainingTime <= 0) C.DrawText(RemainingTimeString@"00:00", true); else { Minutes = MyPlayer.GameReplicationInfo.RemainingTime / 60; Seconds = MyPlayer.GameReplicationInfo.RemainingTime % 60; C.DrawText(RemainingTimeString@TwoDigitString(Minutes)$":"$TwoDigitString(Seconds), true); } } else { Seconds = MyPlayer.GameReplicationInfo.ElapsedTime; Minutes = Seconds / 60; Hours = Minutes / 60; Seconds = Seconds - (Minutes * 60); Minutes = Minutes - (Hours * 60); C.DrawText(ElapsedTimeString@TwoDigitString(Hours)$":"$TwoDigitString(Minutes)$":"$TwoDigitString(Seconds), true); } if (MyPlayer.GameReplicationInfo.GameEndedComments != "") { C.bCenter = true; C.StrLen("Test", XL, YL); C.SetPos(0, C.ClipY - Min(YL*6, C.ClipY * 0.1)); C.DrawColor = GreenColor; if (Level.NetMode == NM_Standalone) C.DrawText(GameEndedString@ContinueString, true); else C.DrawText(GameEndedString, true); } else if ((MyPlayer != None) && (MyPlayer.Health <= 0)) { C.bCenter = true; C.StrLen("Test", XL, YL); C.SetPos(0, C.ClipY - Min( YL * 6, C.ClipY * 0.1 )); C.DrawColor = SilverColor; C.DrawText(RestartString, true); } C.bCenter = false; C.Font = C.smallfont; C.DrawColor.R = 120; C.DrawColor.G = 120; C.DrawColor.B = 120; C.Setpos(C.ClipX - 80, C.ClipY - 20); C.DrawText("AutoSS:"@MyCRI.bAutoShot); } //------------------------------------- // GetTime //------------------------------------- simulated function string GetTime() { local string amPm, mon, day, min; local byte hour; local PlayerPawn MyPlayer; MyPlayer = PlayerPawn(Owner); min = string(MyPlayer.level.minute); if (int(min) < 10) min = "0" $ min; if (MyPlayer.level.hour >= 12) amPm = "PM"; else amPm = "AM"; if (MyPlayer.level.hour > 12) hour = MyPlayer.level.hour - 12; else if (MyPlayer.level.hour == 0) hour = 12; else hour = MyPlayer.level.hour; switch (MyPlayer.level.month) { case 1: mon = "Jan"; break; case 2: mon = "Feb"; break; case 3: mon = "Mar"; break; case 4: mon = "Apr"; break; case 5: mon = "May"; break; case 6: mon = "Jun"; break; case 7: mon = "Jul"; break; case 8: mon = "Aug"; break; case 9: mon = "Sep"; break; case 10: mon = "Oct"; break; case 11: mon = "Nov"; break; case 12: mon = "Dec"; break; } switch (MyPlayer.level.dayOfWeek) { case 0: day = "Sunday"; break; case 1: day = "Monday"; break; case 2: day = "Tuesday"; break; case 3: day = "Wednesday"; break; case 4: day = "Thursday"; break; case 5: day = "Friday"; break; case 6: day = "Saturday"; break; } return hour $ ":" $ min @ amPM $ " , " $ day $ ", " $ mon @ MyPlayer.level.day $ ", " $ MyPlayer.level.year; } //------------------------------------- // TwoDigitString //------------------------------------- function string TwoDigitString(int i) { if (i < 10) return "0"$i; else return string(i); } //------------------------------------- // GetYOffset //------------------------------------- function float GetYOffset(Canvas C) { local float XL, YL, YL2, YL3; local float buf, div; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticSmallFont(1000); C.StrLen("TEST",XL,YL); C.Font = MySmallFont; if (C.ClipX < 700) C.Font = _FontInfo.GetStaticAReallySmallFont(900); C.StrLen("TEST", XL, YL2); if (C.ClipX > 1100) { buf = 15; div = 4; } else { buf = 5; div = 2; } C.StrLen("#",XL,YL3); Step = XL; return YL + ( YL2 * 1 ) + ( buf * 1.5 ) + div; } //------------------------------------- // DrawSpectators //------------------------------------- function DrawSpectators(Canvas C, PlayerReplicationInfo PRI, float x, float y, int cid) { local float XL, YL; if (cid > 5) cid = cid - 6; C.DrawColor = SpecColor[cid]; C.Style = ERenderStyle.STY_Normal; C.Font = C.smallfont; C.SetPos(x, y); C.DrawText(PRI.PlayerName, false); } //------------------------------------- // _GetTextureName //------------------------------------- function string _GetTextureName(string T) { return caps(mid(T, instr(T, ".") + 1)); } //------------------------------------- // MoveToVisible //------------------------------------- function MoveToVisible(PlayerReplicationInfo MyPRI, byte MySpot, byte NumPlayers) { local int i; local PlayerReplicationInfo SwitchPRI; for (i=0; i MySpot) { SwitchPRI = OrdPRI[MySpot]; OrdPRI[MySpot] = MyPRI; OrdPRI[i] = SwitchPRI; bPlayerMoved = true; break; } } } //------------------------------------- // defaultproperties //------------------------------------- |>t ~u $:u :t &Hu u=:u &:u:t :u{:H{Hu:u{:H{-:u{:H{Hu:u{:H{-:u{:H{.?:u{:H{Huu7s :H{:H{:u {:u {s u  D//============================================================================= // EUTDMHud //============================================================================= class EUTDMHud extends ChallengeHUD; var EUTGameReplicationInfo MyCRI; var DeathMatchPlus DMP; var EUTHudSettings HudSettings; var Pawn P; var PlayerReplicationInfo PRI; var private PlayerReplicationInfo StoredPRI[32]; var private PlayerReplicationInfo MyPRI; var private GameReplicationInfo StoredGRI; var EUTStatInfo StatInfo; var EUTHudHelper HudHelper; var private PlayerPawn MyPlayer; var font MySmallFont; var class StatInfoClass; var class HudHelperClass; var bool bWarmupSwitch, bStartMessage, bUdemo; var byte RequestHitsounds; var color RedColor; var float PreBaseEye; var string StartMessage, LastEventMessage; var texture TimeBack, PingBack, TeamBack, AccuracyBack, AccuracyBackRifle, AccuracyBackShock, EUTElements, Badge; //------------------------------------- // PostBeginPlay //------------------------------------- simulated function PostBeginPlay() { SetTimer(1.0, True); if (ServerInfo == none) ServerInfo = Spawn(ServerInfoClass, Owner); if (StatInfo == none) StatInfo = Spawn(StatInfoClass, Owner); if (HudHelper == none) HudHelper = Spawn(HudHelperClass,Owner); if (MyFonts == none) MyFonts = FontInfo(Spawn(Class(DynamicLoadObject(FontInfoClass, class'Class')))); InitializeHudSettings(); LoadTextures(); SetDefaults(0); if (Level.NetMode != NM_Standalone) MOTDFadeOutTime = 350; FaceAreaOffset = -64; SetTimer(1.0, True); if ((PlayerPawn(Owner).GameReplicationInfo != None) && (PlayerPawn(Owner).GameReplicationInfo.RemainingTime > 0)) TimeMessageClass = class(DynamicLoadObject("BotPack.TimeMessage", class'Class')); MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); } //------------------------------------- // InitializeHudSettings //------------------------------------- simulated final function InitializeHudSettings() { if (HudSettings == none) { HudSettings = EUTHudSettings(Spawn(Class(DynamicLoadObject("EUTSource.EUTHudSettings",class'class')))); if (HudSettings != none) { HudSettings.MyPlayer = PlayerPawn(Owner); HudSettings.HS = HudSettings; HudSettings.SaveConfig(); } } } //------------------------------------- // LoadTextures //------------------------------------- simulated final function LoadTextures() { TimeBack = texture(DynamicLoadObject("EUT_Textures.Timeback", class'Texture')); PingBack = texture(DynamicLoadObject("EUT_Textures.PingDisplay", class'Texture')); TeamBack = texture(DynamicLoadObject("EUT_Textures.TeamBack", class'Texture')); AccuracyBack = Texture(DynamicLoadObject("EUT_Textures.EUTAccBack", class'Texture')); AccuracyBackRifle = Texture(DynamicLoadObject("EUT_Textures.EUTAccBackRifle", class'Texture')); AccuracyBackShock = Texture(DynamicLoadObject("EUT_Textures.EUTAccBackShock", class'Texture')); EUTElements = Texture(DynamicLoadObject("EUT_Textures.EUT_Elements", class'Texture')); Badge = Texture(DynamicLoadObject("EUT_Textures.EUT_Badge", class'Texture')); MySmallFont=Font(DynamicLoadObject("EUT_Textures.EUTSmallFont", class'Font')); } //------------------------------------- // SetDefaults //------------------------------------- simulated final function SetDefaults(byte c) { switch (c) { case 0: HudHelper.ResetWeaponData(); break; case 1: HudHelper.ResetWeaponData(); HudHelper.StageCount = 1; HudHelper.WeaponDrawOffset = 0; if(MyCRI != none) MyCRI.MouseYSetting = 100; break; } } //------------------------------------- // Timer //------------------------------------- function Timer() { super(ChallengeHUD).Timer(); if ((PlayerOwner == None) || (PawnOwner == None)) return; if (PlayerPawn(Owner).PlayerReplicationInfo == none) return; if (MyCRI == none) { MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); MyCRI.MouseYSetting = 100; } else { MyCRI.ClientCrosshair = Crosshair; MyCRI.ClientCrosshairTexture = CrossHairTextures[Crosshair]; if (!HudHelper.bCheckKeyBindings) HudHelper.CheckKeyBindings(); MyCRI.MouseYRefCount = HudHelper.MouseYCount; MyCRI.RequestHitsounds = RequestHitsounds; MyCRI.WeaponAccuracy.Enforcer = HudHelper.Acc.Enforcer; MyCRI.WeaponAccuracy.BioGun = HudHelper.Acc.BioGun; MyCRI.WeaponAccuracy.ShockRifle = HudHelper.Acc.ShockRifle; MyCRI.WeaponAccuracy.PulseGun = HudHelper.Acc.PulseGun; MyCRI.WeaponAccuracy.Ripper = HudHelper.Acc.Ripper; MyCRI.WeaponAccuracy.MiniGun = HudHelper.Acc.MiniGun; MyCRI.WeaponAccuracy.FlakCannon = HudHelper.Acc.FlakGun; MyCRI.WeaponAccuracy.EightBall = HudHelper.Acc.EightBall; MyCRI.WeaponAccuracy.SniperRifle = HudHelper.Acc.SniperRifle; MyCRI.WeaponAccuracy.SuperShockRifle = HudHelper.Acc.SuperShockRifle; MyCRI.WeaponAccuracy.CustomWeapon = HudHelper.Acc.CustomWeapon; MyCRI.bJumpBoots = HudSettings.bJumpBoots; if (!HudHelper.bSetMessageDefaults) HudHelper.SetMessageDefaults(1); if (!bWarmupSwitch && MyCRI.bWarmupSwitch) { bWarmupSwitch = true; SetDefaults(1); if (!HudHelper.bCheckForAutoRecorder && MyCRI.bTournament && MyCRI.bMatchStarted) HudHelper.CheckForAutoRecorder(PlayerPawn(Owner), HudSettings.AutoRecorder); } if (!HudHelper.bCheckForAutoRecorder && !MyCRI.bTournament && MyCRI.bMatchStarted) HudHelper.CheckForAutoRecorder(PlayerPawn(Owner), HudSettings.AutoRecorder); MyCRI.TextureCounter++; if (MyCRI.TextureCounter == 2) { MyCRI.TextureCounter = 0; switch (MyCRI.TextureSwitch) { case 0: MyCRI.TextureSwitch = 1; break; case 1: MyCRI.TextureSwitch = 0; break; } } if (MyCRI.PlayWaitMessage[PlayerPawn(Owner).PlayerReplicationInfo.PlayerID] == 1) PlayerOwner.ReceiveLocalizedMessage(class'EUTHudMessages', 17); } RequestHitsounds = HudSettings.HitSounds; if (HudHelper.DelayDataClear < 20) HudHelper.DelayDataClear++; if (PlayerPawn(Owner).PlayerReplicationInfo.bIsSpectator) return; if (PlayerPawn(Owner).GameReplicationInfo != none) { MyCRI.bAutoShot = HudSettings.bAutoShot; if (PlayerPawn(Owner).GameReplicationInfo.GameEndedComments != "") { HudHelper.ScreenShotDelay++; if (HudHelper.ScreenShotDelay >= 6 && PlayerPawn(Owner).IsInState('GameEnded')) { HudHelper.StopDemo(PlayerPawn(Owner)); if (!HudHelper.bScreenShotTaken && HudSettings.bAutoShot) { HudHelper.bScreenShotTaken = True; PlayerPawn(Owner).ConsoleCommand("sshot"); PlayerPawn(Owner).ClientMessage("Auto ScreenShot Taken"); } } } } } //------------------------------------- // PreRender //------------------------------------- simulated event PreRender(Canvas C) { local byte i; MyPlayer = PlayerPawn(Owner); if (HudHelper != none) bUdemo = HudHelper.IsUdemoSpectator(PlayerOwner); if(MyPlayer != none && HudHelper != none) HudHelper.FixPhysics(MyPlayer); if (MyCRI != none) { for (i=0; i 10)) { if (MyPlayer.LineOfSightTo(P)) { P.NetPriority = 2.0; P.NetUpdateFrequency = 100.0; if (P.Health > 0 && (HudSettings.bLeaderBeacon) && (MyCRI.bLeaderBeacon) && (P.PlayerReplicationInfo.PlayerID == MyCRI.LeaderID)) HudHelper.DrawBeacon(C,P,1); } else { P.NetPriority = HudHelper.NetAdjustment(2.0, HudSettings.nLevel); P.NetUpdateFrequency = HudHelper.NetAdjustment(100.0, HudSettings.nLevel); } } if (P.LightType == LT_Steady) { P.AmbientGlow = 254; P.LightRadius = 0; P.LightEffect = LE_NonIncidence; P.LightRadius = 6; } else { P.LightRadius = 0; P.AmbientGlow = 17; P.LightEffect = LE_None; P.LightRadius = 0; } P.bUnlit = false; P.ScaleGlow = 1.0; P.SoundRadius = 9; if (P.Texture != Texture'S_Pawn' && P.Texture != Texture'unrealshare.Belt_fx.Invis') P.Texture = Texture'S_Pawn'; } } } } } if (HudHelper.StageCount > 25) { C.Style = Style; if (PawnOwner.Weapon != None && (!PlayerOwner.bShowScores) && (Level.LevelAction == LEVACT_None) && (!bForceScores) && (!bShowInfo) && (!HudHelper.bShowStats)) HudHelper.DrawReticle(C, MyPlayer, HudSettings.NewScopeTexture, HudSettings.ScopeMode, CrosshairColor, HudSettings.DotColor); HudHelper.ResetScope(MyPlayer); } if (HudHelper.StageCount < 30) HudHelper.StageCount++; if (MyPlayer.Health <= 0) HudHelper.ResetAmmoCount(); if (bHideFrags) { HudHelper.WeaponDrawOffset = 0; if (!bHideAllWeapons && (HudScale * WeaponScale * C.ClipX >= C.ClipX - 256 * Scale)) HudHelper.WeaponDrawOffset = 63.5; } else { HudHelper.WeaponDrawOffset = 63.5; if (bHideAllWeapons) HudHelper.WeaponDrawOffset = 0; else if (HudScale * WeaponScale * C.ClipX >= C.ClipX - 256 * Scale) HudHelper.WeaponDrawOffset = 127.0; } if (PlayerOwner.Weapon != none) { HudHelper.StatInfo.Accuracy = HudHelper.GetAccuracy(PlayerOwner.PlayerReplicationInfo.PlayerID, PlayerOwner.Weapon); HudHelper.StatInfo.Effeciency = Clamp(int((float(MyCRI.TotalKills[PlayerOwner.PlayerReplicationInfo.PlayerID]) / float(MyCRI.TotalKills[PlayerOwner.PlayerReplicationInfo.PlayerID] + MyCRI.TotalDeaths[PlayerOwner.PlayerReplicationInfo.PlayerID])) * 100), 0, 100); } if (HudHelper.bShowStats) { StatInfo.RenderInfo(C); return; } if (HudHelper.bDebugLoad) HudHelper.ParseLoad(C); super(ChallengeHUD).PostRender(C); } //------------------------------------- // DrawStatus //------------------------------------- simulated function DrawStatus(Canvas C) { local float StatScale, ChestAmount, ThighAmount, H1, H2, X, Y, DamageTime, TempX, TexX, TexY; Local int ArmorAmount,CurAbs,i, Ping; Local inventory Inv,BestArmor; local bool bChestArmor, bShieldbelt, bThighArmor, bJumpBoots, bHasDoll; local Bot BotOwner; local TournamentPlayer TPOwner; local texture Doll, DollBelt; local byte BootCharges, TimeX; local string Time, s; local byte CanvasStyle; if (MyCRI == None || HudSettings == none || HudHelper == None) return; ArmorAmount = 0; CurAbs = 0; i = 0; BestArmor = None; TimeX = 1; for (Inv = PawnOwner.Inventory; Inv != None; Inv = Inv.Inventory) { if (Inv.bIsAnArmor) { if (Inv.IsA('UT_Shieldbelt')) bShieldbelt = true; else if (Inv.IsA('Thighpads')) { ThighAmount += Inv.Charge; bThighArmor = true; } else { bChestArmor = true; ChestAmount += Inv.Charge; } ArmorAmount += Inv.Charge; } else if (Inv.IsA('UT_JumpBoots')) { bJumpBoots = true; BootCharges = Inv.Charge; } else { i++; if (i > 100) break; } } if (!bHideStatus) { TPOwner = TournamentPlayer(PawnOwner); if (C.ClipX < 400) bHasDoll = false; else if (TPOwner != None) { Doll = TPOwner.StatusDoll; DollBelt = TPOwner.StatusBelt; bHasDoll = true; } else { BotOwner = Bot(PawnOwner); if (BotOwner != None) { Doll = BotOwner.StatusDoll; DollBelt = BotOwner.StatusBelt; bHasDoll = true; } } if (bHasDoll) { C.Style = ERenderStyle.STY_Translucent; StatScale = Scale * StatusScale; X = C.ClipX - 128 * StatScale; C.SetPos(X, 0); if (PawnOwner.DamageScaling > 2.0) C.DrawColor = PurpleColor; else C.DrawColor = HUDColor; C.DrawTile(Doll, 128*StatScale, 256*StatScale, 0, 0, 128.0, 256.0); C.DrawColor = HUDColor; if (bShieldBelt) { C.DrawColor = BaseColor; C.DrawColor.B = 0; C.SetPos(X, 0); C.DrawIcon(DollBelt, StatScale); } if (bChestArmor) { ChestAmount = FMin(0.01 * ChestAmount,1); C.DrawColor = HUDColor * ChestAmount; C.SetPos(X, 0); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 0, 128, 64); } if (bThighArmor) { ThighAmount = FMin(0.02 * ThighAmount,1); C.DrawColor = HUDColor * ThighAmount; C.SetPos(X, 64*StatScale); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 64, 128, 64); } if (bJumpBoots) { C.DrawColor = HUDColor; C.SetPos(X, 128*StatScale); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 128, 128, 64); } C.Style = Style; if ((PawnOwner == PlayerOwner) && Level.bHighDetailMode && !Level.bDropDetail) { for (i=0; i<4; i++) { DamageTime = Level.TimeSeconds - HitTime[i]; if (DamageTime < 1) { C.SetPos(X + HitPos[i].X * StatScale, HitPos[i].Y * StatScale); if ((HUDColor.G > 100) || (HUDColor.B > 100)) C.DrawColor = RedColor; else C.DrawColor = (WhiteColor - HudColor) * FMin(1, 2 * DamageTime); C.DrawColor.R = 255 * FMin(1, 2 * DamageTime); C.DrawTile(Texture'BotPack.HudElements1', StatScale * HitDamage[i] * 25, StatScale * HitDamage[i] * 64, 0, 64, 25.0, 64.0); } } } } } C.DrawColor = HUDColor; if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX; Y = C.ClipY - 64 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 63.5 * Scale; } C.SetPos(X,Y); if (PawnOwner.Health < 50) { H1 = 1.5 * TutIconBlink; H2 = 1 - H1; C.DrawColor = WhiteColor * H2 + (HUDColor - WhiteColor) * H1; } else C.DrawColor = HUDColor; C.DrawTile(Texture'BotPack.HudElements1', 128*Scale, 64*Scale, 128, 128, 128.0, 64.0); if (PawnOwner.Health < 50) { H1 = 1.5 * TutIconBlink; H2 = 1 - H1; C.DrawColor = C.DrawColor * H2 + (WhiteColor - C.DrawColor) * H1; } else C.DrawColor = WhiteColor; DrawBigNum(C, Max(0, PawnOwner.Health), X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HUDColor; if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX - 128 * Scale; Y = C.ClipY - 64 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 0; } C.SetPos(X, Y); C.DrawTile(Texture'BotPack.HudElements1', 128*Scale, 64*Scale, 0, 192, 128.0, 64.0); if (bHideStatus && bShieldBelt) C.DrawColor = GoldColor; else C.DrawColor = WhiteColor; if (MyCRI == none) MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (!PlayerPawn(Owner).PlayerReplicationInfo.bIsSpectator) DrawBigNum(C, Min(150, ArmorAmount), X + 4 * Scale, Y + 16 * Scale, 1); else DrawBigNum(C, Min(150, MyCRI.ArmorAmmount[PawnOwner.PlayerReplicationInfo.PlayerID]), X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HudColor; if (HudSettings.bShowPing) { if (bHideStatus && bHideAllWeapons) { X = 0.50 * C.ClipX + 256 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 127 * Scale; } if (MyCRI != none && PlayerOwner != none && (PlayerOwner.PlayerReplicationInfo != none)) Ping = MyCRI.ClientPing[PlayerOwner.PlayerReplicationInfo.PlayerID]; if (Ping > 999) Ping = 999; C.SetPos(X, Y); C.DrawTile(PingBack, 128.00 * Scale, 64.00 * Scale, 0.00, 0.00, 128.00, 64.00); if (PlayerOwner == none || (PlayerOwner.PlayerReplicationInfo == none)) C.DrawColor = WhiteColor; else if (PlayerOwner.PlayerReplicationInfo.PacketLoss < 20 && PlayerOwner.PlayerReplicationInfo.PacketLoss != 0) C.DrawColor = GoldColor; else if (PlayerOwner.PlayerReplicationInfo.PacketLoss > 20) C.DrawColor = RedColor; else C.DrawColor = WhiteColor; DrawBigNum(C, Ping, X + 4 * Scale, Y + 16 * Scale, 1); } C.DrawColor = HUDColor; if (HudSettings.bShowTime && HudHelper != none) { if (bHideStatus && bHideAllWeapons) { X = 0.50 * C.ClipX - 384 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; if (HudSettings.bShowPing) Y = 190.5 * Scale; else Y = 127 * Scale; } C.SetPos(X, Y); C.DrawTile(EUTElements,128.0 * Scale, 64.0 * Scale, 0.00, 0.00, 128.00, 64.00); Time = HudHelper.GetTime(PlayerOwner.GameReplicationInfo); C.DrawColor = WhiteColor; CanvasStyle = C.Style; C.Style = ERenderStyle.STY_Translucent; while (TimeX < 5) { switch (TimeX) { case 1: TempX = X + (3*Scale); break; case 2: TempX = TempX + (32*Scale) - (5*Scale); break; case 3: TempX = TempX + (32*Scale) + (5*Scale); break; case 4: TempX = TempX + (32*Scale) - (5*Scale); break; } C.SetPos(TempX, Y + 13 * Scale); s = Mid(Time, TimeX - 1, 1); HudHelper.GetTimeDigit(s,TexX,TexY); C.DrawTile(EUTElements,32.0 * Scale, 64.0 * Scale, TexX, TexY, 32.00, 64.00); TimeX++; } C.Style = CanvasStyle; } C.DrawColor = HUDColor; if (HudSettings.bJumpBoots && bJumpBoots) { if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX + 384 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; if (HudSettings.bShowTime && HudSettings.bShowPing) Y = 254 * Scale; else if (HudSettings.bShowTime || HudSettings.bShowPing) Y = 190.5 * Scale; else Y = 127 * Scale; } C.SetPos(X,Y); C.DrawTile(EUTElements,128.0 * Scale, 64.0 * Scale,128.0,64.0,128.0,64.0); C.DrawColor = WhiteColor; DrawBigNum(C, BootCharges, X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HUDColor; } if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (!bShowInfo) && (HudHelper != none) && (!HudHelper.bShowStats)) { if (HudSettings != none) { if (HudSettings.bShowWeaponAccuracy == 1) HudHelper.DrawAccuracy(C, HudHelper.StatInfo.Accuracy, AccuracyBack, Scale, HudColor); else if (HudSettings.bShowWeaponAccuracy == 2) HudHelper.DrawEffeciency(C, EUTElements, HudHelper.StatInfo.Effeciency, Scale, HudColor); } } C.DrawColor = HudColor; } //------------------------------------- // DrawWeapons //------------------------------------- simulated function DrawWeapons(Canvas C) { local Weapon W, WeaponSlot[11]; local inventory inv; local int i, BaseY, BaseX, Pending, WeapX, WeapY; local float AmmoScale, WeaponOffset, WeapScale, WeaponX, TexX, TexY; BaseX = 0.5 * (C.ClipX - HudScale * WeaponScale * C.ClipX); WeapScale = WeaponScale * Scale; C.Style = Style; BaseY = C.ClipY - 63.5 * WeapScale; WeaponOffset = 0.1 * HUDScale * WeaponScale * C.ClipX; if (PawnOwner.Weapon != none) { W = PawnOwner.Weapon; if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; WeaponX = BaseX + ( W.InventoryGroup - 1 ) * WeaponOffset; C.CurX = WeaponX; C.CurY = BaseY; C.DrawColor = SolidHUDColor; C.DrawIcon(W.StatusIcon, WeapScale); C.DrawColor = GoldColor; C.CurX = WeaponX + 4 * WeapScale; C.CurY = BaseY + 4 * WeapScale; C.Style = Style; if (W.InventoryGroup == 10) C.DrawTile(Texture'BotPack.HudElements1', 0.75 * WeapScale * 25, 0.75 * WeapScale * 64, 0, 0, 25.0, 64.0); else C.DrawTile(Texture'BotPack.HudElements1', 0.75 * WeapScale * 25, 0.75 * WeapScale * 64, 25 * W.InventoryGroup, 0, 25.0, 64.0); WeaponSlot[W.InventoryGroup] = W; C.CurX = WeaponX; C.CurY = BaseY; C.DrawTile(Texture'BotPack.HUDWeapons', 128 * WeapScale, 64 * WeapScale, 128, 64, 128, 64); } if (Level.bHighDetailMode && (PawnOwner.PendingWeapon != None)) { Pending = PawnOwner.PendingWeapon.InventoryGroup; C.CurX = BaseX + (Pending - 1) * WeaponOffset - 64 * WeapScale; C.CurY = C.ClipY - 96 * WeapScale; C.Style = ERenderStyle.STY_Translucent; C.DrawColor = GoldColor; C.DrawTile(Texture'BotPack.HUDWeapons', 256 * WeapScale, 128 * WeapScale, 0, 128, 256.0, 128.0); } else Pending = 100; C.Style = Style; i = 0; for (inv = PawnOwner.Inventory; inv != None; inv = inv.Inventory) { if (inv.IsA('Weapon') && (inv != PawnOwner.Weapon)) { W = Weapon(inv); if ( WeaponSlot[W.InventoryGroup] == none ) WeaponSlot[W.InventoryGroup] = W; else if (( WeaponSlot[W.InventoryGroup] != PawnOwner.Weapon) && ((W == PawnOwner.PendingWeapon) || (WeaponSlot[W.InventoryGroup].AutoSwitchPriority < W.AutoSwitchPriority))) WeaponSlot[ W.InventoryGroup] = W; } i++; if (i > 100) break; } W = PawnOwner.Weapon; TexX = 128 * WeapScale; TexY = 64 * WeapScale; for (i = 1; i < 11; i++) { if (WeaponSlot[i] == none) { C.Style = Style; C.DrawColor = 0.5 * HUDColor; C.CurX = BaseX + (i - 1) * WeaponOffset; C.CurY = BaseY; WeapX = ((i - 1 ) % 4) * 64; WeapY = ((i - 1 ) / 4) * 32; C.DrawTile(Texture'BotPack.HUDWeapons', TexX, TexY, WeapX, WeapY, 64.0, 32.0); } else if (WeaponSlot[i] != W) { if (Pending == i) { if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; C.DrawColor = SolidHUDColor; } else { C.Style = Style; C.DrawColor = 0.5 * HUDColor; } C.CurX = BaseX + (i - 1) * WeaponOffset; C.CurY = BaseY; if (WeaponSlot[i].bSpecialIcon) C.DrawIcon(WeaponSlot[i].StatusIcon, WeapScale); else { WeapX = ((i - 1) % 4) * 64; WeapY = ((i - 1) / 4) * 32; C.DrawTile(Texture'BotPack.HUDWeapons', TexX, TexY, WeapX, WeapY, 64.0, 32.0); } } } TexX = 0.75 * WeapScale * 25; TexY = 0.75 * WeapScale * 64; for (i = 1; i < 11; i++) { if (WeaponSlot[i] != none) { WeaponX = BaseX + (i - 1) * WeaponOffset + 4 * WeapScale; if (WeaponSlot[i] != W) { C.CurX = WeaponX; C.CurY = BaseY + 4 * WeapScale; C.DrawColor = GoldColor; if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; else C.Style = Style; if (i == 10) C.DrawTile(Texture'BotPack.HudElements1', TexX, TexY, 0, 0, 25.0, 64.0); else C.DrawTile(Texture'BotPack.HudElements1', TexX, TexY, 25 * i, 0, 25.0, 64.0); } if (WeaponSlot[i].AmmoType != none) { C.CurX = WeaponX; C.CurY = BaseY + 52 * WeapScale; C.DrawColor = BaseColor; AmmoScale = FClamp(88.0 * WeapScale * WeaponSlot[i].AmmoType.AmmoAmount / WeaponSlot[i].AmmoType.MaxAmmo, 0, 88); C.DrawTile(Texture'BotPack.HudElements1', AmmoScale, 8 * WeapScale, 64, 64, 128.0, 8.0); } } } } //------------------------------------- // DrawCrossHair //------------------------------------- simulated function DrawCrossHair(Canvas C, int X, int Y) { local float XScale, PickDiff; local float XLength; local texture T, M; if (Crosshair >= CrosshairCount) Return; if (C.ClipX < 512) XScale = 0.5; else XScale = FMax(1, int(0.1 + C.ClipX / 640.0)); PickDiff = Level.TimeSeconds - PickupTime; if (PickDiff < 0.4) { if (PickDiff < 0.2) XScale *= (1 + 5 * PickDiff); else XScale *= (3 - 5 * PickDiff); } XLength = XScale * 64.0; C.SetPos(0.5 * (C.ClipX - XLength), 0.5 * (C.ClipY - XLength)); C.Style = ERenderStyle.STY_Translucent; C.DrawColor = 15 * CrosshairColor; M = CrossHairTextures[7]; T = CrossHairTextures[Crosshair]; if (T == None) T = LoadCrosshair(Crosshair); if (M == None) M = LoadCrosshair(7); C.DrawTile(T, XLength, XLength, 0, 0, 64, 64); C.DrawColor = HudSettings.DotColor; C.SetPos(0.5 * (C.ClipX - XLength) - 10 + HudSettings.DotX, 0.5 * (C.ClipY - XLength) - 10 + HudSettings.DotY); if (HudSettings.bDot) C.DrawTile(M, XLength, XLength, 0, 0, 64, 64); C.bNoSmooth = True; C.Style = Style; } //------------------------------------- // TraceIdentify //------------------------------------- simulated function bool TraceIdentify(canvas C) { local actor A; local vector HitLocation, HitNormal, StartTrace, EndTrace; if (PawnOwner == none || MyCRI == none) return false; StartTrace = PawnOwner.Location; StartTrace.Z += PawnOwner.BaseEyeHeight; EndTrace = StartTrace + vector(PawnOwner.ViewRotation) * MyCRI.TraceDistance; A = Trace(HitLocation, HitNormal, EndTrace, StartTrace, true); if (Pawn(A) != None) { if (Pawn(A).bIsPlayer) { IdentifyTarget = Pawn(A).PlayerReplicationInfo; IdentifyFadeTime = 3.0; } } else if ((A != None) && SpecialIdentify(C, A)) return false; if ((IdentifyFadeTime == 0.0 ) || (IdentifyTarget == None) || IdentifyTarget.bFeigningDeath) return false; return true; } //------------------------------------- //SpecialIdentify //------------------------------------- simulated function bool SpecialIdentify(Canvas C, Actor Other ) { return false; } //------------------------------------- //SetIDColor //------------------------------------- simulated function SetIDColor( Canvas C, int type ) { C.DrawColor = GreenColor; if (type == 0) C.DrawColor.G = 160 * (IdentifyFadeTime / 3.0); else C.DrawColor.G = 255 * (IdentifyFadeTime / 3.0); } //------------------------------------- //DrawTwoColorID //------------------------------------- simulated function DrawTwoColorID( canvas C, string TitleString, string ValueString, int YStart) { local float XL, YL, X, X1; C.Style = Style; C.StrLen(TitleString$": ", XL, YL); X1 = XL; C.StrLen(ValueString, XL, YL); X = C.ClipX/2 - (X1 + XL) / 2; C.SetPos(X, YStart); SetIDColor(C, 0); X += X1; C.DrawText(TitleString); C.SetPos(X, YStart); SetIDColor(C, 1); C.DrawText(ValueString); C.DrawColor = WhiteColor; C.Font = MyFonts.GetSmallFont(C.ClipX); } //------------------------------------- //DrawIdentifyInfo //------------------------------------- simulated function bool DrawIdentifyInfo(canvas C) { if (!TraceIdentify(C)) return false; if (IdentifyTarget.PlayerName != "") { C.Font = MyFonts.GetBigFont(C.ClipX); DrawTwoColorID(C,IdentifyName, IdentifyTarget.PlayerName, C.ClipY - 256 * Scale); } return true; } //------------------------------------- // Tick //------------------------------------- simulated function Tick(float DeltaTime) { Super.Tick(DeltaTime); IdentifyFadeTime = FMax(0.0, IdentifyFadeTime - DeltaTime); MOTDFadeOutTime = FMax(0.0, MOTDFadeOutTime - DeltaTime * 55); TutIconBlink += DeltaTime; if (TutIconBlink >= 0.5) TutIconBlink = 0.0; if (bDrawFaceArea) { if (FaceAreaOffset < 0) FaceAreaOffset += DeltaTime * 600; if (FaceAreaOffset > 0) FaceAreaOffset = 0.0; } else if (FaceAreaOffset > MinFaceAreaOffset) FaceAreaOffset = FMax(FaceAreaOffset - DeltaTime * 600, MinFaceAreaOffset ); if (bDrawMessageArea) { if (MessageFadeTime < 1.0) { MessageFadeTime += DeltaTime * 8; if (MessageFadeTime > 1.0) MessageFadeTime = 1.0; } } else if ((MessageFadeTime > 0.0) && (MessageFadeCount == 0)) { MessageFadeTime -= DeltaTime * 2; if (MessageFadeTime < 0.0) MessageFadeTime = 0.0; } WeaponNameFade -= DeltaTime; } //------------------------------------- // DisplayProgressMessage //------------------------------------- simulated function DisplayProgressMessage( canvas C ) { local int i; local float XL, YL, YOffset, LogoSize; local GameReplicationInfo GRI; local string s; local byte style; local bool bReturn; PlayerOwner.ProgressTimeOut = FMin(PlayerOwner.ProgressTimeOut, Level.TimeSeconds + 8); if ((MyCRI == None) || (MyCRI.bTournament && MyCRI.bMatchStarted)) return; C.Style = ERenderStyle.STY_Normal; C.bCenter = True; C.Font = MyFonts.GetBigFont( C.ClipX ); C.StrLen("TEST", XL, YL); if ( UTIntro(Level.Game) != None ) YOffset = 64 * scale + 2 * YL; else if ( (MOTDFadeOutTime <= 0) || (C.ClipY < 300) ) YOffset = 64 * scale + 6 * YL; else { YOffset = 64 * scale + 6 * YL; GRI = PlayerOwner.GameReplicationInfo; if ( GRI != None ) { if ( GRI.MOTDLine1 != "" ) YOffset += YL; if ( GRI.MOTDLine2 != "" ) YOffset += YL; if ( GRI.MOTDLine3 != "" ) YOffset += YL; if ( GRI.MOTDLine4 != "" ) YOffset += YL; } } for (i=0; i<8; i++) { if ( i == 0) { if (!bStartMessage) { bStartMessage = true; StartMessage = PlayerPawn(Owner).ProgressMessage[i]; } else { if (PlayerPawn(Owner).ProgressMessage[i] != StartMessage) bReturn = true; } } C.SetPos(0, YOffset); C.DrawColor = PlayerPawn(Owner).ProgressColor[i]; C.DrawText(PlayerPawn(Owner).ProgressMessage[i], False); if(PlayerPawn(Owner).ProgressMessage[i] == "") break; YOffset += YL + 1; } if ((MyCRI.bTournament && !MyCRI.bWarmupSwitch && PlayerPawn(Owner).Health > 0) || (bReturn)) { C.bCenter = False; C.Style = Style; HUDSetup(C); return; } if(MyCRI.MessageOfTheDay != "") { s = MyCRI.MessageOfTheDay; if(Len(s) > 50) s = Left(s,50); C.SetPos(0, YOffset); C.DrawColor = WhiteColor; C.DrawText(s, False); YOffset += YL + 1; } C.SetPos(0, YOffset); C.DrawColor = GoldColor; C.DrawText("EUT SOURCE", False); YOffset += YL + 1; C.SetPos(0, YOffset); C.DrawColor = GreenColor; C.DrawText("Type ShowHelp In Console For Extended Commands", False); YOffset += YL + 1; C.DrawColor = WhiteColor; LogoSize = Badge.USize * Scale; C.SetPos(C.ClipX/2 - LogoSize/2, YOffset); Style = C.Style; C.Style = ERenderStyle.STY_Translucent; C.DrawIcon(Badge,Scale); C.bCenter = False; C.Style = Style; HUDSetup(C); } //------------------------------------- // DrawGameSynopsis //------------------------------------- simulated function DrawGameSynopsis(Canvas C) { local float XL, YL, XOffset, YOffset, Bump; local int MaxPlayers; local string Spread; if ((PawnOwner.PlayerReplicationInfo == None) || PawnOwner.PlayerReplicationInfo.bIsSpectator || (PlayerCount == 1) || (HudSettings == none)) return; C.Font = MyFonts.GetBigFont( C.ClipX ); C.DrawColor = WhiteColor; C.StrLen(RankString, XL, YL); switch(HudSettings.bShowWeaponAccuracy) { case 0: YOffset = C.ClipY - HudHelper.WeaponDrawOffset*Scale - YL*2; break; case 1: case 2: YOffset = C.ClipY - HudHelper.WeaponDrawOffset*Scale - 64*Scale - YL*2; break; default: YOffset = C.ClipY - HudHelper.WeaponDrawOffset*Scale - YL*2; break; } C.SetPos(0, YOffset); C.DrawText(RankString, False); if (bTiedScore) C.DrawColor = RedColor; C.SetPos(XL, YOffset); C.DrawText(" "$Rank@"/"@PlayerCount, False); C.DrawColor = WhiteColor; C.SetPos(0, YOffset + YL); if (Lead > 0) Spread = SpreadString$" +"$Lead; else Spread = SpreadString$" "$Lead; C.DrawText(Spread, False); } //------------------------------------- // Message //------------------------------------- simulated function Message( PlayerReplicationInfo PRI, coerce string Msg, name MsgType ) { local int i; local Class MessageClass; switch (MsgType) { case 'Say': MessageClass = class'EUTSayMessagePlus'; break; case 'CriticalEvent': MessageClass = class'CriticalStringPlus'; LocalizedMessage(MessageClass, 0, None, None, None, msg); return; case 'Event': case 'Scroll': if (bUdemo) { if (msg == LastEventMessage) return; LastEventMessage = msg; } MessageClass = class'EUTStringMessagePlus'; break; case 'EUTEvent': if (bUdemo) { if (msg == LastEventMessage) return; LastEventMessage = msg; } MessageClass = class'EUTStringMessagePlus'; break; default: MessageClass = class'EUTStringMessagePlus'; break; } Super.Message(PRI,Msg,MsgType); } //------------------------------------- // EXECS //------------------------------------- exec function ShowStats() { if (HudHelper.bShowStats) HudHelper.bShowStats = False; else { HudHelper.bShowStats = True; PlayerPawn(Owner).bShowScores = False; bShowInfo = false; } } //------------------------------------- exec function ShowServerInfo() { if (bShowInfo) bShowInfo = False; else { bShowInfo = True; PlayerPawn(Owner).bShowScores = False; HudHelper.bShowStats = false; } } //------------------------------------- exec function ShowScores() { if (PlayerPawn(Owner).bShowScores) PlayerPawn(Owner).bShowScores = False; else { PlayerPawn(Owner).bShowScores = True; bShowInfo = False; HudHelper.bShowStats = false; } } //------------------------------------- exec function ShowPing(string s) { HudSettings.ShowPing(s); } //------------------------------------- exec function ShowTime(string s) { HudSettings.ShowTime(s); } //------------------------------------- exec function EText(string s) { HudSettings.EText(s); } //------------------------------------- exec function ShowTeams(string s) { HudSettings.ShowTeams(s); } //------------------------------------- exec function Scope(string s) { HudSettings.Scope(s); } //------------------------------------- exec function ShowFC(string s) { HudSettings.ShowFC(s); } //------------------------------------- exec function ShowWeaponAccuracy(string s) { HudSettings.ShowWeaponAccuracy(s); } //------------------------------------- exec function HitSounds(string s) { HudSettings._HitSounds(s); } //------------------------------------- exec function AutoSS(string s) { HudSettings.AutoSS(s); } //------------------------------------- exec function ShowHelp(string s) { HudSettings.ShowHelp(s); } //------------------------------------- exec function ShowBeacon(string s) { HudSettings.ShowBeacon(s); } //------------------------------------- exec function UseDot(string s) { HudSettings.UseDot(s); } //------------------------------------- exec function ShowBoots(string s) { HudSettings.ShowBoots(s); } //------------------------------------- exec function ShowTeamInfo() { if (HudHelper.bShowTeamInfo) HudHelper.bShowTeamInfo = False; else HudHelper.bShowTeamInfo = True; } //------------------------------------- exec function Spectate(string s) { if (s ~= "") { if (PlayerPawn(Owner).IsA('Spectator')) { PlayerPawn(Owner).ClientMessage("You are already a Spectator!"); return; } if (MyCRI.bCanSpectate) { PlayerPawn(Owner).ClientMessage("Changing to Spectator Mode"); PlayerPawn(Owner).ConsoleCommand("Disconnect"); PlayerPawn(Owner).UpdateURL("OverrideClass", "Botpack.CHSpectator", True); PlayerPawn(Owner).ConsoleCommand("Reconnect"); } else PlayerPawn(Owner).ClientMessage("Spectator Spots Full."); } } //------------------------------------- exec function QuickJoin(string s) { if (PlayerPawn(Owner).IsA('Spectator')) { if (s ~= "") { PlayerPawn(Owner).ClientMessage("Joining Server"); PlayerPawn(Owner).UpdateURL("OverrideClass", "", True); PlayerPawn(Owner).ConsoleCommand("Reconnect"); } } } //------------------------------------- exec function DebugLoad(string s) { if (!MyPlayer.PlayerReplicationInfo.bAdmin) { MyPlayer.ClientMessage("You Must Be Logged In As An Admin To Access This Debugger!"); return; } switch (s) { case "1": MyPlayer.ConsoleCommand("Inject UserFlag 1"); MyPlayer.ClientMessage("Load Debugger Activated!"); HudHelper.bDebugLoad = true; break; case "0": MyPlayer.ConsoleCommand("Inject UserFlag 0"); MyPlayer.ClientMessage("Load Debugger DeActivated!"); HudHelper.bDebugLoad = false; break; } } //------------------------------------- exec function NetCode(string s) { HudSettings.ChangenLevel(s); } //------------------------------------- exec function ShowLeader(string s) { HudSettings.ShowLeader(s); } //------------------------------------- // defaultproperties //------------------------------------- h'/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTDemoEnhancer <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTDemoEnhancer expands Actor; //------------------------------------- // Tick //------------------------------------ simulated function Tick(float Delta) { local Class GameClass; local Class SB; local Class HC; local DemoRecSpectator DRS; local int i; foreach AllActors(class'DemoRecSpectator', DRS) { if (DRS.PlaybackActor != none && (DRS.PlaybackGRI != None)) { log("Demo Record Spectator Found",'EUT'); GameClass = Class( DynamicLoadObject(DRS.PlaybackGRI.GameClass,Class'Class') ); SB = None; switch (GameClass.Default.ScoreBoardType) { case Class'UnrealCTFScoreBoard': SB = Class'EUTCTFSB'; HC = Class'EUTCTFHUD'; break; case Class'TeamScoreBoard': SB = Class'EUTTDMSB'; HC = Class'EUTTDMHUD'; break; case Class'EUTCTFSB': SB = Class'EUTCTFSB'; HC = Class'EUTCTFHUD'; break; case Class'EUTTDMSB': SB = Class'EUTTDMSB'; HC = Class'EUTTDMHUD'; break; case class'TournamentScoreBoard': SB = class'EUTDMSB'; HC = class'EUTDMHud'; break; case class'EUTDMSB': SB = class'EUTDMSB'; HC = class'EUTDMHud'; break; } if (SB == None) log("EUT: Failed to Load ScoreBoard for Demo!"); else if (SB != DRS.PlaybackActor.ScoringType) { DRS.PlaybackActor.ScoringType = SB; if (DRS.PlaybackActor.Scoring != none) DRS.PlaybackActor.Scoring.Destroy(); DRS.PlaybackActor.Scoring = None; } if (HC == None) HC = Class(DynamicLoadObject(string(GameClass.Default.HUDType),Class'Class')); if (HC == none) log("EUT: Failed to Load HUD for Demo!"); else if (HC != DRS.PlaybackActor.HUDType) { DRS.PlaybackActor.HUDType = HC; if(DRS.PlaybackActor.myHUD != none) DRS.PlaybackActor.myHUD.Destroy(); DRS.PlaybackActor.myHUD = None; } Destroy(); } i++; log("Hud class Loaded:"@HC,'EUT'); } if (i == 0) Destroy(); } //------------------------------------- // defaultproperties //------------------------------------ A?m \M$:M:m &sMt=:M&:t:m :t}:s}st:t}:s}-:t}:s}st:t}:s}-:t}:s}.?:t}:s}stt7j :s}:s}:M}:M}j M \1 ~>q @j,f D @e D?,?f ,b1D?,?e c D?,,d1D?c , q `1a18cD?Y,]zq ?c, ?,?Y,?Y,]q ?c ?, ?Y?Y  q ?c ?, YMD?i ,c]zq ?M, ?,?i ,?i ,]q ?M ?, ?i ?i  [ q q |  q ?M ?, i q [  I/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTDeathMessagePlus <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTDeathMessagePlus extends DeathMessagePlus; var bool bAerial; var localized string Killed; //------------------------------------- // GetString //------------------------------------- static function string GetString( optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { local string AerialKillMessage; if (i > 10 && i != 30) { AerialKillMessage = static.ParseSwitch(i); i = 0; } else if (i == 30) { AerialKillMessage = Class(OptionalObject).Default.DeathMessage; i = 0; } switch (i) { case 0: if (RelatedPRI_1 == None) return ""; if (RelatedPRI_1.PlayerName == "") return ""; if (RelatedPRI_2 == None) return ""; if (RelatedPRI_2.PlayerName == "") return ""; if (Class(OptionalObject) == None) return ""; return class'GameInfo'.Static.ParseKillMessage( RelatedPRI_1.PlayerName, RelatedPRI_2.PlayerName, Class(OptionalObject).Default.ItemName, AerialKillMessage); break; case 1: if (RelatedPRI_1 == None) return ""; if (RelatedPRI_1.bIsFemale) return RelatedPRI_1.PlayerName$class'TournamentGameInfo'.Default.FemaleSuicideMessage; else return RelatedPRI_1.PlayerName$class'TournamentGameInfo'.Default.MaleSuicideMessage; break; case 2: if (RelatedPRI_1 == None) return ""; return RelatedPRI_1.PlayerName$class'TournamentGameInfo'.Default.FallMessage; break; case 3: if (RelatedPRI_1 == None) return ""; return RelatedPRI_1.PlayerName$class'TournamentGameInfo'.Default.ExplodeMessage; break; case 4: if ( RelatedPRI_1 == None ) return ""; return RelatedPRI_1.PlayerName$class'TournamentGameInfo'.Default.DrownedMessage; break; case 5: if (RelatedPRI_1 == None) return ""; return RelatedPRI_1.PlayerName$class'TournamentGameInfo'.Default.BurnedMessage; break; case 6: if (RelatedPRI_1 == None) return ""; return RelatedPRI_1.PlayerName$class'TournamentGameInfo'.Default.CorrodedMessage; break; case 7: if (RelatedPRI_1 == None) return ""; return RelatedPRI_1.PlayerName$class'TournamentGameInfo'.Default.MortarMessage; break; case 8: if (RelatedPRI_1 == None) return ""; if (RelatedPRI_2 == None) return ""; return class'GameInfo'.Static.ParseKillMessage( RelatedPRI_1.PlayerName, RelatedPRI_2.PlayerName, class'Translocator'.Default.ItemName, class'Translocator'.Default.DeathMessage ); break; } } //------------------------------------- // ClientReceive //------------------------------------- static function ClientReceive( PlayerPawn MyPlayer, optional int i, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == MyPlayer.PlayerReplicationInfo) { if (TournamentPlayer(MyPlayer).myHUD != None) { TournamentPlayer(MyPlayer).myHUD.LocalizedMessage( Default.ChildMessage, i, RelatedPRI_1, RelatedPRI_2, OptionalObject ); TournamentPlayer(MyPlayer).myHUD.LocalizedMessage( Default.Class, i, RelatedPRI_1, RelatedPRI_2, OptionalObject ); } if (Default.bIsConsoleMessage) TournamentPlayer(MyPlayer).Player.Console.AddString(Static.GetString( i, RelatedPRI_1, RelatedPRI_2, OptionalObject )); if ((RelatedPRI_1 != RelatedPRI_2) && (RelatedPRI_2 != None)) { if ((TournamentPlayer(MyPlayer).Level.TimeSeconds - TournamentPlayer(MyPlayer).LastKillTime < 3) && (i != 1)) { TournamentPlayer(MyPlayer).MultiLevel++; TournamentPlayer(MyPlayer).ReceiveLocalizedMessage( class'EUTMultiKillMessage', TournamentPlayer(MyPlayer).MultiLevel ); } else TournamentPlayer(MyPlayer).MultiLevel = 0; TournamentPlayer(MyPlayer).LastKillTime = TournamentPlayer(MyPlayer).Level.TimeSeconds; } else TournamentPlayer(MyPlayer).MultiLevel = 0; if (ChallengeHUD(MyPlayer.MyHUD) != None) ChallengeHUD(MyPlayer.MyHUD).ScoreTime = TournamentPlayer(MyPlayer).Level.TimeSeconds; } else if (RelatedPRI_2 == MyPlayer.PlayerReplicationInfo) { TournamentPlayer(MyPlayer).ReceiveLocalizedMessage( class'VictimMessage', 0, RelatedPRI_1 ); Super.ClientReceive(MyPlayer, i, RelatedPRI_1, RelatedPRI_2, OptionalObject); } else Super.ClientReceive(MyPlayer, i, RelatedPRI_1, RelatedPRI_2, OptionalObject); } //------------------------------------- // ParseSwitch //------------------------------------- static function string ParseSwitch(int i) { switch (i) { case 11: return class'EUTGameReplicationInfo'.default._EnforcerKillMessage; break; case 12: return class'EUTGameReplicationInfo'.default._BioKillMessage; break; case 13: return class'EUTGameReplicationInfo'.default._ShockRifleKillMessage; break; case 14: return class'EUTGameReplicationInfo'.default._PulseGunKillMessage; break; case 15: return class'EUTGameReplicationInfo'.default._RipperKillMessage; break; case 16: return class'EUTGameReplicationInfo'.default._MiniGunKillMessage; break; case 17: return class'EUTGameReplicationInfo'.default._FlakGunKillMessage; break; case 18: return class'EUTGameReplicationInfo'.default._EightBallKillMessage; break; case 19: return class'EUTGameReplicationInfo'.default._SniperRifleKillMessage; break; case 21: return class'EUTGameReplicationInfo'.default._EnforcerKillMessage; break; case 22: return class'EUTGameReplicationInfo'.default._BioKillMessage; break; case 23: return class'EUTGameReplicationInfo'.default._ShockRifleKillMessage; break; case 24: return class'EUTGameReplicationInfo'.default._PulseGunKillMessage; break; case 25: return class'EUTGameReplicationInfo'.default._RipperKillMessage; break; case 26: return class'EUTGameReplicationInfo'.default._MiniGunKillMessage; break; case 27: return class'EUTGameReplicationInfo'.default._FlakGunKillMessage; break; case 28: return class'EUTGameReplicationInfo'.default._EightBallKillMessage; break; case 29: return class'EUTGameReplicationInfo'.default._SniperRifleKillMessage; break; case 51: return class'EUTGameReplicationInfo'.default._AerialKillBioGunMessage; break; case 52: return class'EUTGameReplicationInfo'.default._AerialKillRipperMessage; break; case 53: return class'EUTGameReplicationInfo'.default._AerialKillFlakGunMessage; break; case 54: return class'EUTGameReplicationInfo'.default._AerialKillEightBallMessage; break; case 55: return class'EUTGameReplicationInfo'.default._AerialKillSniperRifleMessage; break; case 56: return class'EUTGameReplicationInfo'.default._AerialKillShockRifleMessage; break; case 57: return class'EUTGameReplicationInfo'.default._AerialKillTranslocatorMessage; break; case 58: return class'EUTGameReplicationInfo'.default._AerialKillComboMessage; break; case 59: return class'EUTGameReplicationInfo'.default._AerialKillEnforcerMessage; break; case 60: return class'EUTGameReplicationInfo'.default._AerialKillPulseGunMessage; break; case 61: return class'EUTGameReplicationInfo'.default._AerialKillBioGunMessage; break; case 62: return class'EUTGameReplicationInfo'.default._AerialKillRipperMessage; break; case 63: return class'EUTGameReplicationInfo'.default._AerialKillFlakGunMessage; break; case 64: return class'EUTGameReplicationInfo'.default._AerialKillEightBallMessage; break; case 65: return class'EUTGameReplicationInfo'.default._AerialKillSniperRifleMessage; break; case 66: return class'EUTGameReplicationInfo'.default._AerialKillShockRifleMessage; break; case 67: return class'EUTGameReplicationInfo'.default._AerialKillTranslocatorMessage; break; case 68: return class'EUTGameReplicationInfo'.default._AerialKillComboMessage; break; case 69: return class'EUTGameReplicationInfo'.default._AerialKillEnforcerMessage; break; case 70: return class'EUTGameReplicationInfo'.default._AerialKillPulseGunMessage; break; case 71: return class'EUTGameReplicationInfo'.default._AerialKillMiniGunMessage; break; case 72: return class'EUTGameReplicationInfo'.default._AerialKillMiniGunMessage; break; case 73: return class'EUTGameReplicationInfo'.default._AerialKillPistonMessage; break; case 74: return class'EUTGameReplicationInfo'.default._AerialKillPistonMessage; break; case 75: return class'EUTGameReplicationInfo'.default._AerialKillImpactMessage; break; case 76: return class'EUTGameReplicationInfo'.default._AerialKillImpactMessage; break; case 77: return class'EUTGameReplicationInfo'.default._AerialKillTransMessage; break; case 78: return class'EUTGameReplicationInfo'.default._AerialKillTransMessage; break; } } //------------------------------------- // defaultproperties //------------------------------------- D?I?Mf5J .USJ KJU, Up0UvJ , hPMhAMJ , p=J ,  J %p$  p=J J  4&iJan G,iFeb Z,iMar m,iApr ,iMay ,iJun ,iJul ,iAug , iSep , iOct , iNov , iDec J  6%X Sunday K&X Monday b,X Tuesday {,X Wednesday ,X Thursday ,X Friday ,X Saturday ppppppppRp:Uh , X , iSJ , SJ  h@{ /* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTDeathMatchPlus <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTDeathMatchPlus extends DeathMatchPlus config; #exec OBJ LOAD FILE=..\Sounds\EUT_Sounds.uax var EUTGameReplicationInfo MyCRI; var class _EndStatsClass; var ZoneInfo Z; var LowGrav lg; var UTStatsLink StatLink; var Actor IpToCountry; var PlayerPawn LoginActor; var bool b1, b2, b3, b4, b5, bExpandSpree, bAltOvertime; var int BestDMRanking[3], CurrentLeaderScore, LowGravityAerialKillAdjuster; var vector WarheadLocation[20]; var byte AKMS[40], FlakKills[40], ComboKills[40], WarheadCount, ExpandedSpreeSwitch; var string BestDMPlayers[3]; var() config bool bEnhancedSprees; var() config bool bEnhancedMessages; var() config bool bShowIPS; var() config bool bLogMods; var() config bool bCheckDefaults; var() config bool bHitSounds; var() config bool bDemoRequest; var() config bool bKickSpeedHack; var() config bool bReport; var() config bool bAntiTimer; var() config bool bScoreBoardEff; var() config bool bLeaderBeacon; var() config bool bAutoTaunts; var() config bool bEnhancedDeathMessages; var() config bool bStatLink; var() config bool bAlwaysRecordTourney; var() config bool bKickMinY; var() config bool bNoOverTime; var() config bool bIpToCountry; var() config bool bUsesCustomWeapon; var() config bool bNoFlockPawns; var() config byte AnnouncerLevel; var() config byte SetFOV; var() config int TraceDistance; var() config float MinY; var() config string TransKillMessage; var() config string ImpactKillMessage; var() config string EnforcerKillMessage; var() config string BioKillMessage; var() config string ShockRifleKillMessage; var() config string PulseGunKillMessage; var() config string RipperKillMessage; var() config string MiniGunKillMessage; var() config string FlakCannonKillMessage; var() config string RocketLauncherKillMessage; var() config string SniperRifleKillMessage; var() config string CustomWeaponKillMessage; var() config string AerialKillBio; var() config string AerialKillRipper; var() config string AerialKillFlak; var() config string AerialKillRockets; var() config string AerialKillSniper; var() config string AerialKillSuper; var() config string AerialKillTrans; var() config string AerialKillCombo; var() config string AerialKillEnforcer; var() config string AerialKillPulse; var() config string AerialKillMini; var() config string AerialKillPiston; var() config string AerialKillCustom; var() config string SoundPackage; var() config string CustomWeaponName; var() config string IpToCountryTexturePackage; var() config string MessageOfTheDay; const MaxArray = 40; const MaxTries = 21; struct _MultiKills { var float MultiTime; var byte MultiLevel; }; var _MultiKills MultiKills[40]; struct _WeaponDamage { var int Enforcer, BioGun, ShockRifle, Ripper, MiniGun, PulseGun, FlakGun, EightBall, SniperRifle, SuperShockRifle, CustomWeapon; }; var _WeaponDamage WeaponDamage[40]; struct _SplashKills { var float FlakTime; var Pawn LastHit; }; var _SplashKills SplashKills[40]; var sound DeniedSound; var sound FlakMonkeySound; var sound HeadHunterSound; var sound ComboWhoreSound; var sound KillingSpreeSound; var sound RampageSound; var sound DominatingSound; var sound UnStoppableSound; var sound GodlikeSound; var sound WhickedSickSound; var sound RedTeamIsTheWinnerSound; var sound BlueTeamIsTheWinnerSound; var sound FlawlessVictorySound; var sound LastSecondSaveSound; var sound RedTeamScoresSound; var sound RedTeamTakesTheLeadSound; var sound RedTeamIncreasesThierLeadSound; var sound RedTeamDominatingSound; var sound BlueTeamScoresSound; var sound BlueTeamTakesTheLeadSound; var sound BlueTeamIncreasesThierLeadSound; var sound BlueTeamDominatingSound; var sound HatTrickSound; var sound HitSoundSound; var sound HitSoundFriendlySound; var sound DoubleKillSound; var sound MultiKillSound; var sound MegaKillSound; var sound UltraKillSound; var sound MonsterKillSoundF; var sound LudicriousKillSound; var sound HolyShitKillSound; var sound OwnageSound; //------------------------------------- // PreLogin //------------------------------------- event PreLogin ( string Options, string Address, out string Error, out string FailCode ) { local string Face, Pad, PlayerName; local bool bCheckFace; bCheckFace = ParseFace(Options, Address, Face, Pad, PlayerName); if (Face == "FailedParse") { Error = "FAILEDPARSE"; FailCode = "Your Client Failed to Parse at Prelogin Correctly"; log("Client Failed PreLogin with a Failure to Parse Options"@Pad,'EUT'); Super.PreLogin(Options, Address, Error, FailCode); } else if (bCheckFace) { Error = "ILLEGALFACE"; FailCode = "Ivan is not an authorized Face"; log("Client Attempted to PreLogin with Face"@Face@"--"@PlayerName@Pad,'EUT'); } else Super.PreLogin(Options, Address, Error, FailCode); } //------------------------------------- // ParseFace //------------------------------------- function bool ParseFace(string Options, string Address, out string Face, out string Pad, out string PlayerName) { local string s; if (Instr(Address,":") != -1) Pad = Left(Address, InStr(Address,":")); else Pad = Address; Options = Caps(Options); if (Instr(Options, "NAME=") != -1) { s = Mid(Options, instr(Options, "NAME=") + 5); if (instr(s, "?") != -1) PlayerName = left(s, instr(s,"?")); else PlayerName = "FailedParse"; } else PlayerName = "FailedParse"; if(InStr(Options, "FACE=") != -1) { s = Mid(Options, instr(Options, "FACE=") + 5); if (instr(s, "?") != -1) { Face = left(s, instr(s,"?")); if (instr(Face, ".") != -1) Face = mid(Face, instr(Face, ".") + 1); else Face = "FailedParse"; } else Face = "FailedParse"; } else Face = "FailedParse"; if (Face == "IVAN") return true; return False; } //------------------------------------- // InitGameReplicationInfo //------------------------------------- function InitGameReplicationInfo() { Super.InitGameReplicationInfo(); ResetVars(); } //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { local int i; local Warheadlauncher WL; local Actor A; super(DeathMatchPlus).PostBeginPlay(); MyCRI = EUTGameReplicationInfo(GameReplicationInfo); PreCacheSounds(); ResetVars(); if (bEnhancedSprees) { DeathMessageClass = Class'EUTDeathMessagePlus'; MyCRI.bUsesSpreeSounds = true; class'EUTMultiKillMessage'.default.DoubleKillSound = DoubleKillSound; class'EUTMultiKillMessage'.default.MultiKillSound = MultiKillSound; class'EUTMultiKillMessage'.default.MegaKillSound = MegaKillSound; class'EUTMultiKillMessage'.default.UltraKillSound = UltraKillSound; class'EUTMultiKillMessage'.default.MonsterKillSoundF = MonsterKillSoundF; class'EUTMultiKillMessage'.default.LudicriousKillSound = LudicriousKillSound; class'EUTMultiKillMessage'.default.HolyShitKillSound = HolyShitKillSound; class'EUTMultiKillMessage'.default.OwnageSound = OwnageSound; MyCRI.DoubleKillSound = DoubleKillSound; MyCRI.MultiKillSound = MultiKillSound; MyCRI.MegaKillSound = MegaKillSound; MyCRI.UltraKillSound = UltraKillSound; MyCRI.MonsterKillSoundF = MonsterKillSoundF; MyCRI.LudicriousKillSound = LudicriousKillSound; MyCRI.HolyShitKillSound = HolyShitKillSound; MyCRI.OwnageSound = OwnageSound; MyCRI.WhickedSickSound = WhickedSickSound; class'KillingSpreeMessage'.default.SpreeSound[0] = KillingSpreeSound; class'KillingSpreeMessage'.default.SpreeSound[1] = RampageSound; class'KillingSpreeMessage'.default.SpreeSound[2] = DominatingSound; class'KillingSpreeMessage'.default.SpreeSound[3] = UnStoppableSound; class'KillingSpreeMessage'.default.SpreeSound[4] = GodlikeSound; MyCRI.SpreeSound[0] = KillingSpreeSound; MyCRI.SpreeSound[1] = RampageSound; MyCRI.SpreeSound[2] = DominatingSound; MyCRI.SpreeSound[3] = UnStoppableSound; MyCRI.SpreeSound[4] = GodlikeSound; } else DeathMessageClass=Class'DeathMessagePlus'; if (bEnhancedMessages) { MyCRI.RedTeamScoresSound = RedTeamScoresSound; MyCRI.BlueTeamScoresSound = BlueTeamScoresSound; MyCRI.RedTeamTakesTheLeadSound = RedTeamTakesTheLeadSound; MyCRI.BlueTeamTakesTheLeadSound = BlueTeamTakesTheLeadSound; MyCRI.RedTeamIncreasesThierLeadSound = RedTeamIncreasesThierLeadSound; MyCRI.BlueTeamIncreasesThierLeadSound = BlueTeamIncreasesThierLeadSound; MyCRI.RedTeamDominatingSound = RedTeamDominatingSound; MyCRI.BlueTeamDominatingSound = BlueTeamDominatingSound; MyCRI.DeniedSound = DeniedSound; MyCRI.RedTeamIsTheWinnerSound = RedTeamIsTheWinnerSound; MyCRI.BlueTeamIsTheWinnerSound = BlueTeamIsTheWinnerSound; MyCRI.FlawlessVictorySound = FlawlessVictorySound; MyCRI.LastSecondSaveSound = LastSecondSaveSound; MyCRI.HatTrickSound = HatTrickSound; } MyCRI.FlakMonkeySound = FlakMonkeySound; MyCRI.HeadHunterSound = HeadHunterSound; MyCRI.ComboWhoreSound = ComboWhoreSound; MyCRI.HitSoundSound = HitSoundSound; MyCRI.HitSoundFriendlySound = HitSoundFriendlySound; if (Level.NetMode == NM_Client) Spawn(Class'EUTDemoEnhancer'); i = 0; WarheadCount = 0; foreach level.allactors(class'Warheadlauncher', WL) { if (i < 20) { WarheadLocation[i] = WL.location; i++; WarheadCount++; } } LowGravityAerialKillAdjuster = 1; foreach Level.AllActors(class'LowGrav',lg) if (lg != none) LowGravityAerialKillAdjuster = 2.5; b1 = false; b2 = false; b3 = false; b4 = false; b5 = false; if (bStatLink) { StatLink = Spawn(Class'UTStatsLink'); if (StatLink != none) { Log("DM Stat Link Created:"@StatLink, 'EUT'); InitializeLogging(); } } else GameName = "EUT Tournament DeathMatch"; if (bIpToCountry) { foreach AllActors(class'Actor', A, 'IpToCountry') { IpToCountry = A; break; } } } //------------------------------------- // PreCacheSounds //------------------------------------- function PreCacheSounds() { DeniedSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Denied",class'sound',true)); if(DeniedSound == none) DeniedSound = sound'EUT_Sounds.Denied'; HeadHunterSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HeadHunter",class'sound',true)); if(HeadHunterSound == none) HeadHunterSound = sound'EUT_Sounds.HeadHunter'; FlakMonkeySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_FlackMonkey",class'sound',true)); if(FlakMonkeySound == none) FlakMonkeySound = sound'EUT_Sounds.FlackMonkey'; ComboWhoreSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_ComboWhore",class'sound',true)); if(ComboWhoreSound == none) ComboWhoreSound = sound'EUT_Sounds.ComboWhore'; KillingSpreeSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_KillingSpree",class'sound',true)); if(KillingSpreeSound == none) KillingSpreeSound = sound'EUT_Sounds.Killing_Spree'; RampageSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Rampage",class'sound',true)); if(RampageSound == none) RampageSound = sound'EUT_Sounds.Rampage'; DominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Dominating",class'sound',true)); if(DominatingSound == none) DominatingSound = sound'EUT_Sounds.Dominating'; UnStoppableSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_UnStoppable",class'sound',true)); if(UnStoppableSound == none) UnStoppableSound = sound'EUT_Sounds.UnStoppable'; GodlikeSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Godlike",class'sound',true)); if(GodlikeSound == none) GodlikeSound = sound'EUT_Sounds.Godlike'; WhickedSickSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_WhickedSick",class'sound',true)); if(WhickedSickSound == none) WhickedSickSound = sound'EUT_Sounds.WhickedSick'; RedTeamIsTheWinnerSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_red_team_is_the_winner",class'sound',true)); if(RedTeamIsTheWinnerSound == none) RedTeamIsTheWinnerSound = sound'EUT_Sounds.red_team_is_the_winner'; FlawlessVictorySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Flawless_victory",class'sound',true)); if(FlawlessVictorySound == none) FlawlessVictorySound = sound'EUT_Sounds.Flawless_victory'; BlueTeamIsTheWinnerSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_blue_team_is_the_winner",class'sound',true)); if(BlueTeamIsTheWinnerSound == none) BlueTeamIsTheWinnerSound = sound'EUT_Sounds.blue_team_is_the_winner'; LastSecondSaveSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Last_Second_Save",class'sound',true)); if(LastSecondSaveSound == none) LastSecondSaveSound = sound'EUT_Sounds.Last_Second_Save'; RedTeamScoresSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_Scores",class'sound',true)); if(RedTeamScoresSound == none) RedTeamScoresSound = sound'EUT_Sounds.Red_Team_Scores'; RedTeamTakesTheLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_takes_lead",class'sound',true)); if(RedTeamTakesTheLeadSound == none) RedTeamTakesTheLeadSound = sound'EUT_Sounds.Red_Team_takes_lead'; RedTeamIncreasesThierLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Red_Team_increases_their_lead",class'sound',true)); if(RedTeamIncreasesThierLeadSound == none) RedTeamIncreasesThierLeadSound = sound'EUT_Sounds.Red_Team_increases_their_lead'; RedTeamDominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_red_team_Dominating",class'sound',true)); if(RedTeamDominatingSound == none) RedTeamDominatingSound = sound'EUT_Sounds.red_team_Dominating'; BlueTeamScoresSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_Scores",class'sound',true)); if(BlueTeamScoresSound == none) BlueTeamScoresSound = sound'EUT_Sounds.Blue_Team_Scores'; BlueTeamTakesTheLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_takes_the_lead",class'sound',true)); if(BlueTeamTakesTheLeadSound == none) BlueTeamTakesTheLeadSound = sound'EUT_Sounds.Blue_Team_takes_the_lead'; BlueTeamIncreasesThierLeadSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Blue_Team_increases_their_lead",class'sound',true)); if(BlueTeamIncreasesThierLeadSound == none) BlueTeamIncreasesThierLeadSound = sound'EUT_Sounds.Blue_Team_increases_their_lead'; BlueTeamDominatingSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_blue_team_Dominating",class'sound',true)); if(BlueTeamDominatingSound == none) BlueTeamDominatingSound = sound'EUT_Sounds.blue_team_Dominating'; HatTrickSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HatTrick",class'sound',true)); if(HatTrickSound == none) HatTrickSound = sound'EUT_Sounds.HatTrick'; HitSoundSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HitSound",class'sound',true)); if(HitSoundSound == none) HitSoundSound = sound'EUT_Sounds.HitSound'; HitSoundFriendlySound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HitSound_F",class'sound',true)); if(HitSoundFriendlySound == none) HitSoundFriendlySound =sound'EUT_Sounds.HitSound_F'; DoubleKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Double_Kill",class'sound',true)); if(DoubleKillSound == none) DoubleKillSound = sound'EUT_Sounds.Double_Kill'; MultiKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_MultiKill",class'sound',true)); if(MultiKillSound == none) MultiKillSound = sound'EUT_Sounds.MultiKill'; MegaKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_megakill",class'sound',true)); if(MegaKillSound == none) MegaKillSound = sound'EUT_Sounds.megakill'; UltraKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_UltraKill",class'sound',true)); if(UltraKillSound == none) UltraKillSound = sound'EUT_Sounds.UltraKill'; MonsterKillSoundF = sound(DynamicLoadObject(SoundPackage$"."$"Alt_MonsterKill_F",class'sound',true)); if(MonsterKillSoundF == none) MonsterKillSoundF = sound'EUT_Sounds.MonsterKill_F'; LudicriousKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_LudicrousKill",class'sound',true)); if(LudicriousKillSound == none) LudicriousKillSound = sound'EUT_Sounds.LudicrousKill'; HolyShitKillSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_HolyShit_F",class'sound',true)); if(HolyShitKillSound == none) HolyShitKillSound = sound'EUT_Sounds.HolyShit_F'; OwnageSound = sound(DynamicLoadObject(SoundPackage$"."$"Alt_Ownage",class'sound',true)); if(OwnageSound == none) OwnageSound = sound'EUT_Sounds.Ownage'; } //------------------------------------- // ResetVars //------------------------------------- function ResetVars() { local int i; MyCRI = EUTGameReplicationInfo(GameReplicationInfo); MyCRI.bShowIPS = bShowIPS; MyCRI.TraceDistance = TraceDistance; MyCRI.bLeaderBeacon = bLeaderBeacon; MyCRI.bIpToCountry = bIpToCountry; MyCRI.TransKillMessage = TransKillMessage; MyCRI.ImpactKillMessage = ImpactKillMessage; MyCRI.EnforcerKillMessage = EnforcerKillMessage; MyCRI.BioKillMessage = BioKillMessage; MyCRI.ShockRifleKillMessage = ShockRifleKillMessage; MyCRI.PulseGunKillMessage = PulseGunKillMessage; MyCRI.RipperKillMessage = RipperKillMessage; MyCRI.MiniGunKillMessage = MiniGunKillMessage; MyCRI.FlakCannonKillMessage = FlakCannonKillMessage; MyCRI.RocketLauncherKillMessage = RocketLauncherKillMessage; MyCRI.SniperRifleKillMessage = SniperRifleKillMessage; MyCRI.AerialKillBio = AerialKillBio; MyCRI.AerialKillRipper = AerialKillRipper; MyCRI.AerialKillFlak = AerialKillFlak; MyCRI.AerialKillRockets = AerialKillRockets; MyCRI.AerialKillSniper = AerialKillSniper; MyCRI.AerialKillSuper = AerialKillSuper; MyCRI.AerialKillTrans = AerialKillTrans; MyCRI.AerialKillCombo = AerialKillCombo; MyCRI.AerialKillEnforcer = AerialKillEnforcer; MyCRI.AerialKillPulse = AerialKillPulse; MyCRI.AerialKillMini = AerialKillMini; MyCRI.AerialKillPiston = AerialKillPiston; MyCRI.bScoreBoardEff = bScoreBoardEff; CurrentLeaderScore = 0; MyCRI.IpToCountryTexturePackage = IpToCountryTexturePackage; MyCRI.CustomWeaponName = CustomWeaponName; MyCRI.bUsesCustomWeapon = bUsesCustomWeapon; MyCRI.CustomWeaponKillMessage = CustomWeaponKillMessage; MyCRI.AerialKillCustom = AerialKillCustom; MyCRI.SetFOV = SetFOV; MyCRI.bEnhancedMessages = bEnhancedMessages; MyCRI.bTournament= bTournament; MyCRI.MessageOfTheDay = MessageOfTheDay; for( i = 0; i < MaxArray; i++) { MyCRI.TotalDamageAmmount[i] = 0; MyCRI.ClientHitSound[i] = 0; MyCRI.EnforcerHitCount[i] = 0; MyCRI.BioGunHitCount[i] = 0; MyCRI.ShockRifleHitCount[i] = 0; MyCRI.PulseGunHitCount[i] = 0; MyCRI.RipperHitCount[i] = 0; MyCRI.MiniGunHitCount[i] = 0; MyCRI.FlakGunHitCount[i] = 0; MyCRI.EightBallHitCount[i] = 0; MyCRI.SniperRifleHitCount[i] = 0; MyCRI.SuperShockRifleHitCount[i] = 0; MyCRI.ArmorAmmount[i] = 0; MyCRI.TotalKills[i] = 0; MyCRI.TotalDeaths[i] = 0; MyCRI.StoredPlayerIP[i] = ""; MyCRI.IPCTexture[i] = ""; MyCRI.ClientIdentified[i] = 0; MyCRI.HealthAmmount[i] = 0; MyCRI.MultiKills1[i].KillingSpree = 0; MyCRI.MultiKills1[i].Rampage = 0; MyCRI.MultiKills1[i].Dominating = 0; MyCRI.MultiKills2[i].UnStoppable = 0; MyCRI.MultiKills2[i].Godlike = 0; MyCRI.MultiKills2[i].Ownage = 0; MyCRI.PlayerAccuracy1[i].Enforcer = 0; MyCRI.PlayerAccuracy1[i].BioGun = 0; MyCRI.PlayerAccuracy1[i].ShockRifle = 0; MyCRI.PlayerAccuracy2[i].PulseGun = 0; MyCRI.PlayerAccuracy2[i].Ripper = 0; MyCRI.PlayerAccuracy2[i].MiniGun = 0; MyCRI.PlayerAccuracy3[i].FlakCannon = 0; MyCRI.PlayerAccuracy3[i].EightBall = 0; MyCRI.PlayerAccuracy3[i].SniperRifle = 0; MyCRI.PlayerAccuracy3[i].InstaGib = 0; FlakKills[i] = 0; ComboKills[i] = 0; MyCRI.HeadHunterCount[i] = 0; MyCRI.ComboWhoreCount[i] = 0; MyCRI.FlakMonkeyCount[i] = 0; MyCRI.HeadShotsCount[i] = 0; MultiKills[i].MultiLevel = 0; MultiKills[i].MultiTime = 0; MyCRI.KillingSpree[i].UltraKills = 0; MyCRI.KillingSpree[i].MonsterKills = 0; MyCRI.KillingSpree[i].LudicriousKills = 0; MyCRI.KillingSpree[i].HolyShitKills = 0; MyCRI.CurrentTotalAccuracy[i] = 0; MyCRI.CurrentRanking[i] = 0; WeaponDamage[i].Enforcer = 0; WeaponDamage[i].BioGun = 0; WeaponDamage[i].ShockRifle = 0; WeaponDamage[i].PulseGun = 0; WeaponDamage[i].Ripper = 0; WeaponDamage[i].MiniGun = 0; WeaponDamage[i].FlakGun = 0; WeaponDamage[i].EightBall = 0; WeaponDamage[i].SniperRifle = 0; WeaponDamage[i].SuperShockRifle = 0; AKMS[i] = 0; MyCRI.CustomWeaponHitCount[i] = 0; WeaponDamage[i].CustomWeapon = 0; MyCRI.PlayerAccuracy4[i].CustomWeapon = 0; SplashKills[i].FlakTime = 0; SplashKills[i].LastHit = none; } } //------------------------------------- // InitializeLogging //------------------------------------- function InitializeLogging() { local Mutator Mut; StatLink.bWorld = False; StatLink.StartLog(); StatLink.LogStandardInfo(); StatLink.LogServerInfo(); StatLink.LogMapParameters(); for (Mut = Level.Game.BaseMutator; Mut != None; Mut = Mut.NextMutator) StatLink.AddMutator(Mut); StatLink.LogMutatorList(); Level.Game.LogGameParameters(StatLink); Level.Game.LocalLog = StatLink; Level.Game.LocalLogFileName = StatLink.GetLogFileName(); } //------------------------------------- // Logout //------------------------------------- function Logout(Pawn P) { local int pid; pid = P.PlayerReplicationInfo.PlayerID; super(DeathMatchPlus).Logout(P); MyCRI.TotalDamageAmmount[pid] = 0; MyCRI.ClientHitSound[pid] = 0; MyCRI.EnforcerHitCount[pid] = 0; MyCRI.BioGunHitCount[pid] = 0; MyCRI.ShockRifleHitCount[pid] = 0; MyCRI.PulseGunHitCount[pid] = 0; MyCRI.RipperHitCount[pid] = 0; MyCRI.MiniGunHitCount[pid] = 0; MyCRI.FlakGunHitCount[pid] = 0; MyCRI.EightBallHitCount[pid] = 0; MyCRI.SniperRifleHitCount[pid] = 0; MyCRI.SuperShockRifleHitCount[pid] = 0; MyCRI.ArmorAmmount[pid] = 0; MyCRI.TotalKills[pid] = 0; MyCRI.TotalDeaths[pid] = 0; MyCRI.StoredPlayerIP[pid] = ""; MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = 0; MyCRI.HealthAmmount[pid] = 0; MyCRI.MultiKills1[pid].KillingSpree = 0; MyCRI.MultiKills1[pid].Rampage = 0; MyCRI.MultiKills1[pid].Dominating = 0; MyCRI.MultiKills2[pid].UnStoppable = 0; MyCRI.MultiKills2[pid].Godlike = 0; MyCRI.MultiKills2[pid].Ownage = 0; MyCRI.PlayerAccuracy1[pid].Enforcer = 0; MyCRI.PlayerAccuracy1[pid].BioGun = 0; MyCRI.PlayerAccuracy1[pid].ShockRifle = 0; MyCRI.PlayerAccuracy2[pid].PulseGun = 0; MyCRI.PlayerAccuracy2[pid].Ripper = 0; MyCRI.PlayerAccuracy2[pid].MiniGun = 0; MyCRI.PlayerAccuracy3[pid].FlakCannon = 0; MyCRI.PlayerAccuracy3[pid].EightBall = 0; MyCRI.PlayerAccuracy3[pid].SniperRifle = 0; MyCRI.PlayerAccuracy3[pid].InstaGib = 0; FlakKills[pid] = 0; ComboKills[pid] = 0; MyCRI.HeadHunterCount[pid] = 0; MyCRI.ComboWhoreCount[pid] = 0; MyCRI.FlakMonkeyCount[pid] = 0; MyCRI.HeadShotsCount[pid] = 0; MultiKills[pid].MultiLevel = 0; MultiKills[pid].MultiTime = 0; MyCRI.KillingSpree[pid].UltraKills = 0; MyCRI.KillingSpree[pid].MonsterKills = 0; MyCRI.KillingSpree[pid].LudicriousKills = 0; MyCRI.KillingSpree[pid].HolyShitKills = 0; MyCRI.CurrentTotalAccuracy[pid] = 0; MyCRI.CurrentRanking[pid] = 0; WeaponDamage[pid].Enforcer = 0; WeaponDamage[pid].BioGun = 0; WeaponDamage[pid].ShockRifle = 0; WeaponDamage[pid].PulseGun = 0; WeaponDamage[pid].Ripper = 0; WeaponDamage[pid].MiniGun = 0; WeaponDamage[pid].FlakGun = 0; WeaponDamage[pid].EightBall = 0; WeaponDamage[pid].SniperRifle = 0; WeaponDamage[pid].SuperShockRifle = 0; AKMS[pid] = 0; MyCRI.CustomWeaponHitCount[pid] = 0; WeaponDamage[pid].CustomWeapon = 0; MyCRI.PlayerAccuracy4[pid].CustomWeapon = 0; SplashKills[pid].FlakTime = 0; SplashKills[pid].LastHit = none; if (P.PlayerReplicationInfo.PlayerID == MyCRI.LeaderID) CurrentLeaderScore = 0; } //------------------------------------- // InitGame //------------------------------------- event InitGame(string s, out string e) { Super.InitGame(s, e); } //------------------------------------- // StartMatch //------------------------------------- function StartMatch() { Super.StartMatch(); log("Match Started"); if (bTournament) { ResetVars(); MyCRI.bWarmupSwitch = true; } MyCRI.bMatchStarted = true; } //------------------------------------- // Killed //------------------------------------- function Killed(Pawn Killer, Pawn Victim, name DamageType) { local int kid, oid; if (Killer == none) { if (DamageType == 'Suicided' || (DamageType == 'Fell') || (DamageType == 'Burned') || (DamageType == 'Drowned') || (DamageType == '')) { super(DeathMatchPlus).Killed(Killer, Victim, DamageType); return; } } if (Killer != none && (Victim != none)) { if (Killer != Victim) { if ((DamageType == 'FlakDeath') || (DamageType == 'shredded')) { kid = Killer.PlayerReplicationInfo.PlayerID; oid = Victim.PlayerReplicationInfo.PlayerID; FlakKills[kid]++; if (FlakKills[kid] == 30) { FlakKills[kid] = 0; if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("flak_monkey", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 15); BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A FlakMonkey!!!!",false); MyCRI.FlakMonkeyCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 101); } } if (DamageType == 'Decapitated') { kid = Killer.PlayerReplicationInfo.PlayerID; oid = Victim.PlayerReplicationInfo.PlayerID; MyCRI.HeadShotsCount[kid]++; if (MyCRI.HeadShotsCount[kid] > 30) { if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("head_hunter", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 9 ); MyCRI.HeadShotsCount[kid] = 0; BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A HeadHunter!!!!",false); MyCRI.HeadHunterCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 102); } } } if (Killer != none && (Killer.Weapon != none) && (Killer.IsA('PlayerPawn')) && (!Killer.Weapon.IsA('SuperShockRifle')) && (_GetItemName(Killer.Weapon) != "ZP_SUPERSHOCKRIFLE")) { if (DamageType == 'Jolted') { if (Victim.health < -50) { ComboKills[kid]++; kid = Killer.PlayerReplicationInfo.PlayerID; oid = Victim.PlayerReplicationInfo.PlayerID; if (ComboKills[kid] == 30) { ComboKills[kid] = 0; if (Level.Game.LocalLog != None) level.game.localLog.logSpecialEvent("combo_whore", kid, oid); PlayerPawn(Killer).ReceiveLocalizedMessage( class'EUTHudMessages', 16); BroadCastMessage(Killer.PlayerReplicationInfo.PlayerName$" Is A ComboWhore!!!!",false); MyCRI.ComboWhoreCount[kid]++; if (CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 103); } } } } } if (Victim != none && (Killer != none)) ProcessExtendedSprees(Victim.Spree); super(DeathMatchPlus).Killed(Killer, Victim, DamageType); } //------------------------------------- // ProcessExtendedSprees //------------------------------------- function ProcessExtendedSprees(int i) { switch(i) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: break; case 5: case 6: case 7: case 8: case 9: bExpandSpree = true; ExpandedSpreeSwitch = 6; break; case 10: case 11: case 12: case 13: case 14: bExpandSpree = true; ExpandedSpreeSwitch = 1; break; case 15: case 16: case 17: case 18: case 19: bExpandSpree = true; ExpandedSpreeSwitch = 2; break; case 20: case 21: case 22: case 23: case 24: bExpandSpree = true; ExpandedSpreeSwitch = 3; break; case 25: case 26: case 27: case 28: case 29: bExpandSpree = true; ExpandedSpreeSwitch = 4; break; case 30: break; } if (i > 29) { bExpandSpree = true; ExpandedSpreeSwitch = 5; } } //------------------------------------- // ScoreKill //------------------------------------- function ScoreKill(Pawn Killer, Pawn Victim) { local int kid, oid; if ((Killer == Victim) || (Killer == None)) Victim.PlayerReplicationInfo.Score -= 1; if (Killer != none && (Victim != none) && (Killer != Victim)) { Killer.killCount++; kid = Killer.PlayerReplicationInfo.PlayerID; oid = Victim.PlayerReplicationInfo.PlayerID; MultiKills[oid].MultiLevel = 0; if (Level.TimeSeconds - MultiKills[kid].MultiTime < 3) { ProcessMultiKills(kid); if (MultiKills[kid].MultiLevel >= AnnouncerLevel && (bEnhancedSprees)) BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(MultiKills[kid].MultiLevel, Killer.PlayerReplicationInfo,None,None),false,'EUTEvent'); } if(Level.TimeSeconds - MultiKills[kid].MultiTime > 3) MultiKills[kid].MultiLevel = 0; MultiKills[kid].MultiTime = Level.TimeSeconds; if (Killer.bIsPlayer && (Victim.bIsPlayer)) Killer.PlayerReplicationInfo.Score += 1; } if (bAltScoring && (Killer != Victim) && (Killer != None) && (Victim.bIsPlayer)) Victim.PlayerReplicationInfo.Score -= 1; Victim.DieCount++; BaseMutator.ScoreKill(Killer, Victim); } //------------------------------------- // ProcessMultiKills //------------------------------------- function ProcessMultiKills(int pid) { MultiKills[pid].MultiLevel++; switch (MultiKills[pid].MultiLevel) { case 0: case 1: case 2: break; case 3: if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_meg"$chr(9)$pid); break; case 4: MyCRI.KillingSpree[pid].UltraKills++; break; case 5: MyCRI.KillingSpree[pid].MonsterKills++; break; case 6: MyCRI.KillingSpree[pid].LudicriousKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_lud"$chr(9)$pid); break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: MyCRI.KillingSpree[pid].HolyShitKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_hs"$chr(9)$pid); break; case 19: MyCRI.KillingSpree[pid].HolyShitKills++; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_hs"$chr(9)$pid); MultiKills[pid].MultiLevel = 0; break; } } //------------------------------------- // ReduceDamage //------------------------------------- function int ReduceDamage(int DamageAmmount, name DamageType, Pawn Injured, Pawn Instigator) { if (Injured != none && (!Injured.bIsPlayer)) return Super(DeathMatchPlus).ReduceDamage(DamageAmmount, DamageType, Injured, Instigator); if (Instigator != none && Injured != None && Instigator != Injured) { MyCRI.TotalDamageAmmount[Instigator.PlayerReplicationInfo.PlayerID]++; if (Instigator.Weapon != none) CalculateDamage(Instigator, Injured, DamageType, DamageAmmount); if (bHitSounds && (MyCRI.ClientHitSound[Instigator.PlayerReplicationInfo.PlayerID] == 1)) TournamentPlayer(PlayerPawn(Instigator)).ReceiveLocalizedMessage( class'EUTHitSoundMessage', 0); } return Super(DeathMatchPlus).ReduceDamage(DamageAmmount, DamageType, Injured, Instigator); } //------------------------------------- // Timer //------------------------------------- function Timer() { local Pawn P; local string IP, S; local int pid; local Inventory Inv; if (NumSpectators < MaxSpectators) MyCRI.bCanSpectate = true; else MyCRI.bCanSpectate = false; for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.PlayerReplicationInfo != none) pid = P.PlayerReplicationInfo.PlayerID; if (P.IsA('Bot') || P.IsA('PlayerPawn')) { if (P.PlayerReplicationInfo != none && (P.PlayerReplicationInfo.PlayerName != "Player")) { MyCRI.ClientPing[pid] = P.PlayerReplicationInfo.Ping; MyCRI.TotalKills[pid] = P.KillCount; MyCRI.TotalDeaths[pid] = P.DieCount; if (P.PlayerReplicationInfo.Score > CurrentLeaderScore) { CurrentLeaderScore = P.PlayerReplicationInfo.Score; MyCRI.LeaderID = P.PlayerReplicationInfo.PlayerID; } if(!P.IsA('Bot')) { if (MyCRI.StoredPlayerIP[pid] == "") { IP = PlayerPawn(P).GetPlayerNetworkAddress(); IP = Left(IP,InStr(IP,":")); MyCRI.StoredPlayerIP[pid] = IP; } if (MyCRI.StoredPlayerIP[pid] != "" && (bIpToCountry) && (IpToCountry != none) && (MyCRI.ClientIdentified[pid] < MaxTries)) { S = IpToCountry.GetItemName(MyCRI.StoredPlayerIP[pid]); if(caps(S) == "!DISABLED") { MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = MaxTries; } else if(Left(S, 1) != "!") { MyCRI.IPCTexture[pid] = SelElem(S, 5); if (MyCRI.IPCTexture[pid] == "") { MyCRI.IPCTexture[pid] = ""; MyCRI.ClientIdentified[pid] = MaxTries; } else MyCRI.ClientIdentified[pid] = MaxTries; } MyCRI.ClientIdentified[pid]++; } } CalculateRanking(P); if (P.Health >= 0) MyCRI.HealthAmmount[pid] = P.Health; else MyCRI.HealthAmmount[pid] = 0; MyCRI.ArmorAmmount[pid] = 0; for (Inv = P.Inventory; Inv != None; Inv = Inv.Inventory) if(Inv.bIsAnArmor) MyCRI.ArmorAmmount[pid] += Inv.Charge; } } } if (RemainingTime <= 0 && (!bAltOvertime) && (bNoOverTime)) AltEndGame("timelimit"); if(LoginActor != none) { LoginActor = none; } super(DeathMatchPlus).Timer(); } //------------------------------------- // PostLogin //------------------------------------- event PostLogin(PlayerPawn PP) { super(DeathMatchPlus).PostLogin(PP); LoginActor = PP; } //------------------------------------- // SelElem //------------------------------------- static final function string SelElem(string s, int e) { local int i; while (e-->1) s = Mid(s, InStr(s,":") + 1); i = InStr(s, ":"); if (i != -1) s = Left(s, i); return s; } //------------------------------------- // NotifySpree //------------------------------------- function NotifySpree(Pawn Other, int i) { local Pawn P; local int oid; oid = Other.PlayerReplicationInfo.PlayerID; if (i != 5 && (i != 10) && (i != 15) && (i != 20) && (i != 25) && (i != 30)) return; switch (i) { case 5: i = 0; MyCRI.MultiKills1[oid].KillingSpree++; break; case 10: i = 1; MyCRI.MultiKills1[oid].Rampage++; break; case 15: i = 2; MyCRI.MultiKills1[oid].Dominating++; break; case 20: i = 3; MyCRI.MultiKills2[oid].UnStoppable++; break; case 25: i = 4; MyCRI.MultiKills2[oid].Godlike++; break; case 30: i = 5; MyCRI.MultiKills2[oid].Ownage++; Other.Spree = 0; if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogSpecialEvent(Level.Game.LocalLog.GetTimeStamp()$Chr(9)$"spree"$chr(9)$"spree_wks"$chr(9)$oid); break; } for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('TournamentPlayer')) P.ReceiveLocalizedMessage( class'KillingSpreeMessage', i, Other.PlayerReplicationInfo ); if (CanPlaySound(P) && (i == 5) && (bEnhancedSprees)) { BroadcastLocalizedMessage(class'EUTHudMessages', i, Other.PlayerReplicationInfo, None, None); TournamentPlayer(PlayerPawn(P)).ReceiveLocalizedMessage( class'EUTMultiKillMessage', 104); } } } //------------------------------------- // CalculateAccuracy //------------------------------------- function CalculateAccuracy(Pawn P) { local int pid; local int f, t; if (P.PlayerReplicationInfo == none ||(P.PlayerReplicationInfo.PlayerName == "Player")) return; pid = P.PlayerReplicationInfo.PlayerID; f = 0; t = MyCRI.PlayerAccuracy1[pid].Enforcer + MyCRI.PlayerAccuracy1[pid].BioGun + MyCRI.PlayerAccuracy1[pid].ShockRifle + MyCRI.PlayerAccuracy2[pid].MiniGun + MyCRI.PlayerAccuracy2[pid].PulseGun + MyCRI.PlayerAccuracy2[pid].Ripper + MyCRI.PlayerAccuracy3[pid].EightBall + MyCRI.PlayerAccuracy3[pid].FlakCannon + MyCRI.PlayerAccuracy3[pid].SniperRifle + MyCRI.PlayerAccuracy3[pid].InstaGib + MyCRI.PlayerAccuracy4[pid].CustomWeapon; if (MyCRI.PlayerAccuracy1[pid].Enforcer != 0) f++; if (MyCRI.PlayerAccuracy1[pid].BioGun != 0) f++; if (MyCRI.PlayerAccuracy1[pid].ShockRifle != 0) f++; if (MyCRI.PlayerAccuracy2[pid].MiniGun != 0) f++; if (MyCRI.PlayerAccuracy2[pid].PulseGun != 0) f++; if (MyCRI.PlayerAccuracy2[pid].Ripper != 0) f++; if (MyCRI.PlayerAccuracy3[pid].EightBall != 0) f++; if (MyCRI.PlayerAccuracy3[pid].FlakCannon != 0) f++; if (MyCRI.PlayerAccuracy3[pid].SniperRifle != 0) f++; if (MyCRI.PlayerAccuracy3[pid].InstaGib != 0) f++; if (MyCRI.PlayerAccuracy4[pid].CustomWeapon != 0) f++; MyCRI.CurrentTotalAccuracy[pid] = t/f; } //------------------------------------- // PickupQuery //------------------------------------- function bool PickupQuery(Pawn Other, Inventory Inv) { local byte x; local int st, at, rt, it, kt, mt, bt, i; local string s; s = caps(mid(string(Inv.Class), instr(string(Inv.Class), ".") + 1)); if (!bAntiTimer) { if (bCheckDefaults) { switch (s) { case "UT_SHIELDBELT": Inv.DrawScale = 1.0; break; case "UDAMAGE": Inv.DrawScale = 1.0; break; case "WARHEADLAUNCHER": Inv.DrawScale = 1.0; break; case "UT_INVISIBILITY": Inv.DrawScale = 1.0; break; case "HEALTHPACK": Inv.DrawScale = 1.0; break; case "ARMOR2": Inv.DrawScale = 1.0; break; case "UT_JUMPBOOTS": Inv.DrawScale = 1.0; break; } } if (BaseMutator.HandlePickupQuery(Other, Inv, x)) return ( x == 1 ); if ( Other.Inventory == none ) return true; else return !Other.Inventory.HandlePickupQuery(Inv); } st = rand(30) + 55; at = rand(40) + 100; rt = st; it = at; kt = rand(40) + 100; mt = rand(20) + 20; bt = mt; switch (s) { case "UT_SHIELDBELT": Inv.ReSpawnTime = st; Inv.DrawScale = 1.0; break; case "UDAMAGE": Inv.ReSpawnTime = at; Inv.DrawScale = 1.0; break; case "WARHEADLAUNCHER": for (i = 0; i < WarheadCount; i++) { if (Inv.location == WarheadLocation[i]) { Inv.ReSpawnTime = rt; Inv.DrawScale = 1.0; break; } } break; case "UT_INVISIBILITY": Inv.ReSpawnTime = it; Inv.DrawScale = 1.0; break; case "HEALTHPACK": Inv.ReSpawnTime = kt; Inv.DrawScale = 1.0; break; case "ARMOR2": Inv.ReSpawnTime = mt; Inv.DrawScale = 1.0; break; case "UT_JUMPBOOTS": Inv.ReSpawnTime = bt; Inv.DrawScale = 1.0; break; } if (BaseMutator.HandlePickupQuery(Other, Inv, x)) return (x == 1); if (Other.Inventory == none) return true; else return !Other.Inventory.HandlePickupQuery(Inv); } //------------------------------------- // GetRules //------------------------------------- function string GetRules() { local string ResultSet; ResultSet = super(DeathMatchPlus).GetRules(); ResultSet = ResultSet$"\\bEnhancedSprees\\"$bEnhancedSprees; ResultSet = ResultSet$"\\bEnhancedMessages\\"$bEnhancedMessages; ResultSet = ResultSet$"\\bShowIPS\\"$bShowIPS; ResultSet = ResultSet$"\\bLogMods\\"$bLogMods; ResultSet = ResultSet$"\\bCheckDefaults\\"$bCheckDefaults; ResultSet = ResultSet$"\\HitSoundSounds\\"$bHitSounds; ResultSet = ResultSet$"\\DemoRequest\\"$bDemoRequest; ResultSet = ResultSet$"\\AnnouncerLevel\\"$AnnouncerLevel; return ResultSet; } //------------------------------------- // LogGameParameters //------------------------------------- function LogGameParameters(StatLog sLog) { local bool b; if (sLog == None) { GameName = "EUT Tournament DeathMatch"; return; } GameName="Tournament DeathMatch"; b = bCoopWeaponMode; if ( Level.Netmode != NM_Standalone ) bCoopWeaponMode = bMultiWeaponStay; super(DeathMatchPlus).LogGameParameters(sLog); bCoopWeaponMode = b; sLog.LogEventString(sLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bEnhancedSprees"$Chr(9)$bEnhancedSprees); sLog.LogEventString(sLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bEnhancedMessages"$Chr(9)$bEnhancedMessages); sLog.LogEventString(sLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bHitSounds"$Chr(9)$bHitSounds); sLog.LogEventString(sLog.GetTimeStamp()$Chr(9)$"game"$Chr(9)$"bDemoRequest"$Chr(9)$bDemoRequest); GameName = "EUT Tournament DeathMatch"; } //------------------------------------- // CalculateRanking //------------------------------------- function CalculateRanking(Pawn P) { local int pid; if (P.PlayerReplicationInfo == none ||(P.PlayerReplicationInfo.PlayerName == "Player")) return; pid = P.PlayerReplicationInfo.PlayerID; MyCRI.CurrentRanking[pid] = 1000 + (Clamp(int((float(MyCRI.TotalKills[pid]) / float(MyCRI.TotalKills[pid] + MyCRI.TotalDeaths[pid])) * 100), 0, 100) * 10) + (MyCRI.CurrentTotalAccuracy[pid] * 10) + (P.PlayerReplicationInfo.Score * 50) + (MyCRI.MultiKills1[pid].KillingSpree * 100) + (MyCRI.MultiKills1[pid].Rampage * 100) + (MyCRI.MultiKills1[pid].Dominating * 100) + (MyCRI.HeadHunterCount[pid] * 100) + (MyCRI.KillingSpree[pid].UltraKills * 10) + (MyCRI.KillingSpree[pid].MonsterKills * 10) + (MyCRI.KillingSpree[pid].LudicriousKills * 10) + (MyCRI.KillingSpree[pid].HolyShitKills * 10); CalculateAccuracy(P); } //------------------------------------- // CalcEndStats //------------------------------------- function CalcEndStats() { local int i, pid; local float sec, min, fph; local Pawn P; local PlayerReplicationInfo PRI; Log("!!!!!!!!!!!!!!! CALC END STATS"); for (i = 0; i < 3; i++) { BestPlayers[i] = EndStatsClass.Default.BestPlayers[i]; BestFPHs[i] = EndStatsClass.Default.BestFPHs[i]; BestRecordDate[i] = EndStatsClass.Default.BestRecordDate[i]; BestDMPlayers[i] = _EndStatsClass.default.BestDMPlayers[i]; BestDMRanking[i] = _EndStatsClass.Default.BestDMRanking[i]; } for (i = 0; i < 32; i++) { if (GameReplicationInfo.PRIArray[i] != None) { PRI = GameReplicationInfo.PRIArray[i]; TotalFrags += PRI.Score; TotalDeaths += PRI.Deaths; sec = Level.TimeSeconds - PRI.StartTime; min = sec / 60; fph = PRI.Score / (min / 60); if (Caps(PRI.PlayerName) != "PLAYER") { EmptyBestFPHSlot(fph, PRI.PlayerName); EmptyBestDMSlot(MyCRI.CurrentRanking[PRI.PlayerID], PRI.PlayerName); } } } for (i = 0; i < 3; i++) { EndStatsClass.Default.BestPlayers[i] = BestPlayers[i]; EndStatsClass.Default.BestFPHs[i] = BestFPHs[i]; EndStatsClass.Default.BestRecordDate[i] = BestRecordDate[i]; _EndStatsClass.Default.BestDMRanking[i] = BestDMRanking[i]; _EndStatsClass.default.BestDMPlayers[i] = BestDMPlayers[i]; } EndStatsClass.Default.TotalFrags = TotalFrags + EndStatsClass.Default.TotalFrags; EndStatsClass.Default.TotalDeaths = TotalDeaths + EndStatsClass.Default.TotalDeaths; EndStatsClass.Default.TotalGames++; EndStatsClass.Static.StaticSaveConfig(); _EndStatsClass.Static.StaticSaveConfig(); for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('Bot') || P.IsA('PlayerPawn')) { if (P.PlayerReplicationInfo != none && (P.PlayerReplicationInfo.PlayerName != "Player")) { pid = P.PlayerReplicationInfo.PlayerID; if (Level.Game.LocalLog != none && (bStatLink)) { Level.Game.LocalLog.LogSpecialEvent("stat_player", "accuracy", pid, string(MyCRI.CurrentTotalAccuracy[pid])); //Weapon Specific Accuracy Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Enforcer",pid, string(MyCRI.PlayerAccuracy1[pid].Enforcer)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","GES Bio Rifle",pid, string(MyCRI.PlayerAccuracy1[pid].BioGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Shock Rifle",pid, string(MyCRI.PlayerAccuracy1[pid].ShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Ripper",pid, string(MyCRI.PlayerAccuracy2[pid].Ripper)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Pulse Gun",pid, string(MyCRI.PlayerAccuracy2[pid].PulseGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Minigun",pid, string(MyCRI.PlayerAccuracy2[pid].MiniGun)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Flak Cannon",pid, string(MyCRI.PlayerAccuracy3[pid].FlakCannon)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Rocket Launcher",pid, string(MyCRI.PlayerAccuracy3[pid].EightBall)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Sniper Rifle",pid, string(MyCRI.PlayerAccuracy3[pid].SniperRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Enhanced Shock Rifle",pid, string(MyCRI.PlayerAccuracy3[pid].InstaGib)); Level.Game.LocalLog.LogSpecialEvent("weap_accuracy","Custom Weapon",pid,string(MyCRI.PlayerAccuracy4[pid].CustomWeapon)); //Weapon Hit Count Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Enforcer",pid, string(MyCRI.EnforcerHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","GES Bio Rifle",pid, string(MyCRI.BioGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Shock Rifle",pid, string(MyCRI.ShockRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Ripper",pid, string(MyCRI.RipperHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Pulse Gun",pid, string(MyCRI.PulseGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Minigun",pid, string(MyCRI.MiniGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Flak Cannon",pid, string(MyCRI.FlakGunHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Rocket Launcher",pid, string(MyCRI.EightBallHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Sniper Rifle",pid, string(MyCRI.SniperRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Enhanced Shock Rifle",pid, string(MyCRI.SuperShockRifleHitCount[pid])); Level.Game.LocalLog.LogSpecialEvent("weap_hitcount","Custom Weapon",pid, string(MyCRI.CustomWeaponHitCount[pid])); //Weapon Damage Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Enforcer",pid, string(WeaponDamage[pid].Enforcer)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","GES Bio Rifle",pid, string(WeaponDamage[pid].BioGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Shock Rifle",pid, string(WeaponDamage[pid].ShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Ripper",pid, string(WeaponDamage[pid].Ripper)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Pulse Gun",pid, string(WeaponDamage[pid].PulseGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Minigun",pid, string(WeaponDamage[pid].MiniGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Flak Cannon",pid, string(WeaponDamage[pid].FlakGun)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Rocket Launcher",pid, string(WeaponDamage[pid].EightBall)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Sniper Rifle",pid, string(WeaponDamage[pid].SniperRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Enhanced Shock Rifle",pid, string(WeaponDamage[pid].SuperShockRifle)); Level.Game.LocalLog.LogSpecialEvent("weap_damagegiven","Custom Weapon",pid, string(WeaponDamage[pid].CustomWeapon)); //Weapon Shot Count Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Enforcer",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].Enforcer,MyCRI.EnforcerHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","GES Bio Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].BioGun,MyCRI.BioGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Shock Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy1[pid].ShockRifle,MyCRI.ShockRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Ripper",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].Ripper,MyCRI.RipperHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Pulse Gun",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].PulseGun,MyCRI.PulseGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Minigun",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy2[pid].MiniGun,MyCRI.MiniGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Flak Cannon",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].FlakCannon,MyCRI.FlakGunHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Rocket Launcher",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].EightBall,MyCRI.EightBallHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Sniper Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].SniperRifle,MyCRI.SniperRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Enhanced Shock Rifle",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy3[pid].InstaGib,MyCRI.SuperShockRifleHitCount[pid]))); Level.Game.LocalLog.LogSpecialEvent("weap_shotcount","Custom Weapon",pid, string(CalculateShotCount(MyCRI.PlayerAccuracy4[pid].CustomWeapon,MyCRI.CustomWeaponHitCount[pid]))); } } } } } //------------------------------------- // EmptyBestDMSlot //------------------------------------ function EmptyBestDMSlot(int Rank, string PlayerName) { if (Rank > BestDMRanking[2]) { BestDMRanking[0] = BestDMRanking[1]; BestDMPlayers[0] = BestDMPlayers[1]; BestDMRanking[1] = BestDMRanking[2]; BestDMPlayers[1] = BestDMPlayers[2]; BestDMRanking[2] = Rank; BestDMPlayers[2] = PlayerName; return; } else if (Rank > BestDMRanking[1]) { BestDMRanking[0] = BestDMRanking[1]; BestDMPlayers[0] = BestDMPlayers[1]; BestDMRanking[1] = Rank; BestDMPlayers[1] = PlayerName; return; } else if (Rank > BestDMRanking[0]) { BestDMRanking[0] = Rank; BestDMPlayers[0] = PlayerName; return; } } //------------------------------------- // EmptyBestFPHSlot //------------------------------------ function EmptyBestFPHSlot(int FPH, string PlayerName) { if (FPH > BestFPHs[2]) { BestFPHs[0] = BestFPHs[1]; BestPlayers[0] = BestPlayers[1]; BestRecordDate[0] = BestRecordDate[1]; BestFPHs[1] = BestFPHs[2]; BestPlayers[1] = BestPlayers[2]; BestRecordDate[1] = BestRecordDate[2]; BestFPHs[2] = FPH; BestPlayers[2] = PlayerName; GetTimeStamp(BestRecordDate[2]); return; } else if (FPH > BestFPHs[1]) { BestFPHs[0] = BestFPHs[1]; BestPlayers[0] = BestPlayers[1]; BestRecordDate[0] = BestRecordDate[1]; BestFPHs[1] = FPH; BestPlayers[1] = PlayerName; GetTimeStamp(BestRecordDate[1]); return; } else if (FPH > BestFPHs[0]) { BestFPHs[0] = FPH; BestPlayers[0] = PlayerName; GetTimeStamp(BestRecordDate[0]); return; } } //------------------------------------- // CalculateShotCount //------------------------------------- function int CalculateShotCount(float acc, int i) { acc = acc/100; return i / acc; } //------------------------------------- // CalculateDamage //------------------------------------- function CalculateDamage(Pawn Killer, Pawn Victim, name DamageType, int DamageAmmount) { local int kid, vid; local byte i; local int health; local string s; if (Killer == none || (Victim == none) || (bGameEnded)) return; if (Killer.PlayerReplicationInfo == none || (Victim.PlayerReplicationInfo == none) || (Killer.Weapon == none)) return; kid = Killer.PlayerReplicationInfo.PlayerID; vid = Victim.PlayerReplicationInfo.PlayerID; i = 0; health = Victim.Health + MyCRI.ArmorAmmount[vid]; s = _GetItemName(Killer.Weapon); switch (s) { case "ENFORCER": case "DOUBLEENFORCER": case "ZP_ENFORCER": MyCRI.EnforcerHitCount[kid]++; WeaponDamage[kid].Enforcer = WeaponDamage[kid].Enforcer + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Shot') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Enf', i); return; } } break; case "UT_BIORIFLE": MyCRI.BioGunHitCount[kid]++; WeaponDamage[kid].BioGun = WeaponDamage[kid].BioGun + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Corroded') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Bio', i); return; } } break; case "SHOCKRIFLE": MyCRI.ShockRifleHitCount[kid]++; WeaponDamage[kid].ShockRifle = WeaponDamage[kid].ShockRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'Jolted') { if (health - DamageAmmount < -100) { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Combo', i); return; } } } break; case "SUPERSHOCKRIFLE": case "ZP_SHOCKRIFLE": case "ZP_SUPERSHOCKRIFLE": MyCRI.SuperShockRifleHitCount[kid]++; WeaponDamage[kid].SuperShockRifle = WeaponDamage[kid].SuperShockRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'SuperShock', i); return; } break; case "PULSEGUN": MyCRI.PulseGunHitCount[kid]++; WeaponDamage[kid].PulseGun = WeaponDamage[kid].PulseGun + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'Pulsed': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Pulse', i); return; } break; case 'zapped': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Pulse', i); return; } break; } break; case "RIPPER": MyCRI.RipperHitCount[kid]++; WeaponDamage[kid].Ripper = WeaponDamage[kid].Ripper + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'RipperAltDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; case 'shredded': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Ripper', i); return; } break; } break; case "MINIGUN2": MyCRI.MiniGunHitCount[kid]++; WeaponDamage[kid].MiniGun = WeaponDamage[kid].MiniGun + DamageAmmount; if (!bEnhancedDeathMessages) return; if (DamageType == 'shot') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Mini', i); return; } } break; case "UT_FLAKCANNON": if (Level.TimeSeconds - SplashKills[kid].FlakTime > 1) { MyCRI.FlakGunHitCount[kid]++; WeaponDamage[kid].FlakGun = WeaponDamage[kid].FlakGun + DamageAmmount; SplashKills[kid].FlakTime = Level.TimeSeconds; SplashKills[kid].LastHit = Victim; } else if (SplashKills[kid].LastHit != Victim && Level.TimeSeconds - SplashKills[kid].FlakTime < 1) { MyCRI.FlakGunHitCount[kid]++; WeaponDamage[kid].FlakGun = WeaponDamage[kid].FlakGun + DamageAmmount; SplashKills[kid].FlakTime = Level.TimeSeconds; SplashKills[kid].LastHit = Victim; } if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shredded': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Flak', i); return; } break; case 'FlakDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Flak', i); return; } break; } break; case "UT_EIGHTBALL": MyCRI.EightBallHitCount[kid]++; WeaponDamage[kid].EightBall = WeaponDamage[kid].EightBall + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'GrenadeDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Rockets', i); return; } break; case 'RocketDeath': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Rockets', i); return; } break; } break; case "SNIPERRIFLE": case "ZP_SNIPERRIFLE": MyCRI.SniperRifleHitCount[kid]++; WeaponDamage[kid].SniperRifle = WeaponDamage[kid].SniperRifle + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shot': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; } break; case "IMPACTHAMMER": if (!bEnhancedDeathMessages) return; if (DamageType == 'Impact') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Impact', i); return; } } break; case "TRANSLOCATOR": if (!bEnhancedDeathMessages) return; if (DamageType == 'Gibbed') { if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Trans', i); return; } } break; case CustomWeaponName: if (bUsesCustomWeapon) { MyCRI.CustomWeaponHitCount[kid]++; WeaponDamage[kid].CustomWeapon = WeaponDamage[kid].CustomWeapon + DamageAmmount; if (!bEnhancedDeathMessages) return; switch (DamageType) { case 'shot': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; case 'Decapitated': if (Victim.Physics == PHYS_Falling && (DamageKills(health, DamageAmmount) && (CheckZ(Victim)))) { i = 1; ParseNotification(Killer, Victim, 'Sniper', i); return; } break; } } break; } } //------------------------------------- // DamageKills //------------------------------------- function bool DamageKills(int x, int i) { if (x <= i) return true; else return false; } //------------------------------------- // CheckZ //------------------------------------- function bool CheckZ(Pawn P) { local vector X; X.X = P.Location.X; X.Y = P.Location.Y; X.Z = P.Location.Z + (-150 * LowGravityAerialKillAdjuster); if (FastTrace(X,P.Location)) return true; else return false; } //------------------------------------- // ParseNotification //------------------------------------- function ParseNotification(Pawn Killer, Pawn Victim, name DamageInstigator, byte i) { if (Killer == none || (Victim == none) || (i == 0)) return; if (Killer.IsA('Bot')) return; if (i == 1) { if (DamageInstigator == 'bio' || (DamageInstigator == 'Ripper') || (DamageInstigator == 'Flak') || (DamageInstigator == 'Rockets') || (DamageInstigator == 'Sniper') || (DamageInstigator == 'SuperShock') || (DamageInstigator == 'Trans') || (DamageInstigator == 'Combo') || (DamageInstigator == 'Enf') || (DamageInstigator == 'Pulse') || (DamageInstigator == 'Mini') || (DamageInstigator == 'Piston') || (DamageInstigator == 'Impact')) { if(CanPlaySound(Killer)) TournamentPlayer(PlayerPawn(Killer)).ReceiveLocalizedMessage(class'EUTMultiKillMessage', 20); AKMS[Killer.PlayerReplicationInfo.PlayerID] = 1; BroadcastRegularDeathMessage(Killer, Victim, DamageInstigator); return; } } } //------------------------------------- // BroadcastRegularDeathMessage //------------------------------------- function BroadcastRegularDeathMessage(Pawn Killer, Pawn Other, name DamageType) { local int i; local string s; local bool b; if (Killer == none || (Other == none)) return; if (Killer.PlayerReplicationInfo == none || (Other.PlayerReplicationInfo == none) || (Killer.Weapon == none)) return; if (bEnhancedDeathMessages) { if (EUTDamageType(DamageType)) { switch (DamageType) { case 'bio': i = 61; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Ripper': i = 62; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Flak': i = 63; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Rockets': i = 64; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Sniper': i = 65; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'SuperShock': i = 66; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Trans': i = 67; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Combo': i = 68; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Enf': i = 69; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Pulse': i = 70; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Mini': i = 72; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; case 'Impact': i = 74; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); break; } } if (!EUTDamageType(DamageType)) { if (AKMS[Killer.PlayerReplicationInfo.PlayerID] == 1) { AKMS[Killer.PlayerReplicationInfo.PlayerID] = 0; return; } switch (_GetItemName(Killer.Weapon)) { case "ENFORCER": case "DOUBLEENFORCER": case "ZP_ENFORCER": i = 21; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_BIORIFLE": i = 22; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "SHOCKRIFLE": case "SUPERSHOCKRIFLE": case "ZP_SHOCKRIFLE": case "ZP_SUPERSHOCKRIFLE": i = 23; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "PULSEGUN": i = 24; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "RIPPER": i = 25; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "MINIGUN2": i = 26; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_FLAKCANNON": i = 27; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "UT_EIGHTBALL": i = 28; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "SNIPERRIFLE": case "ZP_SNIPERRIFLE": i = 29; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "IMPACTHAMMER": i = 76; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; case "TRANSLOCATOR": i = 78; BroadcastLocalizedMessage(DeathMessageClass, i, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); b = true; break; } } } if (!bEnhancedDeathMessages && (!b)) BroadcastLocalizedMessage(DeathMessageClass, 30, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class); } //------------------------------------- // EUTDamageType //------------------------------------- function bool EUTDamageType(name DamageType) { if (DamageType == 'bio' || (DamageType == 'Ripper' ) || (DamageType == 'Flak' ) || (DamageType == 'Rockets' ) || (DamageType == 'Sniper' ) || (DamageType == 'SuperShock' ) || (DamageType == 'Trans' ) || (DamageType == 'Combo' ) || (DamageType == 'Enf' ) || (DamageType == 'Pulse' ) || (DamageType == 'Mini' ) || (DamageType == 'Impact' )) return true; else return false; } //------------------------------------- // EndSpree //------------------------------------- function EndSpree(Pawn Killer, Pawn Other) { local Pawn P; if (Other != none) if (!Other.bIsPlayer) return; for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.IsA('TournamentPlayer')) { if (!bExpandSpree) { if ((Killer == None) || !Killer.bIsPlayer) { TournamentPlayer(P).EndSpree(None, Other.PlayerReplicationInfo); return; } else { TournamentPlayer(P).EndSpree(Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo); return; } } if (bExpandSpree) { if ((Killer == None) || !Killer.bIsPlayer) { TournamentPlayer(P).EndSpree(None, Other.PlayerReplicationInfo); return; } else { TournamentPlayer(P).EndSpree(Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo); switch (ExpandedSpreeSwitch) { case 1: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(21, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 2: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(22, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 3: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(23, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 4: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(24, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 5: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(25, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; case 6: ExpandedSpreeSwitch = 0; bExpandSpree = false; BroadcastMessage(class'EUTMultiKillMessage'.static.GetBroadCastString(26, Killer.PlayerReplicationInfo,Other.PlayerReplicationInfo,None)); break; default: break; } } } } } } //------------------------------------- // AltEndGame //------------------------------------- function AltEndGame(string s) { local actor A; AltSetEndCams(s); bGameEnded = true; bAltOvertime = true; foreach AllActors(class'Actor', A, 'EndGame') A.trigger(self, none); if (LocalLog != None) { LocalLog.LogGameEnd(s); LocalLog.StopLog(); if (bBatchLocal) LocalLog.ExecuteSilentLogBatcher(); LocalLog.Destroy(); LocalLog = None; } if (WorldLog != None) { WorldLog.LogGameEnd(s); WorldLog.StopLog(); WorldLog.ExecuteWorldLogBatcher(); WorldLog.Destroy(); WorldLog = None; } } //------------------------------------- // AltSetEndCams //------------------------------------- function bool AltSetEndCams(string s) { local Pawn P, Best; local PlayerPawn PP; local string notify; for (P = Level.PawnList; P != None; P = P.nextPawn) if (P.bIsPlayer && !P.IsA('Spectator') && ((Best == None) || (P.PlayerReplicationInfo.Score > Best.PlayerReplicationInfo.Score))) Best = P; for (P = Level.PawnList; P != None; P = P.nextPawn) { if (P.bIsPlayer && (Best != P) && (P.PlayerReplicationInfo.Score == Best.PlayerReplicationInfo.Score)) { if (P.PlayerReplicationInfo.Deaths < Best.PlayerReplicationInfo.Deaths) { Best = P; notify = "Match Ended for Time Limit!"; } } } if (notify == "") notify = Best.PlayerReplicationInfo.PlayerName@GameEndedMessage; EndTime = Level.TimeSeconds + 3.0; GameReplicationInfo.GameEndedComments = notify; log( "Game ended at "$EndTime); for (P = Level.PawnList; P != None; P = P.nextPawn) { CalculateRanking(P); PP = PlayerPawn(P); if (PP != None) { if (!bTutorialGame) PlayWinMessage(PP, (PP == Best)); PP.bBehindView = true; if (PP == Best) PP.ViewTarget = None; else PP.ViewTarget = Best; PP.ClientGameEnded(); } P.GotoState('GameEnded'); } CalcEndStats(); return true; } //------------------------------------- // CanPlaySound //------------------------------------- function bool CanPlaySound( Pawn P ) { if (P.IsA('PlayerPawn') && (P.IsA('TournamentPlayer'))) return true; else return false; } //------------------------------------- // _GetItemName //------------------------------------- function string _GetItemName(Weapon W) { return caps(mid(string(W.Class), instr(string(W.Class), ".") + 1)); } //------------------------------------- // defaultproperties //------------------------------------- H?o)*$o, p0So"So @K?z66Ez?LzV-zz?LzV aDz?zV /DzaTESTta zV&zAz?LzV &aDnz?zP za#t` Rtz?LwpAx@w Ax@a ` ?,w?,x tc1e1^pF \ %%E e1j\ >E jjDE  ]/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTCTFSB <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTCTFSB expands UnrealCTFScoreboard; var font MySmallFont; var EUTGameReplicationInfo MyCRI; var PlayerReplicationInfo RedPRI[32]; var PlayerReplicationInfo BluePRI[32]; var PlayerReplicationInfo SpecPRI[32]; var FontInfo _FontInfo; var bool bTimeDown, bPlayerMoved; var byte FlagCaps, FlagGrabs, FlagAssists, FlagCovers, BaseSeals, FlagKills, Hue; var color SpecColor[5], GreenColor, WhiteColor, GoldColor, BlueColor, LightCyanColor, SilverColor, BronzeColor, CyanColor, RedColor, ShadeColor, DarkRedColor, DarkBlueColor; var float ScoreStart, PlayerStart, CenterBoxX, CenterBoxY, TextureSize, FillBoxX, FillBoxY, FillBoxX2, FillBoxY2, Step, DivW, DivS, MeterScale; var int MaxMeterLength; var localized string MapTitleString, AuthorString, RestartString, ContinueString, GameEndedString, ElapsedTimeString, RemainingTimeString, FragGoalString, TimeLimitString, PlayerString, FragsString, DeathsString, PingString, TimeString, LossString, FPHString, MapTitleQuoteString, TeamName[2]; var texture TopSpan, BotSpan, LeftSpan, RightSpan, TopLeftCorner, TopRightCorner, BotLeftCorner, BotRightCorner, BoxFillBase, BoxFillColored, FlagIcon, Meter, PlayerDivider, Country[40]; //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { Super.PostBeginPlay(); LoadTextures(); _FontInfo = FontInfo(Spawn(Class(DynamicLoadObject(class'ChallengeHUD'.default.FontInfoClass, class'Class')))); } //------------------------------------- // LoadTexturesS //------------------------------------- final function LoadTextures() { MySmallFont = Font(DynamicLoadObject("EUT_Textures.EUTSmallFont", class'Font')); TopSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_T", class'Texture')); BotSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_B", class'Texture')); LeftSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_L", class'Texture')); RightSpan = Texture(DynamicLoadObject("EUT_Textures.EUT_SPan_R", class'Texture')); BoxFillBase = Texture(DynamicLoadObject("EUT_Textures.EUT_Fill", class'Texture')); BoxFillColored = Texture(DynamicLoadObject("EUT_Textures.EUT_FillColor", class'Texture')); TopLeftCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_TL", class'Texture')); TopRightCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_TR", class'Texture')); BotLeftCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_BL", class'Texture')); BotRightCorner = Texture(DynamicLoadObject("EUT_Textures.EUT_BR", class'Texture')); PlayerDivider = Texture(DynamicLoadObject("EUT_Textures.EUT_Divider", class'Texture')); FlagIcon = Texture(DynamicLoadObject("BotPack.GreenFlag", class'Texture')); Meter = Texture(DynamicLoadObject("EUT_Textures.EUT_Meter", class'Texture')); SpecColor[0] = GreenColor; SpecColor[1] = GoldColor; SpecColor[2] = BlueColor; SpecColor[3] = RedColor; SpecColor[4] = CyanColor; MapTitleQuoteString = MapTitleQuote; } //------------------------------------- // ShowScores //------------------------------------- function ShowScores(canvas C) { local GameReplicationInfo GRI; GRI = PlayerPawn(Owner).GameReplicationInfo; MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); TeamName[0] = MyCRI.RedTeamName; TeamName[1] = MyCRI.BlueTeamName; DrawHead(C, GRI); DrawFoot(C); if (C.ClipX > 512) { DrawMain(C); StoreStatData(); } } //------------------------------------- // DrawMain //------------------------------------- function DrawMain(Canvas C) { local PlayerReplicationInfo PRI; local PlayerPawn MyPlayer; local bool bLast; local byte i, NumRed, NumBlue, NumSpec, NumTotal[2], MaxLength, MySpot; local float XL, YL, XL2, YL2, TeamLoopCount[2], DrawLength, X, Y, Mid, TempY, Length; local int TeamPing[2], TeamPacketLoss[2]; NumTotal[0] = 0; NumTotal[1] = 0; ClearStoredPRI(); for (i = 0; i < 32; i++) { PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i]; if (PRI != none) { if (PRI.bIsSpectator && (!PRI.bWaitingPlayer) && (PRI.PlayerName != "Player")) { SpecPRI[NumSpec] = PRI; NumSpec++; if (NumSpec == ArrayCount(SpecPRI)) break; } else if (PRI.Team == 0) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { RedPRI[NumRed] = PRI; NumRed++; NumTotal[0]++; TeamPing[0] += MyCRI.ClientPing[PRI.PlayerID]; TeamPacketLoss[0] += PRI.PacketLoss; if (NumRed == ArrayCount(RedPRI)) break; } } else if (PRI.Team == 1) { if (!PRI.bIsSpectator || PRI.bWaitingPlayer) { BluePRI[NumBlue] = PRI; NumBlue++; NumTotal[1]++; TeamPing[1] += MyCRI.ClientPing[PRI.PlayerID]; TeamPacketLoss[1] += PRI.PacketLoss; if (NumBlue == ArrayCount(BluePRI)) break; } } } } SortRedScores(NumRed); SortBlueScores(NumBlue); if (C.ClipX < 1100) { TextureSize = 2; Mid = 24; TopSpan.DrawScale = 0.50; BotSpan.DrawScale = 0.50; LeftSpan.DrawScale = 0.50; RightSpan.DrawScale = 0.50; TopLeftCorner.DrawScale = 0.50; TopRightCorner.DrawScale = 0.50; BotLeftCorner.DrawScale = 0.50; BotRightCorner.DrawScale = 0.50; PlayerStart = C.CliPY / 7 + TextureSize + 24; } else { TextureSize = 4; Mid = 32; TopSpan.DrawScale = 1; BotSpan.DrawScale = 1; LeftSpan.DrawScale = 1; RightSpan.DrawScale = 1; TopLeftCorner.DrawScale = 1; TopRightCorner.DrawScale = 1; BotLeftCorner.DrawScale = 1; BotRightCorner.DrawScale = 1; PlayerStart = C.CliPY / 7 + TextureSize + 32; } bPlayerMoved = false; if (NumRed >= NumBlue) MaxLength = NumRed; else MaxLength = NumBlue; Length = GetYOffset(C); DrawLength = MaxLength * Length; if (DrawLength > C.ClipY - PlayerStart) { TempY = DrawLength; MySpot = MaxLength; while (TempY > C.ClipY - PlayerStart) { MySpot = MySpot - 1; TempY = MySpot * Length; } MoveToVisible(PlayerPawn(Owner).PlayerReplicationInfo, MySpot - 1, NumRed, NumBlue); } FillBoxX = C.ClipX / 2 - Mid - TextureSize - C.ClipX / 8; FillBoxY = C.ClipY / 7 - TextureSize - C.ClipY / 10; CenterBoxY = FillBoxY / 2 + TextureSize; CenterBoxX = FillBoxX / 2 + TextureSize; DivW = FillBoxX * 0.8; DivS = DivW / 256; X = C.ClipX / 8; FillBoxX2 = FillBoxX; if (NumRed >= 0) { C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X, C.ClipY / 10); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos(C.ClipX / 2 - Mid, C.ClipY / 10); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, C.ClipY / 10); C.DrawRect(TopSpan, FillBoxX, TextureSize); C.SetPos(X, C.ClipY / 7); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos(C.ClipX / 2 - Mid, C.ClipY / 7); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, C.ClipY / 7); C.DrawRect(BotSpan, FillBoxX, TextureSize); C.SetPos(X, C.ClipY / 10 + TextureSize); C.DrawRect(LeftSpan, TextureSize, FillBoxY); C.SetPos(C.ClipX / 2 - Mid, C.ClipY / 10 + TextureSize); C.DrawRect(RightSpan, TextureSize, FillBoxY); C.DrawColor = ShadeColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize, C.ClipY / 10 + TextureSize); C.DrawRect(BoxFillBase, FillBoxX, FillBoxY); if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.DrawColor = RedColor; C.Style = ERenderStyle.STY_Normal; C.StrLen(TeamName[0], XL, YL); C.SetPos(X + CenterBoxX - (XL / 2), C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText(TeamName[0], false); C.StrLen(int(MyCRI.Teams[0].score), XL, YL); C.SetPos(C.ClipX / 2 - Mid - TextureSize - XL, C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText(int(MyCRI.Teams[0].score), false); C.Font = MySmallFont; C.DrawColor = WhiteColor; C.StrLen("#######", XL, YL); C.SetPos(X + (TextureSize*2), C.ClipY / 10 + CenterBoxY - (YL)); C.DrawText("Ping:", false); C.SetPos(X + (TextureSize*2) + XL, C.ClipY / 10 + CenterBoxY - (YL)); C.DrawText(TeamPing[0] / NumTotal[0], false); C.SetPos(X + (TextureSize*2), C.ClipY / 10 + CenterBoxY); C.DrawText("Loss:", false); C.SetPos(X + (TextureSize*2) + XL, C.ClipY / 10 + CenterBoxY); C.DrawText(TeamPacketLoss[0] / NumTotal[0], false); C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X, PlayerStart); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos(C.ClipX / 2 - Mid, PlayerStart); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, PlayerStart); C.DrawRect(TopSpan, FillBoxX2, TextureSize); C.SetPos(X, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos(C.ClipX / 2 - Mid, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotSpan, FillBoxX2, TextureSize); C.SetPos(X, PlayerStart + TextureSize); C.DrawRect(LeftSpan, TextureSize, DrawLength); C.SetPos(C.ClipX / 2 - Mid, PlayerStart + TextureSize); C.DrawRect(RightSpan, TextureSize, DrawLength); C.DrawColor = DarkRedColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize, PlayerStart + TextureSize); C.DrawRect(BoxFillBase, FillBoxX, DrawLength); C.SetPos(X + TextureSize, PlayerStart + TextureSize); C.Style = ERenderStyle.STY_Translucent; C.DrawRect(BoxFillColored, FillBoxX, DrawLength); } for (i = 0; i < NumRed; i++) { Y = PlayerStart + (TextureSize*4) + (GetYOffset(C) * TeamLoopCount[0]); if (i == 0) { Y = PlayerStart + (TextureSize*4); bLast = false; } if (i == NumRed - 1) bLast = true; DrawPlayerData(C, RedPRI[i], X, Y, bLast); TeamLoopCount[0] += 1; } if (NumBlue >= 0) { X = C.ClipX / 2 + Mid; C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X, C.ClipY / 10); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize + FillBoxX, C.ClipY / 10); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, C.ClipY / 10); C.DrawRect(TopSpan, FillBoxX, TextureSize); C.SetPos(X, C.ClipY / 7); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize + FillBoxX, C.ClipY / 7); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, C.ClipY / 7); C.DrawRect(BotSpan, FillBoxX, TextureSize); C.SetPos(X, C.ClipY / 10 + TextureSize); C.DrawRect(LeftSpan, TextureSize, FillBoxY); C.SetPos(X + TextureSize + FillBoxX, C.ClipY / 10 + TextureSize); C.DrawRect(RightSpan, TextureSize, FillBoxY); C.DrawColor = ShadeColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize, C.ClipY / 10 + TextureSize); C.DrawRect(BoxFillBase, FillBoxX, FillBoxY); C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.DrawColor = BlueColor; C.Style = ERenderStyle.STY_Normal; C.StrLen(TeamName[1], XL, YL); C.SetPos(X + CenterBoxX - (XL / 2), C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText(TeamName[1], false); C.StrLen(int(MyCRI.Teams[1].score), XL, YL); C.SetPos(X + FillBoxX - XL, C.ClipY / 10 + CenterBoxY - (YL / 2)); C.DrawText(int(MyCRI.Teams[1].score), false); C.Font = MySmallFont; C.DrawColor = WhiteColor; C.StrLen("#######", XL, YL); C.SetPos(X + (TextureSize*2), C.ClipY / 10 + CenterBoxY - (YL)); C.DrawText("Ping:", false); C.SetPos(X + (TextureSize*2) + XL, C.ClipY / 10 + CenterBoxY - (YL)); C.DrawText(TeamPing[1] / NumTotal[1], false); C.SetPos(X + (TextureSize*2), C.ClipY / 10 + CenterBoxY); C.DrawText("Loss:", false); C.SetPos(X + (TextureSize*2) + XL, C.ClipY / 10 + CenterBoxY); C.DrawText(TeamPacketLoss[1] / NumTotal[1], false); C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(X, PlayerStart); C.DrawRect(TopLeftCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize + FillBoxX, PlayerStart); C.DrawRect(TopRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, PlayerStart); C.DrawRect(TopSpan, FillBoxX2, TextureSize); C.SetPos(X, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotLeftCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize + FillBoxX, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotRightCorner, TextureSize, TextureSize); C.SetPos(X + TextureSize, PlayerStart + TextureSize + DrawLength); C.DrawRect(BotSpan, FillBoxX2, TextureSize); C.SetPos(X, PlayerStart + TextureSize); C.DrawRect(LeftSpan, TextureSize, DrawLength); C.SetPos(X + TextureSize + FillBoxX, PlayerStart + TextureSize); C.DrawRect(RightSpan, TextureSize, DrawLength); C.DrawColor = DarkBlueColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(X + TextureSize, PlayerStart + TextureSize); C.DrawRect(BoxFillBase, FillBoxX, DrawLength); C.SetPos(X + TextureSize, PlayerStart + TextureSize); C.Style = ERenderStyle.STY_Translucent; C.DrawRect(BoxFillColored, FillBoxX, DrawLength); } for (i = 0; i < NumBlue; i++) { Y = PlayerStart + (TextureSize*4) + (GetYOffset(C) * TeamLoopCount[1]); if (i == 0) { Y = PlayerStart + (TextureSize*4); bLast = false; } if (i == NumBlue - 1) bLast = true; DrawPlayerData(C, BluePRI[i], X, Y, bLast); TeamLoopCount[1] += 1; } for (i = 0; i < NumSpec; i++) { C.Font = C.smallfont; C.StrLen(SpecPRI[i].PlayerName, XL, YL); Y = C.ClipY / 2 + YL +(YL * i); X = C.ClipX - XL; if ( i == 0 ) Y = C.ClipY / 2 + YL; DrawSpectators(C, SpecPRI[i], X, Y, i); } C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Normal; C.Font = C.smallfont; C.StrLen("Spectators", XL, YL); C.SetPos(C.ClipX - XL, C.ClipY / 2); C.DrawText("Spectators", false); } //------------------------------------- // DrawPlayerData //------------------------------------- function DrawPlayerData(Canvas C, PlayerReplicationInfo PRI, float X, float Y, bool bLast) { local float XL, YL, XL2, YL2, XL3, YL3, PY, MX, MY, ZX, ZY, FX; local bool bAdmin; local PlayerPawn MyPlayer; local int MeterLen, HueShift, eff, Time, pid; local Font CanvasFont; local color CanvasColor; local string Location; bAdmin = PRI.bAdmin; MyPlayer = PlayerPawn(Owner); pid = PRI.PlayerID; C.Style = ERenderStyle.STY_Normal; if (PRI.Team == MyPlayer.PlayerReplicationInfo.Team) { if (PRI.PlayerLocation != none) Location = PRI.PlayerLocation.LocationName; else if (PRI.PlayerZone != None) Location = PRI.PlayerZone.ZoneName; else Location = ""; if (Location != "") Location = "Location:"@Location; } if (PRI.HasFlag != none) { C.Style = ERenderStyle.STY_Normal; C.SetPos(X - 32,Y); if (PRI.HasFlag.IsA('EUTReadyFlag')) { C.DrawColor = GreenColor; C.DrawIcon(Texture'Botpack.Icons.GreenFlag',1.00); } else { switch (PRI.Team) { case 0: C.DrawColor = BlueColor; C.DrawIcon(Texture'Botpack.Icons.BlueFlag',1.00); break; case 1: C.DrawColor = RedColor; C.DrawIcon(Texture'Botpack.Icons.RedFlag',1.00); break; } } } if (PRI.Team == 0) C.DrawColor = RedColor; else C.Drawcolor = BlueColor; if (PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName) C.DrawColor = GoldColor; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); CanvasFont = C.Font; CanvasColor = C.DrawColor; FX = X + (TextureSize * 2); C.StrLen(PRI.PlayerName, XL, PY); if (MyCRI.bIpToCountry) { if (caps(MyCRI.IPCTexture[pid]) == "NONE" && (!MyPlayer.IsA('Bot'))) MyCRI.IPCTexture[pid] = "us"; if (MyCRI.IPCTexture[pid] != "" && caps(MyCRI.IPCTexture[pid]) != "NONE") { if (Country[pid] == none) Country[pid] = Texture(DynamicLoadObject(MyCRI.IpToCountryTexturePackage$"."$MyCRI.IPCTexture[pid], class'Texture')); else { if (_GetTextureName(string(Country[pid])) != caps(MyCRI.IPCTexture[pid])) Country[pid] = Texture(DynamicLoadObject(MyCRI.IpToCountryTexturePackage$"."$MyCRI.IPCTexture[pid], class'Texture')); C.SetPos(FX,Y); C.bNoSmooth = false; C.DrawColor = WhiteColor; C.DrawIcon(Country[pid],1.0); C.bNoSmooth = true; FX = FX + Country[pid].USize + (Step*2); } } } C.DrawColor = CanvasColor; C.SetPos(FX,Y); C.DrawText(PRI.PlayerName, false); if (bAdmin) { C.Font = MySmallFont; C.StrLen("admin", XL3, YL3); C.SetPos(X - XL3 - TextureSize, Y); C.DrawText("admin", false); C.Font = CanvasFont; } else if (!bAdmin && bPlayerMoved && PRI.PlayerName == MyPlayer.PlayerReplicationInfo.PlayerName) { C.Font = MySmallFont; C.StrLen("more>>", XL3, YL3); C.SetPos(X - XL3 - TextureSize, Y); C.DrawText("more>>", false); C.Font = CanvasFont; } C.StrLen(string(int(PRI.Score)), XL, YL); C.SetPos(X + FillBoxX - XL, Y); C.DrawText(int(PRI.Score), False); C.StrLen(string(MyCRI.TotalKills[PRI.PlayerID])$"/", XL2, YL); C.SetPos(X + FillBoxX - XL - XL2, Y); C.DrawText(MyCRI.TotalKills[PRI.PlayerID]$"/",false); if (C.ClipX > 512) { C.DrawColor = WhiteColor; C.Font = _FontInfo.GetSmallestFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallestFont(900); if (C.ClipX < 900) C.Font = MySmallFont; C.StrLen("#########", XL2, YL2); //Align Numbers MaxMeterLength = FillBoxX / 2 - XL2 - (TextureSize * 4) - (Step * 2); MY = YL2 / 4; ZX = X + (TextureSize*2); MX = ZX + XL2 + (Step * 2); ZY = Y + PY; MeterScale = YL2 / 4; if (MyCRI.IStats1[PRI.PlayerID].FlagCaps != 3) { C.StrLen("Caps:#####", XL, YL); C.SetPos(ZX, ZY); C.DrawText("Caps:", false); C.SetPos(ZX + XL2, ZY); C.DrawText(MyCRI.IStats1[PRI.PlayerID].FlagCaps, false); if (MyCRI.IStats1[PRI.PlayerID].FlagCaps > 0) { HueShift = Hue * loge(MyCRI.IStats1[PRI.PlayerID].FlagCaps); if (HueShift > 255) HueShift = 255; if (MyCRI.IStats1[PRI.PlayerID].FlagCaps > 3) C.DrawColor = GoldColor; if (MyCRI.IStats1[PRI.PlayerID].FlagCaps < 3) C.DrawColor = GetMeterColor(HueShift); MeterLen = GetMeterLength(MyCRI.IStats1[PRI.PlayerID].FlagCaps, FlagCaps); C.SetPos(MX, ZY + MeterScale); C.DrawRect(Meter, MeterLen, MY); C.DrawColor = WhiteColor; } } if (MyCRI.IStats1[PRI.PlayerID].FlagCaps == 3) { C.StrLen("HatTrick ", XL, YL); C.SetPos(X + (TextureSize*2), ZY); C.DrawText("HatTrick ", false); C.DrawColor = GoldColor; MeterLen = GetMeterLength(MyCRI.IStats1[PRI.PlayerID].FlagCaps, FlagCaps); C.SetPos(MX, ZY + MeterScale); C.DrawRect(Meter, MeterLen, MY); C.DrawColor = WhiteColor; } C.StrLen("Grabs:####", XL, YL); C.SetPos(ZX, ZY + YL2); C.DrawText("Grabs:", false); C.SetPos(ZX + XL2, ZY + YL2); C.DrawText(MyCRI.IStats1[PRI.PlayerID].FlagGrabs, false); if ( MyCRI.IStats1[PRI.PlayerID].FlagGrabs > 0 ) { HueShift = Hue * loge(MyCRI.IStats1[PRI.PlayerID].FlagGrabs); if(HueShift > 255) HueShift = 255; C.DrawColor = GetMeterColor(HueShift); MeterLen = GetMeterLength(MyCRI.IStats1[PRI.PlayerID].FlagGrabs, FlagGrabs); C.SetPos(MX, ZY + YL2 + MeterScale); C.DrawRect(Meter, MeterLen, MY); C.DrawColor = WhiteColor; } C.StrLen("Assist:###", XL, YL); C.SetPos(ZX, ZY + (YL2 * 2)); C.DrawText("Assist:", false); C.SetPos(ZX + XL2, ZY + (YL2 * 2)); C.DrawText(MyCRI.IStats1[PRI.PlayerID].FlagAssists, false); if ( MyCRI.IStats1[PRI.PlayerID].FlagAssists > 0 ) { HueShift = Hue * loge(MyCRI.IStats1[PRI.PlayerID].FlagAssists); if (HueShift > 255) HueShift = 255; C.DrawColor = GetMeterColor(HueShift); MeterLen = GetMeterLength(MyCRI.IStats1[PRI.PlayerID].FlagAssists, FlagAssists); C.SetPos(MX, ZY + (YL2 * 2) + MeterScale); C.DrawRect(Meter, MeterLen, MY); C.DrawColor = WhiteColor; } ZX = X + (TextureSize * 2) + (FillBoxX / 2); MX = ZX + XL2 + (Step * 2); C.StrLen("Covers: ##", XL, YL); C.SetPos(ZX, ZY); C.DrawText("Covers:", false); C.SetPos(ZX + XL2, ZY); C.DrawText(MyCRI.IStats3[PRI.PlayerID].FlagCovers, false); if ( MyCRI.IStats3[PRI.PlayerID].FlagCovers > 0 ) { HueShift = Hue * loge(MyCRI.IStats3[PRI.PlayerID].FlagCovers); if (HueShift > 255) HueShift = 255; C.DrawColor = GetMeterColor(HueShift); MeterLen = GetMeterLength(MyCRI.IStats3[PRI.PlayerID].FlagCovers, FlagCovers); C.SetPos(MX, ZY + MeterScale); C.DrawRect(Meter, MeterLen, MY); C.DrawColor = WhiteColor; } C.StrLen("Seals: ##", XL, YL); C.SetPos(ZX, ZY + YL2); C.DrawText("Seals:", false); C.SetPos(ZX + XL2, ZY + YL2); C.DrawText(MyCRI.IStats1[PRI.PlayerID].BaseSeals, false); if ( MyCRI.IStats1[PRI.PlayerID].BaseSeals > 0 ) { HueShift = Hue * loge(MyCRI.IStats1[PRI.PlayerID].BaseSeals); if (HueShift > 255) HueShift = 255; C.DrawColor = GetMeterColor(HueShift); MeterLen = GetMeterLength(MyCRI.IStats1[PRI.PlayerID].BaseSeals, BaseSeals); C.SetPos(MX, ZY + YL2 + MeterScale); C.DrawRect(Meter, MeterLen, MY); C.DrawColor = WhiteColor; } C.StrLen("FlgKls: ##", XL, YL); C.SetPos(ZX, ZY + (YL2 * 2)); C.DrawText("FlgKls:", false); C.SetPos(ZX + XL2, ZY + (YL2 * 2)); C.DrawText(MyCRI.IStats2[PRI.PlayerID].FlagKills, false); if (MyCRI.IStats2[PRI.PlayerID].FlagKills > 0) { HueShift = Hue * loge(MyCRI.IStats2[PRI.PlayerID].FlagKills); if (HueShift > 255) HueShift = 255; C.DrawColor = GetMeterColor(HueShift); MeterLen = GetMeterLength(MyCRI.IStats2[PRI.PlayerID].FlagKills, FlagKills); C.SetPos(MX, ZY + (YL2 * 2) + MeterScale); C.DrawRect(Meter, MeterLen, MY); C.DrawColor = WhiteColor; } if (!bLast) { C.DrawColor = SilverColor; C.Style = ERenderStyle.STY_Modulated; C.SetPos(ZX - (DivW / 2), ZY + (YL2 * 4)); C.DrawIcon(PlayerDivider, DivS); C.DrawColor = GoldColor; C.Style = ERenderStyle.STY_Translucent; C.SetPos(ZX - (DivW / 2), ZY + (YL2 * 4)); C.DrawIcon(PlayerDivider, DivS); } Time = Max(1, (Level.TimeSeconds + MyPlayer.PlayerReplicationInfo.StartTime - PRI.StartTime) / 60); C.DrawColor = LightCyanColor; C.Style = ERenderStyle.STY_Normal; C.Font = MySmallFont; if (C.ClipX < 700) C.Font = _FontInfo.GetStaticAReallySmallFont(900); if (MyCRI.bScoreBoardEff) { eff = Clamp(int((float(MyCRI.TotalKills[PRI.PlayerID]) / float(MyCRI.TotalKills[PRI.PlayerID] + MyCRI.TotalDeaths[PRI.PlayerID])) * 100), 0, 100); C.StrLen("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss@"Eff:"@eff, XL, YL); C.SetPos(X + FillBoxX - XL, ZY + (YL2 * 4) - YL); C.DrawText("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss@"Eff:"@eff, false); } else { C.StrLen("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss, XL, YL); C.SetPos(X + FillBoxX - XL, ZY + (YL2 * 4) - YL); C.DrawText("Time:"@Time@"Ping:"@MyCRI.ClientPing[PRI.PlayerID]@"Loss:"@PRI.PacketLoss, false); } C.DrawColor = LightCyanColor; C.SetPos(X + (TextureSize * 2), ZY + (YL2 * 4) - YL); C.DrawText(Location, false); } } //------------------------------------- // DrawHead //------------------------------------- function DrawHead(canvas C, GameReplicationInfo GRI) { local float XL, YL, XL2, YL2; local font CanvasFont; C.DrawColor = WhiteColor; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.bCenter = True; C.StrLen("Test", XL, YL); ScoreStart = 58.0 / 768.0 * C.ClipY - 50; CanvasFont = C.Font; if (GRI.GameEndedComments != "") { C.DrawColor = GoldColor; C.SetPos(0, 0 + YL); C.DrawText(GRI.GameEndedComments, True); } else { C.SetPos(0, ScoreStart); DrawEndGame(C); } C.bCenter = False; C.Font = CanvasFont; } //------------------------------------- // DrawEndGam //------------------------------------- function DrawEndGame(Canvas C) { local TournamentGameReplicationInfo TGRI; local float XL, YL, YL2; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (TGRI == None) return; C.SetPos(0, 0); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.DrawText("Smart"@TGRI.GameName); C.StrLen("Test", XL, YL); C.SetPos(0, 0 + YL); YL2 = C.CurY - YL; if (TGRI.GoalTeamScore > 0) { C.SetPos(0, 0 + YL); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.DrawText(TGRI.GoalTeamScore$" Caps or "$TGRI.TimeLimit@"Min"); C.StrLen("Test", XL, YL); C.SetPos(0, C.CurY - YL); } } //------------------------------------- // DrawFoot //------------------------------------- function DrawFoot(canvas C) { local byte Hours, Minutes, Seconds; local float XL, YL; local PlayerPawn MyPlayer; C.bCenter = true; C.Font = _FontInfo.GetSmallFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticSmallestFont(C.ClipX); C.StrLen("Test", XL, YL); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; MyPlayer = PlayerPawn(Owner); C.SetPos(0, C.ClipY - 2 * YL * 1.5); if ((Level.NetMode == NM_Standalone ) && Level.Game.IsA('DeathMatchPlus')) { if (DeathMatchPlus(Level.Game).bRatedGame) C.DrawText(DeathMatchPlus(Level.Game).RatedGameLadderObj.SkillText@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MapTitleQuoteString$Level.Title$MapTitleQuoteString, true); else if (DeathMatchPlus(Level.Game).bNoviceMode) C.DrawText(class'ChallengeBotInfo'.default.Skills[Level.Game.Difficulty]@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MapTitleQuoteString$Level.Title$MapTitleQuoteString, true); else C.DrawText(class'ChallengeBotInfo'.default.Skills[Level.Game.Difficulty + 4]@MyPlayer.GameReplicationInfo.GameName@MapTitleString@MapTitleQuoteString$Level.Title$MapTitleQuoteString, true); } else { C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.SetPos(0, C.ClipY - 2 * YL * 1.5); C.DrawText(MyPlayer.GameReplicationInfo.GameName@MapTitleString@Level.Title, true); C.DrawColor.R = 255; C.DrawColor.G = 200; C.DrawColor.B = 100; C.SetPos(0, C.ClipY - 2 * YL); C.DrawText(MyPlayer.GameReplicationInfo.ServerName$" - "$GetTime(), true); C.SetPos(0, C.ClipY - YL); } if (bTimeDown || (MyPlayer.GameReplicationInfo.RemainingTime > 0)) { bTimeDown = true; if (MyPlayer.GameReplicationInfo.RemainingTime <= 0) C.DrawText(RemainingTimeString@"00:00", true); else { Minutes = MyPlayer.GameReplicationInfo.RemainingTime / 60; Seconds = MyPlayer.GameReplicationInfo.RemainingTime % 60; C.DrawText(RemainingTimeString@TwoDigitString(Minutes)$":"$TwoDigitString(Seconds), true); } } else { Seconds = MyPlayer.GameReplicationInfo.ElapsedTime; Minutes = Seconds / 60; Hours = Minutes / 60; Seconds = Seconds - (Minutes * 60); Minutes = Minutes - (Hours * 60); C.DrawText(ElapsedTimeString@TwoDigitString(Hours)$":"$TwoDigitString(Minutes)$":"$TwoDigitString(Seconds), true); } if (MyPlayer.GameReplicationInfo.GameEndedComments != "") { C.bCenter = true; C.StrLen("Test", XL, YL); C.SetPos(0, C.ClipY - Min(YL*6, C.ClipY * 0.1)); C.DrawColor = GreenColor; if (Level.NetMode == NM_Standalone) C.DrawText(GameEndedString@ContinueString, true); else C.DrawText(GameEndedString, true); } else if ((MyPlayer != None) && (MyPlayer.Health <= 0)) { C.bCenter = true; C.StrLen("Test", XL, YL); C.SetPos(0, C.ClipY - Min(YL*6, C.ClipY * 0.1)); C.DrawColor = SilverColor; C.DrawText(RestartString, true); } C.bCenter = false; C.Font = C.smallfont; C.DrawColor.R = 120; C.DrawColor.G = 120; C.DrawColor.B = 120; C.Setpos(C.ClipX - 80, C.ClipY - 20); C.DrawText("AutoSS:"@MyCRI.bAutoShot); } //------------------------------------- // SortRedScores //------------------------------------- function SortRedScores(byte z) { local byte i, j, Max; local PlayerReplicationInfo PRI; for (i = 0; i < z - 1; i++) { Max = i; for ( j = i + 1; j < z; j++ ) { if (RedPRI[j].Score > RedPRI[Max].Score) Max = j; else if ((RedPRI[j].Score == RedPRI[Max].Score) && (RedPRI[j].Deaths < RedPRI[Max].Deaths)) Max = j; else if ((RedPRI[j].Score == RedPRI[Max].Score) && (RedPRI[j].Deaths == RedPRI[Max].Deaths) && (RedPRI[j].PlayerID < RedPRI[Max].Score)) Max = j; } PRI = RedPRI[Max]; RedPRI[Max] = RedPRI[i]; RedPRI[i] = PRI; } } //------------------------------------- // SortBlueScores //------------------------------------- function SortBlueScores(byte z) { local byte i, j, Max; local PlayerReplicationInfo PRI; for ( i = 0; i < z - 1; i++ ) { Max = i; for ( j = i + 1; j < z; j++ ) { if (BluePRI[j].Score > BluePRI[Max].Score) Max = j; else if ((BluePRI[j].Score == BluePRI[Max].Score) && (BluePRI[j].Deaths < BluePRI[Max].Deaths)) Max = j; else if ((BluePRI[j].Score == BluePRI[Max].Score) && (BluePRI[j].Deaths == BluePRI[Max].Deaths) &&(BluePRI[j].PlayerID < BluePRI[Max].Score)) Max = j; } PRI = BluePRI[Max]; BluePRI[Max] = BluePRI[i]; BluePRI[i] = PRI; } } //------------------------------------- // GetTime //------------------------------------- simulated function string GetTime() { local string amPm, mon, day, min; local byte hour; local PlayerPawn MyPlayer; MyPlayer = PlayerPawn(Owner); min = string(MyPlayer.level.minute); if (int(min) < 10) min = "0" $ min; if (MyPlayer.level.hour >= 12) amPm = "PM"; else amPm = "AM"; if (MyPlayer.level.hour > 12) hour = MyPlayer.level.hour - 12; else if (MyPlayer.level.hour == 0) hour = 12; else hour = MyPlayer.level.hour; switch (MyPlayer.level.month) { case 1: mon = "Jan"; break; case 2: mon = "Feb"; break; case 3: mon = "Mar"; break; case 4: mon = "Apr"; break; case 5: mon = "May"; break; case 6: mon = "Jun"; break; case 7: mon = "Jul"; break; case 8: mon = "Aug"; break; case 9: mon = "Sep"; break; case 10: mon = "Oct"; break; case 11: mon = "Nov"; break; case 12: mon = "Dec"; break; } switch (MyPlayer.level.dayOfWeek) { case 0: day = "Sunday"; break; case 1: day = "Monday"; break; case 2: day = "Tuesday"; break; case 3: day = "Wednesday"; break; case 4: day = "Thursday"; break; case 5: day = "Friday"; break; case 6: day = "Saturday"; break; } return hour $ ":" $ min @ amPM $ " , " $ day $ ", " $ mon @ MyPlayer.level.day $ ", " $ MyPlayer.level.year; } //------------------------------------- // TwoDigitString //------------------------------------- function string TwoDigitString(int i) { if (i < 10) return "0"$i; else return string(i); } //------------------------------------- // GetYOffset //------------------------------------- function float GetYOffset(Canvas C) { local float XL, YL, YL2; local float buf, div; if (C.ClipX > 1100) C.Font = _FontInfo.GetMediumFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetStaticBigFont(900); if (C.ClipX < 900) C.Font = _FontInfo.GetStaticBigFont(700); C.StrLen("TEST",XL,YL); C.Font = _FontInfo.GetSmallestFont(C.ClipX); if (C.ClipX < 1100) C.Font = _FontInfo.GetSmallestFont(900); if (C.ClipX < 900) C.Font = MySmallFont; C.StrLen("#",XL,YL2); Step = XL; if (C.ClipX > 1100) { buf = 15; div = 4; } else { buf = 10; div = 2; } return YL + ( YL2 * 3 ) + ( buf * 2 ) + div; } //------------------------------------- // StoreStatData //------------------------------------- simulated final function StoreStatData() { local byte i; local byte a, b, c, d, e, f; for (i = 0; i < 32; i++) { a = MyCRI.IStats1[i].FlagCaps + a; b = MyCRI.IStats1[i].FlagGrabs + b; c = MyCRI.IStats1[i].FlagAssists + c; d = MyCRI.IStats3[i].FlagCovers + d; e = MyCRI.IStats1[i].BaseSeals + e; f = MyCRI.IStats2[i].FlagKills + f; } FlagCaps = a; FlagGrabs = b; FlagAssists = c; FlagCovers = d; BaseSeals = e; FlagKills = f; } //------------------------------------- // GetMeterLength //------------------------------------- simulated function int GetMeterLength(int i, int NumTotal) { local int rv; if (NumTotal == 0) return 0; rv = ( i * MaxMeterLength ) / NumTotal; if (rv > MaxMeterLength) return MaxMeterLength; else return rv; } //------------------------------------- // DrawSpectators //------------------------------------- function DrawSpectators(Canvas C, PlayerReplicationInfo PRI, float X, float Y, int cid) { if (cid > 5) cid = cid - 6; C.DrawColor = SpecColor[cid]; C.Style = ERenderStyle.STY_Normal; C.Font = C.smallfont; C.SetPos(X,Y); C.DrawText(PRI.PlayerName,false); } //------------------------------------- // ClearStoredPRI //------------------------------------- function ClearStoredPRI() { local int i; for (i = 0; i < ArrayCount(RedPRI); i++) RedPRI[i] = None; for (i = 0; i < ArrayCount(BluePRI); i++) BluePRI[i] = None; for (i = 0; i < ArrayCount(SpecPRI); i++) SpecPRI[i] = None; } //------------------------------------- // GetMeterColor //------------------------------------- function color GetMeterColor(int HueShift) { local color rv; rv = WhiteColor; rv.R = WhiteColor.R - HueShift; rv.B = WhiteColor.R - HueShift; return rv; } //------------------------------------- // _GetTextureName //------------------------------------- function string _GetTextureName(string T) { return caps(mid(T, instr(T, ".") + 1)); } //------------------------------------- // MoveToVisible //------------------------------------- function MoveToVisible(PlayerReplicationInfo MyPRI, byte MySpot, byte Red, byte Blue) { local int i; local PlayerReplicationInfo SwitchPRI; switch (MyPRI.Team) { case 0: for (i=0; i MySpot) { SwitchPRI = RedPRI[MySpot]; RedPRI[MySpot] = MyPRI; RedPRI[i] = SwitchPRI; bPlayerMoved = true; break; } } break; case 1: for (i=0; i MySpot) { SwitchPRI = BluePRI[MySpot]; BluePRI[MySpot] = MyPRI; BluePRI[i] = SwitchPRI; bPlayerMoved = true; break; } } break; } } //------------------------------------- // defaultproperties //------------------------------------- T/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTCTFRulesWindow <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTCTFRulesWindow extends UTTeamRCWindow; //------------------------------------- // defaultproperties //------------------------------------- E F?81} .EUT_Textures.EUT_Preview1 z .EUT_Textures.EUT_Preview2 y .EUT_Textures.EUT_Preview3 G .EUT_Textures.EUT_Preview4 v .EUT_Textures.EUT_Preview5 i .EUT_Textures.EUT_PreviewDot 6| 6IQ6| 6IQ6| 6IQSC Y}  ?Yz  @Yy  @@YG  @Yv  YG   S?f1~5  f1n1p1wD @eD?,?w,z D?,?eED?,,s1D?E,t1E,dL ?w?L ?eJ ?w?J ?z H ?w?H ?ez?w?z?z zAv ?w?v ?er ?w?r ?z k ?w?k ?eh ?w?h ?z j ?w?j ?ef ?w?f ?z y ?w?y ?eQ ?w?Q ?z S?E?S BS?eX?w?X?eXA[?w?[?z [HB[?w?[?e[AY?w?Y?z YHBe?w?e?eeAr?E?r Br?en!?,?,?n?enA O?Xn{l,ll,XllX$XXXm1r1Xal1( X?~sY~ $h%h:j1zh{~h:Yb:Y{:Y{~h{b-k'hW T$h%Qh:i1Gzh}~h:Yb:Y}:Y}~h}b-k'QhW  @_?S qřS ~S .& ~/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTCTFRulesClient <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTCTFRulesClient extends UWindowScrollingDialogClient; //------------------------------------- // Created //------------------------------------- function Created() { ClientClass = class'EUTSource.EUTCTFRulesWindow'; FixedAreaClass = None; Super.Created(); } //------------------------------------- // defaultproperties //------------------------------------- Y?\=m Z?h$QM/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTCTFHud <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTCTFHud extends ChallengeCTFHUD; var CTFReplicationInfo GameRI; var EUTGameReplicationInfo MyCRI; var DeathMatchPlus DMP; var EUTHudSettings HudSettings; var CTFFlag FlagClass; var Pawn P; var PlayerReplicationInfo PRI; var private PlayerReplicationInfo StoredPRI[32]; var private PlayerReplicationInfo MyPRI; var private GameReplicationInfo StoredGRI; var EUTStatInfo StatInfo; var EUTHudHelper HudHelper; var private PlayerPawn MyPlayer; var font MySmallFont; var class StatInfoClass; var class HudHelperClass; var class EUTDemoEnhancerClass; var bool bWarmupSwitch, bStartMessage, bUdemo; var byte RedTeamSize, BlueTeamSize, RequestHitsounds; var color BlueColor, RedColor; var float PreBaseEye; var string RedFlagCarrierLocation, BlueFlagCarrierLocation, StartMessage, LastEventMessage; var texture TimeBack, PingBack, TeamBack, AccuracyBack, AccuracyBackRifle, AccuracyBackShock, EUTElements, Badge; //------------------------------------- // PostBeginPlay //------------------------------------- simulated function PostBeginPlay() { SetTimer(1.0, True); if (ServerInfo == none) ServerInfo = Spawn(ServerInfoClass, Owner); if (StatInfo == none) StatInfo = Spawn(StatInfoClass, Owner); if (HudHelper == none) HudHelper = Spawn(HudHelperClass,Owner); if (MyFonts == none) MyFonts = FontInfo(Spawn(Class(DynamicLoadObject(FontInfoClass, class'Class')))); InitializeHudSettings(); LoadTextures(); SetDefaults(0); if (Level.NetMode != NM_Standalone) MOTDFadeOutTime = 350; FaceAreaOffset = -64; if ((PlayerPawn(Owner).GameReplicationInfo != None) && (PlayerPawn(Owner).GameReplicationInfo.RemainingTime > 0)) TimeMessageClass = class(DynamicLoadObject("BotPack.TimeMessage", class'Class')); MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); } //------------------------------------- // InitializeHudSettings //------------------------------------- simulated final function InitializeHudSettings() { if (HudSettings == none) { HudSettings = EUTHudSettings(Spawn(Class(DynamicLoadObject("EUTSource.EUTHudSettings",class'class')))); if (HudSettings != none) { HudSettings.MyPlayer = PlayerPawn(Owner); HudSettings.HS = HudSettings; HudSettings.SaveConfig(); } } } //------------------------------------- // LoadTextures //------------------------------------- simulated final function LoadTextures() { TimeBack = texture(DynamicLoadObject("EUT_Textures.Timeback", class'Texture')); PingBack = texture(DynamicLoadObject("EUT_Textures.PingDisplay", class'Texture')); TeamBack = texture(DynamicLoadObject("EUT_Textures.TeamBack", class'Texture')); AccuracyBack = Texture(DynamicLoadObject("EUT_Textures.EUTAccBack", class'Texture')); AccuracyBackRifle = Texture(DynamicLoadObject("EUT_Textures.EUTAccBackRifle", class'Texture')); AccuracyBackShock = Texture(DynamicLoadObject("EUT_Textures.EUTAccBackShock", class'Texture')); EUTElements = Texture(DynamicLoadObject("EUT_Textures.EUT_Elements", class'Texture')); Badge = Texture(DynamicLoadObject("EUT_Textures.EUT_Badge", class'Texture')); MySmallFont = Font(DynamicLoadObject("EUT_Textures.EUTSmallFont", class'Font')); } //------------------------------------- // SetDefaults //------------------------------------- simulated final function SetDefaults(byte c) { switch (c) { case 0: HudHelper.ResetWeaponData(); break; case 1: HudHelper.ResetWeaponData(); HudHelper.StageCount = 1; HudHelper.WeaponDrawOffset = 0; if(MyCRI != none) MyCRI.MouseYSetting = 100; break; } } //------------------------------------- // Timer //------------------------------------- function Timer() { super(ChallengeHUD).Timer(); if ((PlayerOwner == None) || (PawnOwner == None)) return; if (PlayerPawn(Owner).PlayerReplicationInfo == none) return; if (MyCRI == none) { MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); MyCRI.MouseYSetting = 100; } else { MyCRI.ClientCrosshair = Crosshair; MyCRI.ClientCrosshairTexture = CrossHairTextures[Crosshair]; if (!HudHelper.bCheckKeyBindings) HudHelper.CheckKeyBindings(); MyCRI.MouseYRefCount = HudHelper.MouseYCount; MyCRI.RequestHitsounds = RequestHitsounds; MyCRI.WeaponAccuracy.Enforcer = HudHelper.Acc.Enforcer; MyCRI.WeaponAccuracy.BioGun = HudHelper.Acc.BioGun; MyCRI.WeaponAccuracy.ShockRifle = HudHelper.Acc.ShockRifle; MyCRI.WeaponAccuracy.PulseGun = HudHelper.Acc.PulseGun; MyCRI.WeaponAccuracy.Ripper = HudHelper.Acc.Ripper; MyCRI.WeaponAccuracy.MiniGun = HudHelper.Acc.MiniGun; MyCRI.WeaponAccuracy.FlakCannon = HudHelper.Acc.FlakGun; MyCRI.WeaponAccuracy.EightBall = HudHelper.Acc.EightBall; MyCRI.WeaponAccuracy.SniperRifle = HudHelper.Acc.SniperRifle; MyCRI.WeaponAccuracy.SuperShockRifle = HudHelper.Acc.SuperShockRifle; MyCRI.WeaponAccuracy.CustomWeapon = HudHelper.Acc.CustomWeapon; MyCRI.bJumpBoots = HudSettings.bJumpBoots; if (!HudHelper.bSetMessageDefaults) HudHelper.SetMessageDefaults(0); if (!bWarmupSwitch && MyCRI.bWarmupSwitch) { bWarmupSwitch = true; SetDefaults(1); if (!HudHelper.bCheckForAutoRecorder && MyCRI.bTournament && MyCRI.bMatchStarted) HudHelper.CheckForAutoRecorder(PlayerPawn(Owner), HudSettings.AutoRecorder); } if (!HudHelper.bCheckForAutoRecorder && !MyCRI.bTournament && MyCRI.bMatchStarted) HudHelper.CheckForAutoRecorder(PlayerPawn(Owner), HudSettings.AutoRecorder); MyCRI.TextureCounter++; if (MyCRI.TextureCounter == 2) { MyCRI.TextureCounter = 0; switch (MyCRI.TextureSwitch) { case 0: MyCRI.TextureSwitch = 1; break; case 1: MyCRI.TextureSwitch = 0; break; } } if (MyCRI.PlayWaitMessage[PlayerPawn(Owner).PlayerReplicationInfo.PlayerID] == 1) PlayerOwner.ReceiveLocalizedMessage(class'EUTHudMessages', 17); } GameRI = CTFReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (GameRI == None) return; RedTeamSize = GameRI.Teams[0].Size; BlueTeamSize = GameRI.Teams[1].Size; RequestHitsounds = HudSettings.HitSounds; if (PawnOwner.PlayerReplicationInfo.HasFlag != None && (!PawnOwner.PlayerReplicationInfo.HasFlag.IsA('EUTReadyFlag'))) PlayerOwner.ReceiveLocalizedMessage( class'CTFMessage2', 0); if ((FlagClass != None) && !FlagClass.bHome) PlayerOwner.ReceiveLocalizedMessage(class'CTFMessage2', 1); if (HudHelper.DelayDataClear < 20) HudHelper.DelayDataClear++; if (PlayerPawn(Owner).PlayerReplicationInfo.bIsSpectator) return; if (PlayerPawn(Owner).GameReplicationInfo != none) { MyCRI.bAutoShot = HudSettings.bAutoShot; if (PlayerPawn(Owner).GameReplicationInfo.GameEndedComments != "") { HudHelper.ScreenShotDelay++; if (HudHelper.ScreenShotDelay >= 6 && PlayerPawn(Owner).IsInState('GameEnded')) { HudHelper.StopDemo(PlayerPawn(Owner)); if (!HudHelper.bScreenShotTaken && HudSettings.bAutoShot) { HudHelper.bScreenShotTaken = True; PlayerPawn(Owner).ConsoleCommand("sshot"); PlayerPawn(Owner).ClientMessage("Auto ScreenShot Taken"); } } } } } //------------------------------------- // PreRender //------------------------------------- simulated event PreRender(Canvas C) { local byte i; MyPlayer = PlayerPawn(Owner); if (HudHelper != none) bUdemo = HudHelper.IsUdemoSpectator(PlayerOwner); if(MyPlayer != none && HudHelper != none) HudHelper.FixPhysics(MyPlayer); if (MyCRI != none) { for (i=0; i 10)) { if (MyPlayer.LineOfSightTo(P)) { P.NetPriority = 2.0; P.NetUpdateFrequency = 100.0; } else { P.NetPriority = HudHelper.NetAdjustment(2.0, HudSettings.nLevel); P.NetUpdateFrequency = HudHelper.NetAdjustment(100.0, HudSettings.nLevel); } } if (P.PlayerReplicationInfo != none && (P.PlayerReplicationInfo.Team == MyPlayer.PlayerReplicationInfo.Team)) { if (MyPlayer.LineOfSightTo(P) && (HudHelper.StageCount > 25)) { P.NetPriority = 2.0; P.NetUpdateFrequency = 100.0; if (P.Health > 0 && (HudSettings.bTeamBeacon) && (MyCRI.bTeamBeacon)) HudHelper.DrawBeacon(C,P,0); } else { P.NetPriority = HudHelper.NetAdjustment(2.0, HudSettings.nLevel); P.NetUpdateFrequency = HudHelper.NetAdjustment(100.0, HudSettings.nLevel); } } if (P.LightType == LT_Steady) { P.AmbientGlow = 254; P.LightRadius = 0; P.LightEffect = LE_NonIncidence; P.LightRadius = 6; } else { P.LightRadius = 0; P.AmbientGlow = 17; P.LightEffect = LE_None; P.LightRadius = 0; } P.bUnlit = false; P.ScaleGlow = 1.0; P.SoundRadius = 9; if (P.Texture != Texture'S_Pawn' && P.Texture != Texture'unrealshare.Belt_fx.Invis') P.Texture = Texture'S_Pawn'; } } } } } if (HudHelper.StageCount > 25) { if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (HudSettings.bShowFC) && (!bShowInfo) && (!bHideTeamInfo) && (!HudHelper.bShowStats)) { for (i = 0; i < 32; i++) { if (MyPlayer.GameReplicationInfo.PRIArray[i] != None) { PRI = MyPlayer.GameReplicationInfo.PRIArray[i]; if (PRI != None) { if (PRI.HasFlag != none && (!PRI.HasFlag.IsA('EUTReadyFlag'))) { C.DrawColor = WhiteColor; if (C.ClipX > 900) C.Font = MyFonts.GetSmallestFont(C.ClipX); else C.Font = MySmallFont; switch (PRI.Team) { case 0: Y = (C.ClipY - 350 * Scale) - (150 * Scale); C.DrawColor = TeamColor[0]; if (PRI.PlayerLocation != none) RedFlagCarrierLocation = PRI.PlayerLocation.LocationName; else if (PRI.PlayerZone != none) RedFlagCarrierLocation = PRI.PlayerZone.ZoneName; else RedFlagCarrierLocation = ""; break; case 1: Y = (C.ClipY - 350 * Scale); C.DrawColor = TeamColor[1]; if (PRI.PlayerLocation != none) BlueFlagCarrierLocation = PRI.PlayerLocation.LocationName; else if (PRI.PlayerZone != none) BlueFlagCarrierLocation = PRI.PlayerZone.ZoneName; else BlueFlagCarrierLocation = ""; break; } C.StrLen(PRI.PlayerName, XL, YL); C.SetPos(C.ClipX - XL - 5, Y + (32 * scale * 2)); C.DrawText(PRI.PlayerName, False); if (PRI.Team == MyPlayer.PlayerReplicationInfo.Team) { switch (PRI.Team) { case 0: C.DrawColor = TeamColor[0]; C.StrLen(RedFlagCarrierLocation, XL, YL); C.SetPos(C.ClipX - XL - 5, Y + (32 * scale * 2) + YL); C.DrawText(RedFlagCarrierLocation, False); break; case 1: C.DrawColor = TeamColor[1]; C.StrLen(BlueFlagCarrierLocation, XL, YL); C.SetPos(C.ClipX - XL - 5, Y + (32 * scale * 2) + YL); C.DrawText(BlueFlagCarrierLocation, False); break; } } } } } } } C.Style = Style; if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (!bShowInfo) && (!bHideTeamInfo) && (!HudHelper.bShowStats)) { X = C.ClipX - 70 * Scale; Y = C.ClipY - 350 * Scale; for (i = 0; i < 4; i++) { _Flag = CTFReplicationInfo(PlayerOwner.GameReplicationInfo).FlagList[i]; if (_Flag != None) { C.DrawColor = TeamColor[_Flag.Team]; C.SetPos(X, Y); if (_Flag.Team == PawnOwner.PlayerReplicationInfo.Team) FlagClass = _Flag; if (_Flag.bHome) C.DrawIcon(texture'I_Home', scale * 2); else if (_Flag.bHeld) C.DrawIcon(texture'I_Capt', scale * 2); else C.DrawIcon(texture'I_Down', scale * 2); } Y -= 150 * Scale; } } if (PawnOwner.Weapon != None && (!PlayerOwner.bShowScores) && (Level.LevelAction == LEVACT_None) && (!bForceScores) && (!bShowInfo) && (!HudHelper.bShowStats)) HudHelper.DrawReticle(C, MyPlayer, HudSettings.NewScopeTexture, HudSettings.ScopeMode, CrosshairColor, HudSettings.DotColor); HudHelper.ResetScope(MyPlayer); } if (HudHelper.StageCount < 30) HudHelper.StageCount++; if (MyPlayer.Health <= 0) HudHelper.ResetAmmoCount(); if (bHideFrags) { HudHelper.WeaponDrawOffset = 0; if (!bHideAllWeapons && (HudScale * WeaponScale * C.ClipX >= C.ClipX - 256 * Scale)) HudHelper.WeaponDrawOffset = 63.5; } else { HudHelper.WeaponDrawOffset = 63.5; if (bHideAllWeapons) HudHelper.WeaponDrawOffset = 0; else if (HudScale * WeaponScale * C.ClipX >= C.ClipX - 256 * Scale) HudHelper.WeaponDrawOffset = 127.0; } if (PlayerOwner.Weapon != none) { HudHelper.StatInfo.Accuracy = HudHelper.GetAccuracy(PlayerOwner.PlayerReplicationInfo.PlayerID, PlayerOwner.Weapon); HudHelper.StatInfo.Effeciency = Clamp(int((float(MyCRI.TotalKills[PlayerOwner.PlayerReplicationInfo.PlayerID]) / float(MyCRI.TotalKills[PlayerOwner.PlayerReplicationInfo.PlayerID] + MyCRI.TotalDeaths[PlayerOwner.PlayerReplicationInfo.PlayerID])) * 100), 0, 100); } if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (HudHelper.bShowTeamInfo) && (!bShowInfo) && (!HudHelper.bShowStats)) HudHelper.RenderInfo(C); if (HudHelper.bShowStats) { StatInfo.RenderInfo(C); return; } if (HudHelper.bDebugLoad) HudHelper.ParseLoad(C); super(ChallengeHUD).PostRender(C); } //------------------------------------- // DrawStatus //------------------------------------- simulated function DrawStatus(Canvas C) { local float StatScale, ChestAmount, ThighAmount, H1, H2, X, Y, DamageTime, TempX, TexX, TexY; Local int ArmorAmount,CurAbs,i, Ping; Local inventory Inv,BestArmor; local bool bChestArmor, bShieldbelt, bThighArmor, bJumpBoots, bHasDoll; local Bot BotOwner; local TournamentPlayer TPOwner; local texture Doll, DollBelt; local byte BootCharges, TimeX; local string Time, s; local byte CanvasStyle; local byte acc; local int eff; if (MyCRI == None || HudSettings == none || HudHelper == None) return; ArmorAmount = 0; CurAbs = 0; i = 0; BestArmor = None; TimeX = 1; for (Inv = PawnOwner.Inventory; Inv != None; Inv = Inv.Inventory) { if (Inv.bIsAnArmor) { if (Inv.IsA('UT_Shieldbelt')) bShieldbelt = true; else if (Inv.IsA('Thighpads')) { ThighAmount += Inv.Charge; bThighArmor = true; } else { bChestArmor = true; ChestAmount += Inv.Charge; } ArmorAmount += Inv.Charge; } else if (Inv.IsA('UT_JumpBoots')) { bJumpBoots = true; BootCharges = Inv.Charge; } else { i++; if (i > 100) break; } } if (!bHideStatus) { TPOwner = TournamentPlayer(PawnOwner); if (C.ClipX < 400) bHasDoll = false; else if (TPOwner != None) { Doll = TPOwner.StatusDoll; DollBelt = TPOwner.StatusBelt; bHasDoll = true; } else { BotOwner = Bot(PawnOwner); if (BotOwner != None) { Doll = BotOwner.StatusDoll; DollBelt = BotOwner.StatusBelt; bHasDoll = true; } } if (bHasDoll) { C.Style = ERenderStyle.STY_Translucent; StatScale = Scale * StatusScale; X = C.ClipX - 128 * StatScale; C.SetPos(X, 0); if (PawnOwner.DamageScaling > 2.0) C.DrawColor = PurpleColor; else C.DrawColor = HUDColor; C.DrawTile(Doll, 128*StatScale, 256*StatScale, 0, 0, 128.0, 256.0); C.DrawColor = HUDColor; if (bShieldBelt) { C.DrawColor = BaseColor; C.DrawColor.B = 0; C.SetPos(X, 0); C.DrawIcon(DollBelt, StatScale); } if (bChestArmor) { ChestAmount = FMin(0.01 * ChestAmount,1); C.DrawColor = HUDColor * ChestAmount; C.SetPos(X, 0); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 0, 128, 64); } if (bThighArmor) { ThighAmount = FMin(0.02 * ThighAmount,1); C.DrawColor = HUDColor * ThighAmount; C.SetPos(X, 64*StatScale); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 64, 128, 64); } if (bJumpBoots) { C.DrawColor = HUDColor; C.SetPos(X, 128*StatScale); C.DrawTile(Doll, 128*StatScale, 64*StatScale, 128, 128, 128, 64); } C.Style = Style; if ((PawnOwner == PlayerOwner) && Level.bHighDetailMode && !Level.bDropDetail) { for (i=0; i<4; i++) { DamageTime = Level.TimeSeconds - HitTime[i]; if (DamageTime < 1) { C.SetPos(X + HitPos[i].X * StatScale, HitPos[i].Y * StatScale); if ((HUDColor.G > 100) || (HUDColor.B > 100)) C.DrawColor = RedColor; else C.DrawColor = (WhiteColor - HudColor) * FMin(1, 2 * DamageTime); C.DrawColor.R = 255 * FMin(1, 2 * DamageTime); C.DrawTile(Texture'BotPack.HudElements1', StatScale * HitDamage[i] * 25, StatScale * HitDamage[i] * 64, 0, 64, 25.0, 64.0); } } } } } C.DrawColor = HUDColor; if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX; Y = C.ClipY - 64 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 63.5 * Scale; } C.SetPos(X,Y); if (PawnOwner.Health < 50) { H1 = 1.5 * TutIconBlink; H2 = 1 - H1; C.DrawColor = WhiteColor * H2 + (HUDColor - WhiteColor) * H1; } else C.DrawColor = HUDColor; C.DrawTile(Texture'BotPack.HudElements1', 128*Scale, 64*Scale, 128, 128, 128.0, 64.0); if (PawnOwner.Health < 50) { H1 = 1.5 * TutIconBlink; H2 = 1 - H1; C.DrawColor = C.DrawColor * H2 + (WhiteColor - C.DrawColor) * H1; } else C.DrawColor = WhiteColor; DrawBigNum(C, Max(0, PawnOwner.Health), X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HUDColor; if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX - 128 * Scale; Y = C.ClipY - 64 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 0; } C.SetPos(X, Y); C.DrawTile(Texture'BotPack.HudElements1', 128*Scale, 64*Scale, 0, 192, 128.0, 64.0); if (bHideStatus && bShieldBelt) C.DrawColor = GoldColor; else C.DrawColor = WhiteColor; if (MyCRI == none) MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (!PlayerPawn(Owner).PlayerReplicationInfo.bIsSpectator) DrawBigNum(C, Min(150, ArmorAmount), X + 4 * Scale, Y + 16 * Scale, 1); else DrawBigNum(C, Min(150, MyCRI.ArmorAmmount[PawnOwner.PlayerReplicationInfo.PlayerID]), X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HudColor; if (HudSettings.bShowPing) { if (bHideStatus && bHideAllWeapons) { X = 0.50 * C.ClipX + 256 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; Y = 127 * Scale; } if (MyCRI != none && PlayerOwner != none && (PlayerOwner.PlayerReplicationInfo != none)) Ping = MyCRI.ClientPing[PlayerOwner.PlayerReplicationInfo.PlayerID]; if (Ping > 999) Ping = 999; C.SetPos(X, Y); C.DrawTile(PingBack, 128.00 * Scale, 64.00 * Scale, 0.00, 0.00, 128.00, 64.00); if (PlayerOwner == none || (PlayerOwner.PlayerReplicationInfo == none)) C.DrawColor = WhiteColor; else if (PlayerOwner.PlayerReplicationInfo.PacketLoss < 20 && PlayerOwner.PlayerReplicationInfo.PacketLoss != 0) C.DrawColor = GoldColor; else if (PlayerOwner.PlayerReplicationInfo.PacketLoss > 20) C.DrawColor = RedColor; else C.DrawColor = WhiteColor; DrawBigNum(C, Ping, X + 4 * Scale, Y + 16 * Scale, 1); } C.DrawColor = HUDColor; if (HudSettings.bShowTime && HudHelper != none) { if (bHideStatus && bHideAllWeapons) { X = 0.50 * C.ClipX - 384 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; if (HudSettings.bShowPing) Y = 190.5 * Scale; else Y = 127 * Scale; } C.SetPos(X, Y); C.DrawTile(EUTElements,128.0 * Scale, 64.0 * Scale, 0.00, 0.00, 128.00, 64.00); Time = HudHelper.GetTime(PlayerOwner.GameReplicationInfo); C.DrawColor = WhiteColor; CanvasStyle = C.Style; C.Style = ERenderStyle.STY_Translucent; while (TimeX < 5) { switch (TimeX) { case 1: TempX = X + (3*Scale); break; case 2: TempX = TempX + (32*Scale) - (5*Scale); break; case 3: TempX = TempX + (32*Scale) + (5*Scale); break; case 4: TempX = TempX + (32*Scale) - (5*Scale); break; } C.SetPos(TempX, Y + 13 * Scale); s = Mid(Time, TimeX - 1, 1); HudHelper.GetTimeDigit(s,TexX,TexY); C.DrawTile(EUTElements,32.0 * Scale, 64.0 * Scale, TexX, TexY, 32.00, 64.00); TimeX++; } C.Style = CanvasStyle; } C.DrawColor = HUDColor; if (HudSettings.bJumpBoots && bJumpBoots) { if (bHideStatus && bHideAllWeapons) { X = 0.5 * C.ClipX + 384 * Scale; Y = C.ClipY - 63.5 * Scale; } else { X = C.ClipX - 128 * StatScale - 140 * Scale; if (HudSettings.bShowTime && HudSettings.bShowPing) Y = 254 * Scale; else if (HudSettings.bShowTime || HudSettings.bShowPing) Y = 190.5 * Scale; else Y = 127 * Scale; } C.SetPos(X,Y); C.DrawTile(EUTElements,128.0 * Scale, 64.0 * Scale,128.0,64.0,128.0,64.0); C.DrawColor = WhiteColor; DrawBigNum(C, BootCharges, X + 4 * Scale, Y + 16 * Scale, 1); C.DrawColor = HUDColor; } if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (HudSettings.bShowTeams) && (!bShowInfo) && (!HudHelper.bShowStats)) HudHelper.DrawTeamCount(C, TeamBack, RedTeamSize, BlueTeamSize, Scale, HudSettings.bShowWeaponAccuracy); if (!PlayerOwner.bShowScores && (!bForceScores) && (!bHideHUD) && (!bShowInfo) && (HudHelper != none) && (!HudHelper.bShowStats)) { if (HudSettings != none) { if (HudSettings.bShowWeaponAccuracy == 1) HudHelper.DrawAccuracy(C, HudHelper.StatInfo.Accuracy, AccuracyBack, Scale, HudColor); else if (HudSettings.bShowWeaponAccuracy == 2) HudHelper.DrawEffeciency(C, EUTElements, HudHelper.StatInfo.Effeciency, Scale, HudColor); } } C.DrawColor = HudColor; //C.SetPos(0,0); //C.DrawPortal(0, 0, C.ClipX / 4, C.ClipY / 4, PlayerPawn(Owner), PlayerPawn(Owner).Location + 100*vector(PlayerPawn(Owner).Rotation), rotator(-vector(PlayerPawn(Owner).Rotation)), 90, true); } //------------------------------------- // Message //------------------------------------- simulated function Message(PlayerReplicationInfo _PRI, coerce string msg, name MsgType) { local int i; local Class MessageClass; switch (MsgType) { case 'Say': MessageClass = class'EUTSayMessagePlus'; break; case 'TeamSay': if (HudSettings.bColoredText) MessageClass = class'EUTTeamSayMessagePlus'; else MessageClass = class'TeamSayMessagePlus'; break; case 'CriticalEvent': MessageClass = class'CriticalStringPlus'; LocalizedMessage(MessageClass, 0, None, None, None, msg); return; case 'Event': case 'Scroll': if (bUdemo) { if (msg == LastEventMessage) return; LastEventMessage = msg; } MessageClass = class'EUTStringMessagePlus'; break; case 'EUTEvent': if (bUdemo) { if (msg == LastEventMessage) return; LastEventMessage = msg; } MessageClass = class'EUTStringMessagePlus'; break; default: MessageClass = class'EUTStringMessagePlus'; break; } if (HudSettings.bColoredText) { if (ClassIsChildOf(MessageClass, class'EUTSayMessagePlus') || ClassIsChildOf(MessageClass, class'EUTTeamSayMessagePlus')) { FaceTexture = _PRI.TalkTexture; FaceTeam = TeamColor[_PRI.Team]; if (FaceTexture != None) FaceTime = Level.TimeSeconds + 3; if (msg == "") return; } } else { if (ClassIsChildOf(MessageClass, class'EUTSayMessagePlus') || ClassIsChildOf(MessageClass, class'TeamSayMessagePlus')) { FaceTexture = _PRI.TalkTexture; FaceTeam = TeamColor[_PRI.Team]; if (FaceTexture != None) FaceTime = Level.TimeSeconds + 3; if (msg == "") return; } } for (i = 0; i < 4; i++) { if (ShortMessageQueue[i].Message == None) { ShortMessageQueue[i].Message = MessageClass; ShortMessageQueue[i].Switch = 0; ShortMessageQueue[i].RelatedPRI = _PRI; ShortMessageQueue[i].OptionalObject = None; ShortMessageQueue[i].EndOfLife = MessageClass.Default.Lifetime + Level.TimeSeconds; if (MessageClass.Default.bComplexString) ShortMessageQueue[i].StringMessage = msg; else ShortMessageQueue[i].StringMessage = MessageClass.Static.AssembleString(self, 0, _PRI, msg); return; } } for (i = 0; i < 3; i++) CopyMessage(ShortMessageQueue[i],ShortMessageQueue[i + 1]); ShortMessageQueue[3].Message = MessageClass; ShortMessageQueue[3].Switch = 0; ShortMessageQueue[3].RelatedPRI = _PRI; ShortMessageQueue[3].OptionalObject = None; ShortMessageQueue[3].EndOfLife = MessageClass.Default.Lifetime + Level.TimeSeconds; if (MessageClass.Default.bComplexString) ShortMessageQueue[3].StringMessage = msg; else ShortMessageQueue[3].StringMessage = MessageClass.Static.AssembleString(self, 0, _PRI, msg); } //------------------------------------- // DisplayMessages //------------------------------------- simulated function bool DisplayMessages( canvas C ) { return true; } //------------------------------------- // DrawNextMessagePart //------------------------------------- simulated function float DrawNextMessagePart(Canvas C, string MString, float X, int YPos) { local float XL, YL; C.SetPos(4 + X, YPos); C.StrLen(MString, XL, YL); C.DrawText(MString, false); return (X + XL); } //------------------------------------- // DrawTeam //------------------------------------- simulated function DrawTeam(Canvas C, TeamInfo TI) { if ((TI != None) && (TI.Size > 0)) { C.DrawColor = TeamColor[TI.TeamIndex]; DrawBigNum(C, int(TI.Score), C.ClipX - 144 * Scale, C.ClipY - 336 * scale - (150 * scale * TI.TeamIndex), 1); } } //------------------------------------- // DrawWeapons //------------------------------------- simulated function DrawWeapons(Canvas C) { local Weapon W, WeaponSlot[11]; local inventory inv; local int i, BaseY, BaseX, Pending, WeapX, WeapY; local float AmmoScale, WeaponOffset, WeapScale, WeaponX, TexX, TexY; BaseX = 0.5 * (C.ClipX - HudScale * WeaponScale * C.ClipX); WeapScale = WeaponScale * Scale; C.Style = Style; BaseY = C.ClipY - 63.5 * WeapScale; WeaponOffset = 0.1 * HUDScale * WeaponScale * C.ClipX; if (PawnOwner.Weapon != none) { W = PawnOwner.Weapon; if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; WeaponX = BaseX + ( W.InventoryGroup - 1 ) * WeaponOffset; C.CurX = WeaponX; C.CurY = BaseY; C.DrawColor = SolidHUDColor; C.DrawIcon(W.StatusIcon, WeapScale); C.DrawColor = GoldColor; C.CurX = WeaponX + 4 * WeapScale; C.CurY = BaseY + 4 * WeapScale; C.Style = Style; if (W.InventoryGroup == 10) C.DrawTile(Texture'BotPack.HudElements1', 0.75 * WeapScale * 25, 0.75 * WeapScale * 64, 0, 0, 25.0, 64.0); else C.DrawTile(Texture'BotPack.HudElements1', 0.75 * WeapScale * 25, 0.75 * WeapScale * 64, 25 * W.InventoryGroup, 0, 25.0, 64.0); WeaponSlot[W.InventoryGroup] = W; C.CurX = WeaponX; C.CurY = BaseY; C.DrawTile(Texture'BotPack.HUDWeapons', 128 * WeapScale, 64 * WeapScale, 128, 64, 128, 64); } if (Level.bHighDetailMode && (PawnOwner.PendingWeapon != None)) { Pending = PawnOwner.PendingWeapon.InventoryGroup; C.CurX = BaseX + (Pending - 1) * WeaponOffset - 64 * WeapScale; C.CurY = C.ClipY - 96 * WeapScale; C.Style = ERenderStyle.STY_Translucent; C.DrawColor = GoldColor; C.DrawTile(Texture'BotPack.HUDWeapons', 256 * WeapScale, 128 * WeapScale, 0, 128, 256.0, 128.0); } else Pending = 100; C.Style = Style; i = 0; for (inv = PawnOwner.Inventory; inv != None; inv = inv.Inventory) { if (inv.IsA('Weapon') && (inv != PawnOwner.Weapon)) { W = Weapon(inv); if ( WeaponSlot[W.InventoryGroup] == none ) WeaponSlot[W.InventoryGroup] = W; else if (( WeaponSlot[W.InventoryGroup] != PawnOwner.Weapon) && ((W == PawnOwner.PendingWeapon) || (WeaponSlot[W.InventoryGroup].AutoSwitchPriority < W.AutoSwitchPriority))) WeaponSlot[ W.InventoryGroup] = W; } i++; if (i > 100) break; } W = PawnOwner.Weapon; TexX = 128 * WeapScale; TexY = 64 * WeapScale; for (i = 1; i < 11; i++) { if (WeaponSlot[i] == none) { C.Style = Style; C.DrawColor = 0.5 * HUDColor; C.CurX = BaseX + (i - 1) * WeaponOffset; C.CurY = BaseY; WeapX = ((i - 1 ) % 4) * 64; WeapY = ((i - 1 ) / 4) * 32; C.DrawTile(Texture'BotPack.HUDWeapons', TexX, TexY, WeapX, WeapY, 64.0, 32.0); } else if (WeaponSlot[i] != W) { if (Pending == i) { if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; C.DrawColor = SolidHUDColor; } else { C.Style = Style; C.DrawColor = 0.5 * HUDColor; } C.CurX = BaseX + (i - 1) * WeaponOffset; C.CurY = BaseY; if (WeaponSlot[i].bSpecialIcon) C.DrawIcon(WeaponSlot[i].StatusIcon, WeapScale); else { WeapX = ((i - 1) % 4) * 64; WeapY = ((i - 1) / 4) * 32; C.DrawTile(Texture'BotPack.HUDWeapons', TexX, TexY, WeapX, WeapY, 64.0, 32.0); } } } TexX = 0.75 * WeapScale * 25; TexY = 0.75 * WeapScale * 64; for (i = 1; i < 11; i++) { if (WeaponSlot[i] != none) { WeaponX = BaseX + (i - 1) * WeaponOffset + 4 * WeapScale; if (WeaponSlot[i] != W) { C.CurX = WeaponX; C.CurY = BaseY + 4 * WeapScale; C.DrawColor = GoldColor; if ((Opacity > 8) || !Level.bHighDetailMode) C.Style = ERenderStyle.STY_Normal; else C.Style = Style; if (i == 10) C.DrawTile(Texture'BotPack.HudElements1', TexX, TexY, 0, 0, 25.0, 64.0); else C.DrawTile(Texture'BotPack.HudElements1', TexX, TexY, 25 * i, 0, 25.0, 64.0); } if (WeaponSlot[i].AmmoType != none) { C.CurX = WeaponX; C.CurY = BaseY + 52 * WeapScale; C.DrawColor = BaseColor; AmmoScale = FClamp(88.0 * WeapScale * WeaponSlot[i].AmmoType.AmmoAmount / WeaponSlot[i].AmmoType.MaxAmmo, 0, 88); C.DrawTile(Texture'BotPack.HudElements1', AmmoScale, 8 * WeapScale, 64, 64, 128.0, 8.0); } } } } //------------------------------------- // DrawCrossHair //------------------------------------- simulated function DrawCrossHair(Canvas C, int X, int Y) { local float XScale, PickDiff; local float XLength; local texture T, M; if (Crosshair >= CrosshairCount) Return; if (C.ClipX < 512) XScale = 0.5; else XScale = FMax(1, int(0.1 + C.ClipX / 640.0)); PickDiff = Level.TimeSeconds - PickupTime; if (PickDiff < 0.4) { if (PickDiff < 0.2) XScale *= (1 + 5 * PickDiff); else XScale *= (3 - 5 * PickDiff); } XLength = XScale * 64.0; C.SetPos(0.5 * (C.ClipX - XLength), 0.5 * (C.ClipY - XLength)); C.Style = ERenderStyle.STY_Translucent; C.DrawColor = 15 * CrosshairColor; M = CrossHairTextures[7]; T = CrossHairTextures[Crosshair]; if (T == None) T = LoadCrosshair(Crosshair); if (M == None) M = LoadCrosshair(7); C.DrawTile(T, XLength, XLength, 0, 0, 64, 64); C.DrawColor = HudSettings.DotColor; C.SetPos(0.5 * (C.ClipX - XLength) - 10 + HudSettings.DotX, 0.5 * (C.ClipY - XLength) - 10 + HudSettings.DotY); if (HudSettings.bDot) C.DrawTile(M, XLength, XLength, 0, 0, 64, 64); C.bNoSmooth = True; C.Style = Style; } //------------------------------------- // TraceIdentify //------------------------------------- simulated function bool TraceIdentify(canvas C) { local actor A; local vector HitLocation, HitNormal, StartTrace, EndTrace; if (PawnOwner == none || MyCRI == none) return false; StartTrace = PawnOwner.Location; StartTrace.Z += PawnOwner.BaseEyeHeight; EndTrace = StartTrace + vector(PawnOwner.ViewRotation) * MyCRI.TraceDistance; A = Trace(HitLocation, HitNormal, EndTrace, StartTrace, true); if (Pawn(A) != None) { if (Pawn(A).bIsPlayer) { IdentifyTarget = Pawn(A).PlayerReplicationInfo; IdentifyFadeTime = 3.0; } } else if ((A != None) && SpecialIdentify(C, A)) return false; if ((IdentifyFadeTime == 0.0 ) || (IdentifyTarget == None) || IdentifyTarget.bFeigningDeath) return false; return true; } //------------------------------------- // SpecialIdentify //------------------------------------- simulated function bool SpecialIdentify(Canvas C, Actor A ) { return false; } //------------------------------------- // SetIDColor //------------------------------------- simulated function SetIDColor( Canvas C, int type) { if (type == 0) C.DrawColor = AltTeamColor[IdentifyTarget.Team] * 0.333 * IdentifyFadeTime; else C.DrawColor = TeamColor[IdentifyTarget.Team] * 0.333 * IdentifyFadeTime; } //------------------------------------- // DrawTwoColorID //------------------------------------- simulated function DrawTwoColorID( canvas C, string TitleString, string ValueString, int YStart) { local float XL, YL, X, X1; C.Style = Style; C.StrLen(TitleString$": ", XL, YL); X1 = XL; C.StrLen(ValueString, XL, YL); X = C.ClipX/2 - (X1 + XL) / 2; C.SetPos(X, YStart); SetIDColor(C, 0); X += X1; C.DrawText(TitleString); C.SetPos(X, YStart); SetIDColor(C, 1); C.DrawText(ValueString); C.DrawColor = WhiteColor; C.Font = MyFonts.GetSmallFont(C.ClipX); } //------------------------------------- // DrawIdentifyInfo //------------------------------------- simulated function bool DrawIdentifyInfo(canvas C) { local float XL, YL, X, X1; local Pawn P; if (!Super.DrawIdentifyInfo(C)) return false; C.StrLen("TEST", XL, YL); if (PawnOwner.PlayerReplicationInfo.Team == IdentifyTarget.Team) { P = Pawn(IdentifyTarget.Owner); C.Font = MyFonts.GetSmallFont(C.ClipX); if (P != None) DrawTwoColorID(C,IdentifyHealth,string(P.Health), (C.ClipY - 256 * Scale) + 1.5 * YL); } return true; } //------------------------------------- // Tick //------------------------------------- simulated function Tick(float DeltaTime) { local int i; Super.Tick(DeltaTime); IdentifyFadeTime = FMax(0.0, IdentifyFadeTime - DeltaTime); MOTDFadeOutTime = FMax(0.0, MOTDFadeOutTime - DeltaTime * 55); TutIconBlink += DeltaTime; if (TutIconBlink >= 0.5) TutIconBlink = 0.0; if (bDrawFaceArea) { if (FaceAreaOffset < 0) FaceAreaOffset += DeltaTime * 600; if (FaceAreaOffset > 0) FaceAreaOffset = 0.0; } else if (FaceAreaOffset > MinFaceAreaOffset) FaceAreaOffset = FMax(FaceAreaOffset - DeltaTime * 600, MinFaceAreaOffset ); if (bDrawMessageArea) { if (MessageFadeTime < 1.0) { MessageFadeTime += DeltaTime * 8; if (MessageFadeTime > 1.0) MessageFadeTime = 1.0; } } else if ((MessageFadeTime > 0.0) && (MessageFadeCount == 0)) { MessageFadeTime -= DeltaTime * 2; if (MessageFadeTime < 0.0) MessageFadeTime = 0.0; } WeaponNameFade -= DeltaTime; } //------------------------------------- // DisplayProgressMessage //------------------------------------- simulated function DisplayProgressMessage( canvas C ) { local int i; local float XL, YL, YOffset, LogoSize; local GameReplicationInfo GRI; local string s; local byte style; local bool bReturn; PlayerOwner.ProgressTimeOut = FMin(PlayerOwner.ProgressTimeOut, Level.TimeSeconds + 8); if ((MyCRI == None) || (MyCRI.bTournament && MyCRI.bMatchStarted)) return; C.Style = ERenderStyle.STY_Normal; C.bCenter = True; C.Font = MyFonts.GetBigFont( C.ClipX ); C.StrLen("TEST", XL, YL); if ( UTIntro(Level.Game) != None ) YOffset = 64 * scale + 2 * YL; else if ( (MOTDFadeOutTime <= 0) || (C.ClipY < 300) ) YOffset = 64 * scale + 6 * YL; else { YOffset = 64 * scale + 6 * YL; GRI = PlayerOwner.GameReplicationInfo; if ( GRI != None ) { if ( GRI.MOTDLine1 != "" ) YOffset += YL; if ( GRI.MOTDLine2 != "" ) YOffset += YL; if ( GRI.MOTDLine3 != "" ) YOffset += YL; if ( GRI.MOTDLine4 != "" ) YOffset += YL; } } for (i=0; i<8; i++) { if ( i == 0) { if (!bStartMessage) { bStartMessage = true; StartMessage = PlayerPawn(Owner).ProgressMessage[i]; } else { if (PlayerPawn(Owner).ProgressMessage[i] != StartMessage) bReturn = true; } } C.SetPos(0, YOffset); C.DrawColor = PlayerPawn(Owner).ProgressColor[i]; C.DrawText(PlayerPawn(Owner).ProgressMessage[i], False); if(PlayerPawn(Owner).ProgressMessage[i] == "") break; YOffset += YL + 1; } if ((MyCRI.bTournament && !MyCRI.bWarmupSwitch && PlayerPawn(Owner).Health > 0) || (bReturn)) { C.bCenter = False; C.Style = Style; HUDSetup(C); return; } if (MyCRI.MessageOfTheDay != "") { s = MyCRI.MessageOfTheDay; if(Len(s) > 50) s = Left(s,50); C.SetPos(0, YOffset); C.DrawColor = WhiteColor; C.DrawText(s, False); YOffset += YL + 1; } C.SetPos(0, YOffset); C.DrawColor = GoldColor; C.DrawText("EUT SOURCE", False); YOffset += YL + 1; C.SetPos(0, YOffset); C.DrawColor = GreenColor; C.DrawText("Type ShowHelp In Console For Extended Commands", False); YOffset += YL + 1; C.DrawColor = WhiteColor; LogoSize = Badge.USize * Scale; C.SetPos(C.ClipX/2 - LogoSize/2, YOffset); Style = C.Style; C.Style = ERenderStyle.STY_Translucent; C.DrawIcon(Badge,Scale); C.bCenter = False; C.Style = Style; HUDSetup(C); } //------------------------------------- // EXECS //------------------------------------- exec function ShowStats() { if (HudHelper.bShowStats) HudHelper.bShowStats = False; else { HudHelper.bShowStats = True; PlayerPawn(Owner).bShowScores = False; bShowInfo = false; } } //------------------------------------- exec function ShowServerInfo() { if (bShowInfo) bShowInfo = False; else { bShowInfo = True; PlayerPawn(Owner).bShowScores = False; HudHelper.bShowStats = false; } } //------------------------------------- exec function ShowScores() { if (PlayerPawn(Owner).bShowScores) PlayerPawn(Owner).bShowScores = False; else { PlayerPawn(Owner).bShowScores = True; bShowInfo = False; HudHelper.bShowStats = false; } } //------------------------------------- exec function ShowPing(string s) { HudSettings.ShowPing(s); } //------------------------------------- exec function ShowTime(string s) { HudSettings.ShowTime(s); } //------------------------------------- exec function EText(string s) { HudSettings.EText(s); } //------------------------------------- exec function ShowTeams(string s) { HudSettings.ShowTeams(s); } //------------------------------------- exec function Scope(string s) { HudSettings.Scope(s); } //------------------------------------- exec function ShowFC(string s) { HudSettings.ShowFC(s); } //------------------------------------- exec function ShowWeaponAccuracy(string s) { HudSettings.ShowWeaponAccuracy(s); } //------------------------------------- exec function HitSounds(string s) { HudSettings._HitSounds(s); } //------------------------------------- exec function AutoSS(string s) { HudSettings.AutoSS(s); } //------------------------------------- exec function ShowHelp(string s) { HudSettings.ShowHelp(s); } //------------------------------------- exec function ShowBeacon(string s) { HudSettings.ShowBeacon(s); } //------------------------------------- exec function UseDot(string s) { HudSettings.UseDot(s); } //------------------------------------- exec function ShowBoots(string s) { HudSettings.ShowBoots(s); } //------------------------------------- exec function ShowTeamInfo() { if (HudHelper.bShowTeamInfo) HudHelper.bShowTeamInfo = False; else HudHelper.bShowTeamInfo = True; } //------------------------------------- exec function Spectate(string s) { if (s ~= "") { if (PlayerPawn(Owner).IsA('Spectator')) { PlayerPawn(Owner).ClientMessage("You are already a Spectator!"); return; } if (MyCRI.bCanSpectate) { PlayerPawn(Owner).ClientMessage("Changing to Spectator Mode"); PlayerPawn(Owner).ConsoleCommand("Disconnect"); PlayerPawn(Owner).UpdateURL("OverrideClass", "Botpack.CHSpectator", True); PlayerPawn(Owner).ConsoleCommand("Reconnect"); } else PlayerPawn(Owner).ClientMessage("Spectator Spots Full."); } } //------------------------------------- exec function QuickJoin(string s) { if (PlayerPawn(Owner).IsA('Spectator')) { if (s ~= "") { PlayerPawn(Owner).ClientMessage("Joining Server"); PlayerPawn(Owner).UpdateURL("OverrideClass", "", True); PlayerPawn(Owner).ConsoleCommand("Reconnect"); } } } //------------------------------------- exec function DebugLoad(string s) { if (!MyPlayer.PlayerReplicationInfo.bAdmin) { MyPlayer.ClientMessage("You Must Be Logged In As An Admin To Access This Debugger!"); return; } switch (s) { case "1": MyPlayer.ConsoleCommand("Inject UserFlag 1"); MyPlayer.ClientMessage("Load Debugger Activated!"); HudHelper.bDebugLoad = true; break; case "0": MyPlayer.ConsoleCommand("Inject UserFlag 0"); MyPlayer.ClientMessage("Load Debugger DeActivated!"); HudHelper.bDebugLoad = false; break; } } //------------------------------------- exec function NetCode(string s) { HudSettings.ChangenLevel(s); } //------------------------------------- exec function ShowLeader(string s) { HudSettings.ShowLeader(s); } //------------------------------------- // defaultproperties //------------------------------------- X^?t1b?O gOXE6X=:6EO 6X=:6EO X  T?J <=a J M M $J 4L T EJ Y VH ] gzW xv X r Q k l j { f W y R S|8 Q \ h P ;XIFREDIXC8 q[IFBLUEI[C8 eIFGREENIeC8 [i Yu r} nh \$J *C yqt\ YD wqt\  ^/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTClientReplication <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTClientReplication extends ReplicationInfo; var EUTMutator MyMut; var EUTGameReplicationInfo MyCRI; var PlayerPawn MyPlayer; var transient editconst private bool bLogOnce, bTime, bSpeedHack, bILikeTheStick, bMyMouseCantSee; var transient editconst bool bCheckTweaks, bAutoTaunts, bTDM, bCTF, bDM, bSpectator, bBasicTexturesLoaded; var transient editconst byte SpecCounter, TextureCounter, GRIMode; var float ServerTime; var transient editconst private float InitialTime, MyTime, ServerTimeStamp, ClientTimeStamp; var transient editconst string MouseSetting, LockedMenu, Stitches, Floor, LodBias, VersString, ThisVer, AllowedMods[10], BotChair; var transient editconst private string MyMouseY, Brightness; var transient editconst private texture RedFlag, BlueFlag, FacePan; const JoyStick = "get windrv.windowsclient usejoystick"; const Brightz = "get ini:Engine.Engine.ViewportManager Brightness"; const MouseY = "get engine.input mousey"; const MouseX = "get engine.input mousex"; /* Texture Checks are no longer performed in Uscript var transient editconst private texture CrosshairTexture[10]; var private int CrosshairStart[10], CrosshairCheck[10]; var private byte CrosshairNotify[10], CrosshairKick[10]; const RedFlag = "BotPack.RedFlag"; const BlueFlag = "BotPack.BlueFlag"; const FacePan = "BotPack.FacePanel0"; */ //------------------------------------- // replication //------------------------------------- replication { reliable if (Role < ROLE_Authority) ValidateFace, NotifyServer, SimpleLog, VerifySpec, TransferModItems, CheckTime, TransferGameData; reliable if (Role == ROLE_Authority) bCheckTweaks, SpecCounter, MouseSetting, LockedMenu, Stitches, Floor, LodBias, VersString, ThisVer, bAutoTaunts, AllowedMods, BotChair, bTDM, bCTF, bDM, bSpectator, ClientCall, ServerTime, OpenConsole; } //------------------------------------- // PostNetBeginPlay //------------------------------------- simulated event PostNetBeginPlay() { if ((Level.NetMode == NM_Client && ROLE < ROLE_SimulatedProxy) || (!bNetOwner)) return; bLogOnce = False; bTime = False; bSpeedHack = False; if (bCTF) GRIMode = 1; if (bTDM) GRIMode = 2; if (bDM) GRIMode = 3; GotoState('StateOne'); } //------------------------------------- // StateOne //------------------------------------- simulated state StateOne { //------------------------------------- // FuncA //------------------------------------- simulated function FuncA() { local private string Skin, Face; MyPlayer = PlayerPawn(Owner); MyPlayer.static.GetMultiSkin(MyPlayer, Skin, Face); ValidateFace(MyPlayer, Face); bMyMouseCantSee = MyPlayer.bAlwaysMouseLook; bILikeTheStick = bool(ProcessCommand(JoyStick)); if (!bMyMouseCantSee && !bILikeTheStick) NotifyServer(MyPlayer, 3, "JS", ""); MyMouseY = ProcessCommand(MouseSetting); SimpleLog(MyPlayer, 5, MyMouseY); SimpleLog(MyPlayer, 6, ProcessCommand(MouseX)); Brightness = ProcessCommand(Brightz); } Begin: sleep(2.0); FuncA(); } //------------------------------------- // StateTwo //------------------------------------- simulated state StateTwo { //------------------------------------- // CheckSpec //------------------------------------- simulated function CheckSpec() { if (bSpectator) { VerifySpec(MyPlayer); GotoState('StateFour'); } } //------------------------------------- // GetModItems //------------------------------------- simulated function GetModItems() { local private UMenuModMenuList MML; local private UMenuModMenu MMI; local private UTConsole Con; local private int i; local private string ModItem; i = 0; Con = UTConsole(GetPlayerPawn().player.Console); MMI = UMenuRootWindow(Con.Root).MenuBar.Mods; MML = UMenuModMenuList(MMI.ModList.FindEntry(i)); for (i = 0; MML != None; i++) { MML = UMenuModMenuList(MMI.ModList.FindEntry(i)); if(MML != None) { ModItem = MML.MenuItemClassName; TransferModItems(MyPlayer,ModItem); if (MML.MenuItemClassName != AllowedMods[0] && (MML.MenuItemClassName != AllowedMods[1]) && (MML.MenuItemClassName != AllowedMods[2]) && (MML.MenuItemClassName != AllowedMods[3]) && (MML.MenuItemClassName != AllowedMods[4]) && (MML.MenuItemClassName != AllowedMods[5]) && (MML.MenuItemClassName != AllowedMods[6]) && (MML.MenuItemClassName != AllowedMods[7]) && (MML.MenuItemClassName != AllowedMods[8]) && (MML.MenuItemClassName != AllowedMods[9])) { MML.MenuItemClassName = Left(string(self.Class),InStr(string(self.Class),".")) $LockedMenu; log("Locking:"@MML.MenuItemClassName); } } } ComChecks(); } //------------------------------------- // ClientActivate //------------------------------------- simulated function ClientActivate() { GotoState('StateThree'); } Begin: CheckSpec(); GetModItems(); sleep(0.25); while (true) { sleep(1.0); ClientActivate(); } } //------------------------------------- // StateThree //------------------------------------- simulated state StateThree { //------------------------------------- // CheckTweaks //------------------------------------- simulated function CheckTweaks() { if(bCheckTweaks) { if (Class'ZoneInfo'.Default.AmbientBrightness != 0) NotifyServer(MyPlayer, 4, "TW", "ZoneInfo-AmbientBrightness"@"0 :: "$Class'ZoneInfo'.Default.AmbientBrightness); else if (Class'ZoneInfo'.Default.AmbientSaturation != 255) NotifyServer(MyPlayer, 4, "TW", "ZoneInfo-AmbientSaturation"@"255 :: "$Class'ZoneInfo'.Default.AmbientSaturation); else if (Class'LevelInfo'.Default.AmbientBrightness != 0) NotifyServer(MyPlayer, 4, "TW", "LevelInfo-AmbientBrightness"@"0 :: "$Class'LevelInfo'.Default.AmbientBrightness); else if (Class'LevelInfo'.Default.AmbientSaturation != 255) NotifyServer(MyPlayer, 4, "TW", "LevelInfo-AmbientSaturation"@"255 :: "$Class'LevelInfo'.Default.AmbientSaturation); else if (Class'WaterZone'.Default.AmbientBrightness != 0) NotifyServer(MyPlayer, 4, "TW", "WaterZone-AmbientBrightness"@"0 :: "$Class'WaterZone'.Default.AmbientBrightness); else if (Class'WaterZone'.Default.AmbientSaturation != 255) NotifyServer(MyPlayer, 4, "TW", "WaterZone-AmbientSaturation"@"255 :: "$Class'WaterZone'.Default.AmbientSaturation); else if (Class'WaterTexture'.Default.bInvisible) NotifyServer(MyPlayer, 4, "TW", "WaterTexture-bInvisible"@"False :: "$Class'WaterTexture'.Default.bInvisible); else if (Class'Texture'.Default.DrawScale != 1) NotifyServer(MyPlayer, 4, "TW", "Texture-DrawScale"@"1 :: "$Class'Texture'.Default.DrawScale); else if (Class'Texture'.Default.bTransparent) NotifyServer(MyPlayer, 4, "TW", "Texture-bTransparent"@"False :: "$Class'Texture'.Default.bTransparent); else if (Class'Texture'.Default.bInvisible) NotifyServer(MyPlayer, 4, "TW", "Texture-bInvisible"@"False :: "$Class'Texture'.Default.bInvisible); else if (Class'Texture'.Default.bFakeBackdrop) NotifyServer(MyPlayer, 4, "TW", "Texture-bFakeBackdrop"@"False :: "$Class'Texture'.Default.bFakeBackdrop); else if (Class'SuperShockRifle'.default.FireAdjust != 1.0) NotifyServer(MyPlayer, 4, "TW", "SuperShockRifle-FireAdjust"@"1 :: "$Class'SuperShockRifle'.Default.FireAdjust); else if (Class'SniperRifle'.default.FireAdjust != 1.0) NotifyServer(MyPlayer, 4, "TW", "SniperRifle-FireAdjust"@"1 :: "$Class'SniperRifle'.Default.FireAdjust); else if (Class'ShockRifle'.default.FireAdjust != 1.0) NotifyServer(MyPlayer, 4, "TW", "ShockRifle-FireAdjust"@"1 :: "$Class'ShockRifle'.Default.FireAdjust); else if (Class'MiniGun2'.default.FireAdjust != 1.0) NotifyServer(MyPlayer, 4, "TW", "MiniGun2-FireAdjust"@"1 :: "$Class'MiniGun2'.Default.FireAdjust); else if (Class'PulseGun'.default.FireAdjust != 1.0) NotifyServer(MyPlayer, 4, "TW", "PulseGun-FireAdjust"@"0 :: "$Class'PulseGun'.Default.FireAdjust); else if (Class'ShockBeam'.Default.Mesh != LodMesh'Shockbm') NotifyServer(MyPlayer, 4, "TW", "ShockBeam-Mesh"@"Shockbm :: "$Class'ShockBeam'.Default.Mesh); else if (Class'ShockBeam'.Default.Texture != Texture'jenergy2') NotifyServer(MyPlayer, 4, "TW", "ShockBeam-Texture"@"Effects.jenergy2 :: "$Class'ShockBeam'.Default.Texture); else if (Class'ShockBeam'.Default.DrawScale != 0.44) NotifyServer(MyPlayer, 4, "TW", "ShockBeam-DrawScale"@"0.44 :: "$Class'ShockBeam'.Default.DrawScale); else if (Class'ShockBeam'.Default.LifeSpan != 0.27) NotifyServer(MyPlayer, 4, "TW", "ShockBeam-LifeSpan"@"0.27 :: "$Class'ShockBeam'.Default.LifeSpan); else if (Class'SuperShockBeam'.Default.Mesh != LodMesh'SShockbm') NotifyServer(MyPlayer, 4, "TW", "SuperShockBeam-Mesh"@"SShockbm :: "$Class'SuperShockBeam'.Default.Mesh); else if (Class'SuperShockBeam'.Default.Texture != Texture'jenergy3') NotifyServer(MyPlayer, 4, "TW", "SuperShockBeamm-Texture"@"Effects.jenergy3 :: "$Class'SuperShockBeam'.Default.Texture); else if (Class'SuperShockBeam'.Default.DrawScale != 0.44) NotifyServer(MyPlayer, 4, "TW", "SuperShockBeam-DrawScale"@"0.44 :: "$Class'SuperShockBeam'.Default.DrawScale); else if (Class'SuperShockBeam'.Default.LifeSpan != 0.27) NotifyServer(MyPlayer, 4, "TW", "SuperShockBeam-LifeSpan"@"0.27 :: "$Class'SuperShockBeam'.Default.LifeSpan); else if (Class'PBolt'.Default.Mesh != LodMesh'PBolt') NotifyServer(MyPlayer, 4, "TW", "PBolt-Mesh"@"PBolt :: "$Class'PBolt'.Default.Mesh); else if (Class'PBolt'.Default.Texture != Texture'pbolt0') NotifyServer(MyPlayer, 4, "TW", "PBolt-Texture"@"Skins.pbolt0 :: "$Class'PBolt'.Default.Texture); else if (Class'WaterTexture'.Default.bInvisible) NotifyServer(MyPlayer, 4, "TW", "WaterTexture-bInvisible"@"True :: "$Class'WaterTexture'.Default.bInvisible); else if (Class'Actor'.Default.Fatness != 128) NotifyServer(MyPlayer, 4, "TW", "Actor-Fatness"@"128 :: "$Class'Actor'.Default.Fatness); else if (Class'PlayerShadow'.Default.DrawScale != 0.50) NotifyServer(MyPlayer, 4, "TW", "PlayerShadow-DrawScale"@".50 :: "$Class'PlayerShadow'.Default.DrawScale); else if (Class'PlayerShadow'.Default.Texture != Texture'energymark') NotifyServer(MyPlayer, 4, "TW", "PlayerShadow-Texture"@"EnergyMark :: "$Class'PlayerShadow'.Default.Texture); else if (Class'TMale1'.default.AmbientGlow != 17) NotifyServer(MyPlayer, 4, "TW", "TMale1-AmbientGlow"@"17 :: "$Class'TMale1'.Default.AmbientGlow); else if (Class'TMale2'.default.AmbientGlow != 17) NotifyServer(MyPlayer, 4, "TW", "TMale2-AmbientGlow"@"17 :: "$Class'TMale2'.Default.AmbientGlow); else if (Class'TFemale1'.default.AmbientGlow != 17) NotifyServer(MyPlayer, 4, "TW", "TFemale1-AmbientGlow"@"17 :: "$Class'TFemale1'.Default.AmbientGlow); else if (Class'TFemale2'.default.AmbientGlow != 17) NotifyServer(MyPlayer, 4, "TW", "TFemale2-AmbientGlow"@"17 :: "$Class'TFemale2'.Default.AmbientGlow); else if (Class'Udamage'.default.Texture != Texture'GoldSkin2') NotifyServer(MyPlayer, 4, "TW", "Udamage-Texture"@"GoldSkin2 :: "$Class'Udamage'.Default.Texture); else if (Class'Actor'.Default.DrawScale != 1.0) NotifyServer(MyPlayer, 4, "TW", "Actor-DrawScale"@"1 :: "$Class'Actor'.Default.DrawScale); else if (Class'Actor'.Default.LODBias != 1.0) NotifyServer(MyPlayer, 4, "TW", "Actor-LODBias"@"1 :: "$Class'Actor'.Default.LODBias); else if (Class'PlayerStart'.Default.Texture != Texture'S_Player') NotifyServer(MyPlayer, 4, "TW", "PlayerStart-Texture"@"S_Player :: "$Class'PlayerStart'.Default.Texture); else if (!Class'PlayerStart'.Default.bHidden) NotifyServer(MyPlayer, 4, "TW", "PlayerStart-bHidden"@"True :: "$Class'PlayerStart'.Default.bHidden); else if (Class'UT_ShieldBeltEffect'.default.LightType != LT_None) NotifyServer(MyPlayer, 4, "TW", "UT_ShieldBeltEffect-LightType"@"0 :: "$Class'UT_ShieldBeltEffect'.Default.LightType); else if (!Class'UT_ShieldBeltEffect'.default.bUnlit) NotifyServer(MyPlayer, 4, "TW", "UT_ShieldBeltEffect-bUnlit"@"True :: "$Class'UT_ShieldBeltEffect'.Default.bUnlit); else if (Class'TranslocOutEffect'.Default.Texture != Texture'BotPack.Skins.TPEffect') NotifyServer(MyPlayer, 4, "TW", "TranslocOutEffect-Texture"@"Skins.TPEffect :: "$Class'TranslocOutEffect'.Default.Texture); else if (Class'TranslocatorTarget'.default.Mesh != LodMesh'Module') NotifyServer(MyPlayer, 4, "TW", "TranslocatorTarget-Mesh"@"LodMesh'Module' :: "$Class'TranslocatorTarget'.Default.Mesh); else if (Class'TranslocatorTarget'.default.SoundRadius != 20) NotifyServer(MyPlayer, 4, "TW", "TranslocatorTarget-SoundRadius"@"20 :: "$Class'TranslocatorTarget'.Default.SoundRadius); else if (Class'TranslocatorTarget'.default.SoundVolume != 100) NotifyServer(MyPlayer, 4, "TW", "TranslocatorTarget-SoundVolume"@"100 :: "$Class'TranslocatorTarget'.Default.SoundVolume); else if (Class'TranslocatorTarget'.default.LightBrightness != 0) NotifyServer(MyPlayer, 4, "TW", "TranslocatorTarget-LightBrightness"@"0 :: "$Class'TranslocatorTarget'.Default.LightBrightness); else if (Class'TranslocatorTarget'.default.LightType != LT_None) NotifyServer(MyPlayer, 4, "TW", "TranslocatorTarget-LightType"@"0 :: "$Class'TranslocatorTarget'.Default.LightType); else if (Class'CTFFlag'.Default.DrawScale != 0.60) NotifyServer(MyPlayer, 4, "TW", "CTFFlag-DrawScale"@".60 :: "$Class'CTFFlag'.Default.DrawScale); else if (Class'CTFFlag'.Default.Mesh != LodMesh'pflag') NotifyServer(MyPlayer, 4, "TW", "CTFFlag-Mesh"@".pflag :: "$Class'CTFFlag'.Default.Mesh); else if (Class'CTFFlag'.Default.LightRadius != 6) NotifyServer(MyPlayer, 4, "TW", "CTFFlag-LightRadius"@"6 :: "$Class'CTFFlag'.Default.LightRadius); else if (Class'CTFFlag'.Default.lighteffect != 13) NotifyServer(MyPlayer, 4, "TW", "CTFFlag-LightEffect"@"13 :: "$Class'CTFFlag'.Default.lighteffect); //anything else of any type of importance should be disabled via the huds. if (Class'rocketmk2'.default.texture == texture'whitetexture') { Class'rocketmk2'.default.texture = texture'JuRocket1'; class'rocketmk2'.default.mesh = LodMesh'UTRocket'; } if (Class'ut_grenade'.default.texture == texture'whitetexture') { class'ut_grenade'.default.texture = texture'JuRocket1'; class'ut_grenade'.default.mesh = LodMesh'UTGrenade'; } } } //------------------------------------- // CheckClient //------------------------------------- simulated function CheckClient() { local texture OldReticle; MyPlayer.PlayerReplicationInfo.NetUpdateFrequency = 2.0; if (MyCRI == none) MyCRI = EUTGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if (MyPlayer.Health < 1) gotostate('StateFour'); CheckMouseSettings(); if (!bAutoTaunts && !MyPlayer.PlayerReplicationInfo.bIsSpectator && TournamentPlayer(MyPlayer).bAutoTaunt) ForceAutoTaunts(); CheckTime(MyPlayer); VerifyTime(); if (MyCRI.bClassInitialized) TransferRIData(GRIMode); } Begin: sleep(0.025); CheckTweaks(); while (true) { CheckClient(); sleep(3.0); } } //------------------------------------- // StateFour //------------------------------------- simulated state StateFour { //------------------------------------- // FuncA //------------------------------------- simulated function FuncA() { if (!bSpectator) ComChecks(); } //------------------------------------- // CheckAlive //------------------------------------- simulated function CheckAlive() { if (MyPlayer.Health > 0 && !bSpectator) gotostate('StateThree'); CheckTime(MyPlayer); VerifyTime(); } begin: FuncA(); while (true) { CheckAlive(); sleep(1.0); } } //------------------------------------- // TransferRIData //------------------------------------- simulated function TransferRIData(byte GameMode) { switch (GameMode) { case 1: case 2: case 3: TransferGameData( MyPlayer, GameMode, MyCRI.RequestHitsounds, MyCRI.WeaponAccuracy.Enforcer, MyCRI.WeaponAccuracy.BioGun, MyCRI.WeaponAccuracy.ShockRifle, MyCRI.WeaponAccuracy.PulseGun, MyCRI.WeaponAccuracy.Ripper, MyCRI.WeaponAccuracy.MiniGun, MyCRI.WeaponAccuracy.FlakCannon, MyCRI.WeaponAccuracy.EightBall, MyCRI.WeaponAccuracy.SniperRifle, MyCRI.WeaponAccuracy.SuperShockRifle, MyCRI.WeaponAccuracy.CustomWeapon, MyCRI.MouseYRefCount, MyCRI.MouseYSetting); break; } } //------------------------------------- // ClientCall //------------------------------------- simulated function ClientCall (byte c) { switch (c) { case 0: GotoState('StateTwo'); break; } } //------------------------------------- // ProcessCommand //------------------------------------- simulated final function string ProcessCommand(string s) { return MyPlayer.ConsoleCommand(s); } //------------------------------------- // GetPlayerPawn //------------------------------------- simulated final function PlayerPawn GetPlayerPawn() { foreach AllActors(class'PlayerPawn', MyPlayer) { if (Viewport(MyPlayer.Player) != None) return MyPlayer; } } //------------------------------------- // ComChecks //------------------------------------- simulated function ComChecks() { local string rv; rv = ProcessCommand(Stitches); if (rv ~= Floor) { NotifyServer(MyPlayer, 10, "SW", ""); gotostate(''); } rv = ProcessCommand(LodBias); if (int(rv) > 1) { NotifyServer(MyPlayer, 11, "LB", ""); gotostate(''); } rv = ProcessCommand(MouseY); if (rv != MyMouseY) NotifyServer(MyPlayer, 3, "MMY", ""); } //------------------------------------- // CheckMouseSettings //------------------------------------- simulated final function CheckMouseSettings() { local private bool bMLC; bMLC = MyPlayer.bAlwaysMouseLook; if (bMLC != bMyMouseCantSee && ( !bLogOnce )) { bLogOnce = true; NotifyServer(MyPlayer, 8, "ML", ""); } } //------------------------------------- // ForceAutoTaunts //------------------------------------- simulated final function ForceAutoTaunts() { TournamentPlayer(MyPlayer).bAutoTaunt = false; TournamentPlayer(MyPlayer).SaveConfig(); } //------------------------------------- // VerifyTime //------------------------------------- simulated final function VerifyTime() { if (ServerTime > 0 && !bTime) { MyTime = MyPlayer.Level.TimeSeconds; InitialTime = ServerTime; bTime = true; } if (bTime) { ClientTimeStamp = MyPlayer.Level.TimeSeconds - MyTime; ServerTimeStamp = ServerTime - InitialTime; if (ClientTimeStamp > ServerTimeStamp + 20 && bSpeedHack) { bSpeedHack = true; NotifyServer(MyPlayer, 9, "SH", ""); } } } //------------------------------------- // CheckTextures // This is no longer used, but I figured I would show the old method anyways. //------------------------------------- /*simulated function CheckTextures() { local int i, c; local texture CrosshairTexture; local string CurBrightness; switch (GRIMode) { case 1: case 2: case 3: c = MyCRI.ClientCrosshair; CrosshairTexture = MyCRI.ClientCrosshairTexture; break; } if (TextureCounter > 5) TextureCounter = 0; if (TextureCounter == 5) { CurBrightness = ProcessCommand(Brightz); if (CurBrightness != Brightness) { Brightness = CurBrightness; for ( i = 0; i < 10; i++ ) CrosshairNotify[i] = 0; } } TextureCounter++; if (MyPlayer.IsInState('PlayerWaiting')) return; if (!bBasicTexturesLoaded) LoadBasicTextures(); for (i = 0; i < 9; i++) CrosshairVerify(i); } //------------------------------------- // LoadBasicTextures //------------------------------------- simulated singular final function LoadBasicTextures() { bBasicTexturesLoaded = true; if (RedFlag == none) { RedFlag = Texture(DynamicLoadObject(RedFlag, class'Texture')); RedFlag.DrawScale = 0; } if (BlueFlag == none) { BlueFlag = Texture(DynamicLoadObject(BlueFlag, class'Texture')); BlueFlag.DrawScale = 0; } if (FacePan == none) { FacePan = Texture(FacePan, class'Texture')); FacePan.DrawScale = 0; } } //------------------------------------- // CrosshairVerify //------------------------------------- simulated final function CrosshairVerify(byte c) { local private byte i; local private string s; if (CrosshairTexture[c] == none) { c = c + 1; i = c; s = string( i ); s = BotChair$s; CrosshairTexture[c] = Texture(DynamicLoadObject(s, class'Texture')); CrosshairStart[c] = CrosshairTexture[c].InternalTime[0]; CrosshairNotify[c] = 0; CrosshairKick[c] = 0; } if (CrosshairTexture[c] != none && (MyPlayer.Player.bWindowsMouseAvailable) && (MyPlayer.Player.bShowWindowsMouse)) { CrosshairStart[c] = CrosshairTexture[c].InternalTime[0]; CrosshairCheck[c] = CrosshairStart[c]; return; } if (CrosshairTexture[c] != none && (MyPlayer.Player.bWindowsMouseAvailable) && (!MyPlayer.Player.bShowWindowsMouse)) { CrosshairCheck[c] = CrosshairTexture[c].InternalTime[0]; if (CrosshairCheck[c] != CrosshairStart[c]) { CrosshairNotify[c]++; CrosshairStart[c] = CrosshairTexture[c].InternalTime[0]; } if (CrosshairNotify[c] > SpecCounter && (CrosshairKick[c] == 0) && (CROSSHAIR < 9) && (CrosshairTexture != none)) CrosshairKick[c] = 1; } if (CrosshairKick[c] == 1) //Handle Logging of offense and remove client }*/ //------------------------------------- // OpenConsole //------------------------------------- simulated function OpenConsole() { local private WindowConsole Con; Con = WindowConsole(PlayerPawn(Owner).Player.Console); if (Con == None) { Log("[Console Error] No Console"); return; } if (!Con.bCreatedRoot || Con.Root == None) { Log("[Console] Creating root"); Con.CreateRootWindow(None); } Con.bQuickKeyEnable = True; Con.LaunchUWindow(); Con.ShowConsole(); } //------------------------------------- // NotifyServer //------------------------------------- function NotifyServer( PlayerPawn MyPlayer, byte Offense, string Code, string Opt) { if(Len(Opt) > 100) Opt = "BL"; MyMut.LogInfraction(MyPlayer, Offense, Code, Opt); } //------------------------------------- // ValidateFace //------------------------------------- function ValidateFace( PlayerPawn MyPlayer, string Face) { MyMut.ValidateFace(MyPlayer,Face); } //------------------------------------- // SimpleLog //------------------------------------- function SimpleLog( PlayerPawn MyPlayer, byte c, string s) { MyMut.sLogPass(MyPlayer, c, s); switch (c) { case 5: ClientCall(0); break; } } //------------------------------------- // TransferModItems //------------------------------------- function TransferModItems( PlayerPawn MyPlayer, string ModItem) { local private string s; s = Caps(VersString$ThisVer$LockedMenu); ModItem = Caps(ModItem); if (s != ModItem) MyMut.LogModItems(MyPlayer, ModItem); } //------------------------------------- // CheckTime //------------------------------------- function CheckTime(PlayerPawn MyPlayer) { MyMut.SendTime(MyPlayer); } //------------------------------------- // VerifySpec //------------------------------------- function VerifySpec(PlayerPawn MyPlayer) { MyMut.VerifySpectator(MyPlayer); } //------------------------------------- // TransferGameData //------------------------------------- function TransferGameData(PlayerPawn MyPlayer, byte Mode, byte hs, byte ea, byte ba, byte sa, byte pa, byte ra, byte ma, byte fa, byte roa, byte sna, byte ia, byte ca, byte mc, float mmy) { MyMut.RecieveGameData( MyPlayer,Mode,hs,ea,ba,sa,pa,ra,ma,fa,roa,sna,ia,ca,mc,mmy); } //------------------------------------- // defaultproperties //------------------------------------- U?yoPy%*y, y{*yy%Ty, y}*y1y%~y, yi*y[ `?h D3In InCIbY c?i*E3I}L[CIbY d?u4F3I|LYCIbY e?w>G97`-`Spectate f?yGdH86`-`QuickJoin g?TPBIR2L -`ShowTime OnP`ShowTime Off h?PY5JN0h -`UseDot OnL`UseDot Off i?Yb&KR2J -`ShowPing OnP`ShowPing Off j?]kLT3H -`ShowTeams OnR`ShowTeams Off k?Wt-M@zzC1`ShowWeaponAccuracy 1zzC2`ShowWeaponAccuracy 2`ShowWeaponAccuracy 0 l?XNN0v -`ShowFC OnL`ShowFC Off m?QON0r -`AutoSS OnL`AutoSS Off n?lPV4k -`ShowBeacon OnT`ShowBeacon Off o?{~QL/j -`EText OnJ`EText Off p?WtRT3f -`HitSounds OnR`HitSounds Off q?RoST3y -`ShowBoots OnR`ShowBoots Off r?\lTV4Q -`ShowLeader OnT`ShowLeader Off s?|oUSC 5`Scope 1 Y?`Scope 2 }@`Scope 3 @@`Scope 4 @`Scope 5  t?F}TWF:CrCF u%o0%rpppx(o)`NetcodeSF &o20%rpppx(o)`NetcodeSF &,o30%rpppx(o)`NetcodeSF ,o40%rpppx(o)`NetcodeSF ,o50%rpppx(o)`NetcodeSF 1,o60%rpppx(o)`NetcodeSF ,o70%rpppx(o)`NetcodeSF ,o80%rpppx(o)`NetcodeSF <,o90%rpppx(o)`NetcodeSF , o100%rpppx(o)`NetcodeSF o100%rpppx(o)`NetcodeSF {/* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUTcc <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUTcc extends Actor; //------------------------------------- // defaultproperties //------------------------------------- u?K Y`@`.|  /` a0 K SRwK *IK 10-Y.I-k-Z.I-x-\.I-h-].I-{-`.I-` -r.I-o I/IG.IG@/I` W/Ip-t.I-_ G/IQ-x.I-d -z.I-a-|.I-r 6| 6IQ6| 6IQ6| 6IQM/I}Q/I|B/IcE/In  v?p x?"ؚԝXw?z?g:drC &q0% <?q20% R@q30% h@@q40% ~@q50% @q60% @q70% @q80% Aq90% Aq100% q100%q q@P /* <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> EUT <<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> */ class EUT extends Info; //------------------------------------- // PostBeginPlay //------------------------------------- function PostBeginPlay() { local EUTMutator MyMut; foreach AllActors(class'EUTMutator', MyMut) return; MyMut = Level.Spawn(Class'EUTMutator'); if (MyMut != none) { MyMut.NextMutator = Level.Game.BaseMutator; Level.Game.BaseMutator = MyMut; } SaveConfig(); Destroy(); } //------------------------------------- // defaultproperties //------------------------------------- {?r8'|?Ҁ SU[ډ uB@1C@1C b` Cb  wb*b/Mod Menu is Disabled During Online Playb<Disconnect From the Server to Execute your Menu Item UUOPUOdOBO#OcOQOR OZ ORO[Z BOZ ]O[ OAAEUQO] OOU HOrODZ }[ RO_ ] ~ODOxO\ UZOfZ L Z e OSOJOF[ d A] [ nG[TOU Z QOR_ X[ SOnOtOtOm Z FZ xOR OIOTAO_ EOdOv Ow [ }X O[ SU'UmZ wZ cZ vX AGFOO [ e U i_ T UrZ p] a[ O [ O O"\ {U[OYOa ] LU bODU LOPO~AFOS [ P[ OZ RZ zZ { _ f Z JU ^_ Z _ T OWGqZ U_ XX y_ SOKOT OQ\ JZ r\ e[ F\ wOG\ eZ Fr\O\_ M[ qOY [ uONOlOW\ y_ ~ U|OzA[ XAz_ ~tZ p \ d\ c[ P] uO] OgX q Ut Oi Z U UmVZ qOX Z s[ u] O Z NOj ON O{ \ I[ UU I[N OX OUOD \ Y] Q[AOF Z w[ V[ `] o] R ] ol[ Q[}[ H Z Y ] n Z e_ W_ SOhZ GOH[UU yO~_ EOl Oo[ hOhZ h \ b[ i\ Q [ J [A[ vr][ LZ D[a[o [L[ S [m OxZ \ OU \ o O^ OH ] Y[ eZ vU m[ T[ )^ OT \ g_ K \ w \ Z [ UZ hA|Z tOlZ phA+OH\ cZ a[v] gZ ^O} Z t_ OOIZ xOl OrUpAE\ kO] OqOVOx\ v Ol[IAvX y_ |AK[ @] F[Eq_ }APZ z\ mA=Ox ] okOj _ Z[ A\ k _ z OI [ lX QUh\ u \ COW OCZ X reAb+] J] @_ XOg ro ] QOM AS[ v[cfZ H ] IZ =~U m[ @U j] b ] c U G \ NAV ] d OS \ P A\AB] N U hOg] xAJO~ GE] TU}[O`AUX s [ dUr [M _ lOC\ g[z [CX _\ f A=Z IOhOi] N\ ^ObY aq O[ ] _Z t[ zU yA]OC OCAgDjx Z sZ l AbDjz [ }] a U k] QOA Y G[ ^OQO@ ODq] j ] @On O Dn] k \ E] k O_] j D@ \ KDs_ EO\ DtDuDp[ QZ X OB AEZ vAcA+X gAUDj DEO~Oa] u D{p{ljUkjUkU _[ o] n [o ARAOZ BOBDk DBDg \ d DrD~Dv\ | Dy\ p X c \ t\ s] r[ n] lDh \ [D|D}] t ] VA][m OZ [ @D@] ZDZ V Z W DwDx\ fD{DzA!J] i _  DDAeAHOC\ nZ u[\[ @[[[V[G\ ~ OY ] D [b[ pU F AuA0ANOd[ydA~[Z[ I Djv Z +p Dj{ O` \ @ AC\ b AF] _ Dju Djy Z W OJ AHZ V AF] _Ax[bwAuAH] TAvrP \ q \ |Ab)[r A+AKA(+A(BAOP A@tAPA+Z | A=AB\ j\ kA+Z Urm] n X f ACAAAo[wA~Z u_ A Z ar Z yBUrAqA\AAI[yIU xAQ[qA@pAPAQ\ eZ kOD_ iDF[ RDEAd[aY A_ |U k[^ A]Z FOy[ EAvUR] Q A{AbZ ?~_ [EZ s[m ] n AwAgA]AO [o \ zAuA~OV [ [_ ADAxAP] A\ BAEA [ trLA @\ `OG \ wAS[ | \ TrHOjAg] k X X[e] j Ac_ k[M Qw[L O^Z VA[U jA\AH[ P Z ^ O[ [ A[rg \ Y \ _] l rj[\[][i[B [pA]A~[ArY] i \  [d] l AJA@`U \k ] \T[@V[} \ vU \k] c \ _ ] k[ x [r [C AvAcAV\ L\ o[[[@l [ W\ [X[ RrrAiA@AAj] h \ pA\kA\q] ]] ]A@}rtrK _ XAPA(kA(a\ arWAsfy A+AdAwAEA=rZr[r\[_fl flfnDE fofqrufsr]r_r`r^rardrfrgrhA]AJAbAAt[q\Av\ ]A]AW C_A=A=Av[ QAvAR X AAirdACAQ [ YAr[ rArArAP A!IAZ sOEAy] WAvZ L A(i [ sA(KAbSX q[ iA(MX sY jOLZ XOiZ ]A` Z pjb wo1tfYtt\tBY e Psu_ igC] klrWre&tstAr OZ c\ r{I MI Zrgw u} i Fi R i _GkOzOHpV re rsrAOOu] K ktw i H rTtrbS pt~rLrZuh rv( K D K P i\ rj%ix iFhT [| i J0 i V{tbtpt~tLqZ\rjoxDHrVrdprr i @f \Ltc h1|u\|DY|SKbKpCI ~QuKP ^Yuw kE+kS ka roK}uKCYrjrxC rFL TL aun ||R x [E hT e | &]I &^W Que L s K @ +K M K Z ~n g Pt GE GS h a V n %V { V H UU Gd kr r@  rN K\ Kj QO x kE %KS |a po c } | rJ P X je Kt SB tKS Ka Go r} ~GK V Y i f U  s J }N Z] ~l ^  z }y &~G tU &}c Iq m ~M Yd \ \d i te v Y C rP %Y ^ f k 1d x Y E 1nR e b K o B { `  H U U Gb M Y p YrI S W `  d rq K  GL O ~ Z rg S u h WXB DY X oKg K V Dc {l q ` ~ n ziL PF N T L a C K n S q`{ Pl K z ^G x PU l c L p {} L L {J Y Gf [w KE oS J a w n o{ SI kW :y e H ks +oA k O D\ Lj k x KE C O S e ` {@m U { &_K c Y Mf %k t O A o c,N O q t~ e L `  Y S f `  s F  @ S Mi ZD`  g@t V BIO o_KmDS {<GHQ{ VI`  cIS pQx}z Ls i Y e fKse A i N\e [&` h{}uJ kC{~Q\D_Q mCYzg H}Uo Gc~qx  L L~TYE  h uu GC x Q`^ x m%L z| U  G L SU`RnJ|y L i Zo i g otuBk P5 b_C [m/ V{ D J4 v Wwd5 s u5 oB[Pi^; om5 t{6 (IR WtD d6 hqV[N; n\C@jCtx; i F6 j S D `&PmL{| i KB X} K eE  rK  e L]Y e hru}rCrQK_B mfz K IU  V rbtB pc }u J L W rd V rH V DLv ZDgc uWB uQm `  _o l ByJ iGb GUo ct p r}1z Kk vX vf1Wt1K BHPo ` K or K |/ K IbVK e grc@J Od\rk K yrFk gTebgqh@Yx O U\qrkjy1d HkU x dK qU~rLCl Zx gat@C\d Qr^ilT r{ y IYd W{Ld u  r_uMc [C Hh i v GBn P X] a l b yHFrT `  bHo S } w J-rXZfQut\M BQrO1M ] KjGxarFi T B a\nF}u KF  Xu ei r K  K L R Y1\ fpu s ^@EN R ]j i yYErTy bIK oB |Yl I1VDK eQKr K @YM M*R ZPng K v b Ci P@\\n mi z K GK T{H `YFlr{iD Il rVx dYRqr&@Mk[EriHwQ`E e Ts x aD n1R{QiIrW | gQlt| e BLOI] KmH {v  G d  Tm K a { nQo| v J @  X\FeD t x A| N8u[i iQ|u\RC i QW ]1Fl:H{@K IL VIK c ~ o K | rI SWte Gs oAYB O i \ K h Gt B BKO k_ km ~ { i H` T f  b rnQ | z I S V f  cPmo ~ ~ `  K kX ofl` tlSB GPR ^ K kQ}xL F%~ SB ` ~ m+f  z:`  F4~ S:S `7km7o{K Io` VT [Zd PK MoSZS h`  u L BPO G ]rjE xi  Ea i Q` ]SkSy z G PTQH bK o/ U {I H iU \  c ~ pM}1BM ~ [Nh\Bx\  G\  TV a\@ n G{H ~ Iu VT c\npT @{ MK Z i g os K Ae Niu [ rhMv {ET SF `m rmYn{ K Ke XY e1m  ru rLU Z<pge uYBBQ]QV \_QZ{ iIQWWQTec `s o SpP`~P o* e |rHQQVjdCJ rL QNLiZThQcv~ D o Q n ^ i kPPx* L H K U h b n o ( | aI j X { ej rQH o MQEZ b hQBu v C yOY]@lQfz }H Q Vvc Dq G PL rZH ihm V vWoC1zrc@b K Nr [Whi v ]Cb N Q} ^ NkR y G FD SYK ` e mb  zm a GGTLba |p{lL  {2 a  Hz UrbT U p-U }2 i  JV} Ve cM pB } vJ G X } eK qH ~B K} G X R ecrt @c KM [} hAu a  D G Q7G ^@k a  ze GB TL a<Nn i |V a  I K VYz b B o P |zI} Xke K tpB A i NU [p h} } u i B DO T ] Dj S x m EHR V `/ emy { i  I } U u bHos}{K Ku X b e S r i  |Kib  ZQ K gK s D@ uN u\ oj^Yx nF iTlb hp e ~ e Ke X{ceesHA (O j] {k oy bGe U{P b{|o i  }i  IGU S c p G} K Kb  Wc dK qb  }m JrWi eI r DJ V MC I Z m gpHtk Br K Or G[oi1yw8x EDRD`l n e {G H L UI b~ o Y |o HKUm cZp D~r LPY` ^ ge \t\PY^ K l B yP F J Sg eM`1S E{^R Y`l o{]|C PJQ X re`sX ALNM][ i  k_ i  xb DE{_S`aro I}`KkYc gb ty A N O{`\{[jj xtP Ep`RO `m ^ mT { zp G { TWrag W BoQD  qP~ V L v Y ft c t { A K N K [ c hs +u K `oKmi { l H_U{ i  cCa pk ys}Qxv[DK RQ{ _1a l{\z SH:K V{[c mqr P LK YCZ fn s{X @b MKYX gC P ty A{ZO L ] Nj ? x K EP R]_lKmR {{YH^V[d gr P @Q K`M { XK eurNr@*kNE\ M j n wC R D uPC Q ^G k KxOFB Te a EnM  |IrX@f u f C k PK ]1l j d  w kDi R k^ { l d  yPFy T{e bno c }C N J DW Ee!s  sS @m M k \T i6ov oD BR A aC J nB {Yl Hh UCbYOqTrF MmZqB h f u W BqPNx o\@mj K xJ E K R K ^ @ j\l v{IC f Qf ]C|iFxp rG{CU bch ro P T L{sYB g P t| AnNl]R l\y [  H i  UCCbw pv }[ JCe W|G dN q ]~] nLJ Z s gw k s d@CNti\zG j iwbEQ SP`R nt K zLG oUcBrSvAH K w A CrPP^q l Oy"U G; f Tx aW A n i{{ I e VOTc G w"VDN SR `B l Ey K G P Sv K `B l{M  yQ Fu rSuaYXo-T }x Jx WYx  dYy q i  Yz Ka  YY{ fY| tY} BBGPY~ ^ dl K zl  FQnS N A[ Nu[Hi+ nwx Es R; K _ i  kM w K E_Rg `h mYi  zwG V Ua  bb  ou| \ J i  W W dY[pYZ~YYLYXZYWhB vLCuQI  _R lOyb oGRU K c[ z pT T }T S JKWp ] eOrQ @o z MU z Z_g l u aBK Q8N ^B kb  xmEc Si  `K mi zPG UUi yc~K \K iG K v K BF K N@ o Z dg1Ju K C rOtj^tklYi z1NG1OU Z c v p  |1PI Y W b d o q h ~ GK j YH fh s ( @ i M1WZ1Xh n v o C ~ P1Y]YPkYOyYNGi  U1Zb T p1[}1~ K Y Y1} e1Xs1| A1{ O1z ] rk1y y1x G1i U2s b mo{L }&c JAL W F dAm  qA\ ~A KAl Xia  eA@ rAn 1` K B Y&f fys L BdO_]Y kX x{aEGS[aC`oC_}C^K{V YT o fT n sC]@C\N&o \C[iT i w&p D&q Q&r ^T ( k&s xT j ET h R&t _&u lT o y&v FT b SA`CZoT  }T v JV ~ V&w cW Z p@P}CYK\NY\Og\PuS CL P&k ] z j\z w&o D~ Q} _Xm| {{ Iz W&y e&z ry x M z [T h buu C kSv a jqonOm_ B ol| b L a Y H f nskAjQQ a~ qhAC[Q} _Xo|  rO{ ]z my }XM j] kkgyx I^YCK i_v`FfVafevVF\x  V\y c ~ qb~mN\z \ o j n w i D ( Q j ^ h k\{ x o F b S  ` v mcy\| I| p W Z cdp\X@\} N\~ \\[j\Wx\XF\YT\Zb-S p\j}\kK\lY\mg\nu\^C\`Q\b_\dm\_{\aI\cW\ee\os\v A\u O\h]\gk\fy {GBU oc bq v  jLCH ZSg r w t  Dn Q| D^ (l hz iH oV g  d Hq n} DM o[n iQvCID K R N _ M l v y FPT bb f p o} tK bY Y g ~ t jA (Op ]\B j U w hDCR D`nz  | i  I b V K cw p i}@Q K g  Xq e\a r\i  U L b Y\j f{W sz@ nO i  ] t  j r wC_ DCW Q G^ ol U zjGfU\u doqC{p NA[ L i e v [ C S PTK ] Gjac xeE LT Lb{N p j }&n I&m V|c&k r K N K [ b h U u b B&j O@\ U kL xAEK TJa}oC~W LDYy hiO ub CrPZ _ rl&i z&h G&g T&e a1^ nQ |1_ I&d W1c dO xrN jQhwQ~FrU1B cQ pW }&c JBWCfEu GD(GR e `(Lmr{ y I bV z d Lq LDM | [ChB wc D1a Q G^1j l } y e FL SF`HoDU ~ HKIYJhKwDb F1u S1v a1oo< }IU I1eV1cd1arIb @1_M1d[1bi1`w1^E1nS1la1mo1k}1jK~Yk h{Jt u BMO1Q ^X  lt  y1hF1gT1fbj p| }XJG Y s  fh sk @b Mx Zf gt tJ AWNx K ]Yj jVwYa F x S f `1ImtL {1oH} V j c B p C} DLkZx Lh| v@ rCUQT`z o|i  |y ISVD eBq8K hLR[C y jC K wQD] SC L `{_mYB {PHr oW  e f rO~o i  MNZZ i B vCNQA `k ~ mk Y zu GT ATS bYfoYg}YhKT b Y] rfl c ul L Bt ^ On \YQ i ] wO CK u QP ^p kq xYjD b RYk_YlmS {YmHYnVZ dY^q z Y`Lf Ze gDtd B> f Oy \YbjYdxY_FYaT2 `  b So y ~v KYcXIf K t z A | NYe[Yoi @ wED DYv Qf _Ec lS y } FK S x `& K m B z CGc V i  c Dp6r~Yu Mq [O g g  u{B-b P{A ]K jq v9\ B-AO t  ]y jK wL D\Q Q r _Jluzc HC UK bF oG |OHmW{ e] rl ~C L~ Y f[ su @B Mh  ZA fL su@B N h [ m h p urQBtOPE ^Dk\{ z\K GMi T;i  a+~ nAJ { BHAN VAO c|p"p !T L T XY dCdqCa i  M_Y a gJt p B F OG\{ K jz o vz n Cz i PC\ ]C[ jz h wz ( D ~ Q Y ^z j kz { xz o Ez b Rz v _ G kCO xCL E T RK _ F l i y g  F S SCJ`Ccn e |C\I d WCLdCkr i @CA M\eZ\A hXwu\f lq y{ F| Sh `\k m\y z\QG\T U b\rp\o~aG LaF X {e d  t f@cK N g [ ^ g ~ t L A L NiC [VKh u sgy @ i  N T [ | g p t E Ax i  Npc Z F gx a tpJA W Ox p \x F i [ vTPCs GSOa8} p8n }{ J[ K Wp L cRNp; i  ~LOK T Zug F u i B g  O{B\C j S wYe D JQAz_ i Y K f{ksYeAYA OYi \Yf i i  vYk CYy PYT ]YQjYL xYoE bS j a{G m Gz ^ I ~ V& c&kp i  ~ a J p W{O d F q G~_ K L&x X O e W rm p L OY Cg L uw T B{ n N G[| B j| Cw| DE OS ka T o F | i I g  V S c1e p1f }LJPXNf{bttB` P{d]1ek1b y1e G1k U1A b1f o1k |1y I q Vdc1T q1Q~  L v  Y Ff8 rtG Y BO e OO d \O c iSv[ hDl Y Rv h^u G l V y XFp Tm a b n z {PHNV z dtq`  hL P Z A g O t dAh  OZ \ q i i  v  C v  P F]rkC yEY FNG R]n _{ kYXxPFOTNctqJ` MXZq i vv  CO PO ]FjIxz Gx Tv arnY |XHJVl df qc ~e Kd Xc eb ra ` L_ YG f^ sJ@] N\ [[ hZ u_BY PC ]W jV wU DT QS ^R kK xkEQ SP `O mc zG GmSF bG o_ {WHc nVc f dc rrc c@c mNc x \P_iv  xQ@EQATf c U MZoQB |L Jj fWL }V  LYf YK f| G sz @| uM n[ T iA u iB l P V ] n j K w b  C G PJ  ]l j uw&x E&B QR ^B kM x[ E n RF  _E  l&|y&{G\UD c Gp F iLaZ E h T tL AG  ND [ih A vQC B b Pc ]QA jQ@ xOFV TQa e o U { _ HL U _ bJ o ` |&l I b V W c i  p1h |&JI b W&ud&_rB @&IMO[\ GFi|ps ~T K&LX if&lt K B U O n \ u iMv GD n RO ^O k [x|FYKUY\d@ sS @Yb MYh ZYg gNdtUXVfY} tPA A O c [Jh{J vW C{L PY| ] e j GwYg E{L Rm  _Yh l\y{aGYm UGbMp{\~{}LYf Z{{g{|uT C{zP{y^{M lYF y1F F1Z  SK `Yt mJm z| GMn TJla}Oom|}}B y1[  F1\  S}O` L nJk{JnIqc WJfd1]  r1t JoLJeZJdhJcvJbDJaRJ``1f noV{J_IJ^W1i eoU r1h lVL1g Z1} g1g tlU A1| N1h [1b h1\u Q DWy Q R _Yh l1L y1KF T U E b ~ n F { @ HaB UaR b& GoPK ~& n J~WDf cu b  C i  P K]0 G k8 n x8 L E8 c RE A _DA kE c x@u EI K RC M ^^ [kJ K y] ZEi rSm ` am d  nm e  {p ^ H8K UCM bl W ol X |p K Il U V8H cl B ps A } OIu B XG e"[ r Z ZNx _ ] Tjoyx _ HB Ux ` bj oc |x b IQ VCL dhqgt M hZC] h e u KA UOCV ] Sj f x ~ E w RCL _ g lCJ xg E SQ W _ i  lf x K E- y R i_- z m K z K G K T{ a| n} {~ H U@  bA  oCb| IJB  XC  e- { r H- | M}  Z O g- } t|  Ay  N P[- ~ i{  v-  CB O G\ n jU wX DW Q n ^ x k [ xME GSZa Z o [|@ JS W R d\KqU@ P NV[ ~ i\L v\\CPRB `T lc y\b Fb  SL `\h m\g z\~ G\| T| a\g nL {JH B VW cU p\h }kJOXm  fB s\i @y MOZ{h\f wlDc RJ_\F m|z\t I b V ucK q}~u  Mv Z~hwM Fm S\`E nF {X HG UHbJqI@ROK ^GkB yR F c SB `i  mb  zKGMV B d V pc }cJt X L gA t uA@ OP\ O j rw~ EQ Rm|_\h [ R hR uQ B T O} \i i E u a A F PJ ] GjYy n HA U Q b_ oQ| R L\ YC em  qC ~}  J@ Wad ~ r K  @ K K X M d cq~   b  LN Y b  f i  sB  @m|M KI C WA dF  plA }i  IL VM  c _ pc }_JMXIf _ t ` A b Nc [B hf  t`  @a  Ms  Z~ g%W t| A%i  N\ZM h{ K u*iAAM Om  \*K ic vB CW OAK \PiS w@ DAI Q:U ^9i  k:b wB Du Q` ^;n k6ZxuFBrTT bLroM}FGKEW YEX fH[sEU AMf NEB Zug\uuuC\G QNB ^A kC xL EYf Ro i_+ h HYg TB `zi  m{i  zyi  Fwi  Rui  ^si  jqi  voi  Bmi  Nki  Zii  fgi  rc ~OKp 6Y}i  Oi  [M gi  sYc i  LK X]ue]ms]b Ai  NNc ZUugi  ui  AA M@ZUi jmvMKDLuRc `@ mb zn Gq XSr @ksi  kBU xr Dh QLi  _i  k6Ew6TFc U6rb9up|~fM3u ]1u jiw,uFTubvpw~[L,uZ,vh8Pv&K F&L S,w`Gnx|,xJ,yX,zfyt} B O"K \,{i,|w,}EzSd ae n,~{,If W,\d\r]@^N_\`jaxg Fh Si `,amj {w  HU  U]b,@ pB |^HcVjde cL  pO  }G  J[ WE  d8lqC  ]A  j@  w{ m D^Q\^ifN  O  \{i|w G E K R}_~m{\I oW]e r z m G i  S p `rmw{uIHWl eIskAq O\d \ y_FJTabe pp }\`J\c_\at U I rU[c\k x\A EoR\N `\N m\O z\P G\Q T\R a\S n\T {ZH\U ]\V j\W w r DK Q8l^jJ^I]Wle]s\X A ON\M \\~ i\K vO CNP\J _e l\I y c FL SD`\H n\F {\E H\C UT b\B om | R IBV[f\A ty A\ O\| \Hil  wR D\SPc^ lc AA NT  c c pS  }R  JrW@  eg  r\ P  LK  Yk  fJ  sI  @H  MG  Zh  gQ tF  A N\t \\s i\u v\q CE  P\o ]h jD  w f Dj  Q x ^ kl zB F n [ L h e uTBEQi`K of||Lf[ w if v ~ B  OC \D qU FK RE _ ^ t i  A i  MK YF fC8W{CW R i  ` Jl i  z i  Fz R i  _ i  k Kw ME i  S i_ i  my y i  Fx R i  _c k x { F i  S i_ i  m i  yG E i  Z i  f K r i   L K i  XH dI yJ N UcCK qCM ~C^ KK X K mw zC` Gv T ~ a c nC^ { vHu V g cCN og |X ICG V Ec"DrCb@ XN Y]Cal+i  z-i  F n Ru c _.K lt s yC_Ft r T/i  a[ m m1i  zY^iF3i  o5i  {7i  G8y St q ai U n8Hzm L Hm e U8l  b9i  o:K {;i  H] ET] Tc@fr] r@@gN` } \Q ^ iP i  v=i  CP f OL I \L U i gi"vL ~ XKeL [  s: m ?i  KF i W8 B dAi  pCi  |Fi  H: i  T> G a> K n8 d {Hi  HJi  TA a`A o nLi  {/ [ G2 OT3 ab3 o pNi  }Te ITL V* h cTDp) a~u m LCK YaT f) o s# b@<u NQp [QK h ouQJ CQq P s ]WB iQp vYk CYA PWm ] p jYN wYN DYO QYP ^YQ kYR xYS EYT RYU _YV lYW yy F1kSQG a i  nQr z i  G1f S i  aQs m i  zQv  F i  SQt _ i  l1 xQ_EQuSYX aQvngm | i  IQwU i  cQUo i  }QU I i  V1Sb i  pQy | i  IqR U i  aQz m U zYM GBiTY~ }YK JQ| WQn d rq i  YJ LYI YYH fYF sr @}c M8lZYE FQm Sj`YC _YB lYA yY FY| SQl `y mH{l  IYSV^dQ r]  Mh Z ugQj u{cB{bP G^[lQi z1| G uT{cbQh p{g}Qg dY q{^ ~{M K1 X1A e{K rQf Qe LQd YQc fQb s G @ K MQa ZQ` gQ^ t1B AQ] NQ\ [{W hY`vQ[ KYcXYamQZ A{8zNiHfWQY gQX t mA1C OQW \1E i1F v8WC1H Z1I gQV t1J AQU N1K [QT h1~ u1M B1X O1W \W i1V w&~ D&} QQS ^QR kQQ xh Ec RQP _1U l1T yQO FQN SQM `&am1S {1R H1Q U1P b1O o1N |1N IQL V K c L p1A }QK JQJ W1k dQI qQG ~QF KK XM e^ r1cQE S1a`1`uR JM VccbqcH  M_ m Y1^ifL Oe \M i{mOvi EK Rr_ W m m zfFgT h bDqL L L [Ye hl _ue Ti aK  n{ S z,G1pNU Pc{ E  q F ~1;K&QeF 1db9k E  M ^ Z| c g| B t| Q A| R N| L [ @ h 1]h u 1Q }+] 1vY Z| cs E  A E  N 1vo[&XS*J1V0]1uL M1{H Y 1rx(a&WU#Y1|rn E  `1K_"l @ K F X Pe1=Rs&aVE 1~E[ 1]c`1\VC&Ok#Y1b&D1y]j1DbG c i B v Q C R P&+C]&B4`1NJT&y ^&va k_ E  L1+rY E  K1rA X1MTY&a m1FrN1Jn @1|xn1D f1C o&AQx1]tI E  }1EXJ1eIb E  k&Y}x1wF,u1 /{ E  j1 @v&b v&Z}C&a @ E  M1 vZ&cP&b^&fl&ck&[y&\G1CRU i  g jvt j+Q jVn jPL h k j_,y1Ute E  YHe10s s1mGf1zP mY3} ^ p E  }1EJ E  O}W [15@r_Kr E  }YiIRX1JhS@r E  rdG E  F*=R_O E  ]%nj E  XRKd E  oVi| E  eWir E  [XThS@|PRV| E  Ni|[+JWLqaQp ROuBCw =VS@ U GNU S c EO3m [ | FZF RU` \Xu lXM  a e PLr QL~ OW=J DTa!XMu! E  B!CON! i  ]!oji!eaS!Wet!]UY!jIn!TUw!YUL!+Da!s e!YC r!YD {!Y|xD!l|!YMTJ!jO^!BE  m! E  y!x9F!% E  !KVK!Y+Ua!YNJv!YDl@" P?l"@ik"Yy]T"Yb&q" pW" { e"Qg q"Y]iX"2 E  A"MwN"o?E"Y\VD" \!Z"5 r{"5 E  I" caU"; E  v"Y~5C"dGx"> E  "8 E  K"*=X"E E  U" Jgb" D?I" u8H"R{!@"F E  {#%nH#HPv#n@F#YKGF#Y|rM# Yrr#\q#ISM#O K `#P E l#rr z#N{l#pHg# W 8o#U E  g#Ns#@Er#T L w#T e D#[ ` Q#[ S ]#[ K j#m^w#^ E  U#uCa#5@d#] E  d#PZq#Y{B K# Y]] M#t A j#b ^ v#F!C#e rd#e nr#e E  @# [wL#b E  C#YvoP#H~$Uc}$k E  `$Y=Ml$nuy$[ E  n$YuL {$YJn G$uu$cRj$ sZ|$u E  V$YeIc$x E  l$u L y$u Y F$Y]jS$PG}$| E  D$} K Q$x|]$t:Y$YES S$YF\f$Ydu:B$Y4w% E  k% H}w%LSt%YsNG%YwF,U%nY[&UNt&S]B&Y,_&Y /K&T,z&~o f&j,U&}XA&],Y& E  E&e,Q&Y @}&X,}& E  i&W,v&Y vb&W,X&|[D&Q,_& N K&o,X&YCRD&l,V& i  B&P,O&YUt{&R,o&{O[&pEj&w[o& E  J&qGV&Y0s ]&rtP&YmGD&t,K&oHw&\,&Yzdk& E  O'CW\'Hs' @ A' K M' E Z'YEh'zR;m'h]'fn\'yQ!J'E  [' E  h'Y5@t' E  t'\i@' E  O'IZ\' E  v'sy+\tN@,\uIN,\4W,"E  K,GW,\wF,e,\ /k,&E  Z,\ @f,(E  f,\ vs,\CRi,i[{-NV-+i  U--L b--e o-h.|-+xj-{.b-\UtP-4E  D-uCP-\0s S-6E  F-dXS-AQk-\mG|-\zW C-<i  Z-F!g->rH->oV->E  d- [wp-<E  g-a t-H~U-\ES-FE  X-\5@d-va d-ME  E-HE  R-}J^-Fsh-cR[-\L m-NE  z-\R G-\Q T-ND a-NY n-w1{-PGl-\B s-VK @-x|L-\c H-I U-r@b-Ib.cNk.C y.B B.XK.tPf.M(t.nY\.UNu.S]C.Y,`.NL.T,k.O1W.j,H.Nt.],J.y v.e,V. vqB.X,s.+p_.W,O.Ed,{.W,_. C6K.Q,A.BEm.o,r.z^.l,X.7}D.P,A.Pim.R,V/ Kn'B/pEp/w[u/~} P/qG]/wid/rtM/E  A/t,N/wuz/\,o/1>[/{M Y/Hf/@et/, E  Y/O f/rs/sE  A/aM/x=k/b5h/yL]/zOi/{Kx/ MuC/O x/rE/anS/ i A/`F`/Cvf/ kK\/e)g/ aQP/+>a0B4_0L  S0K  `0J  m0DRz0^ L0+RY0H  k0D  x0Q  E0AIR0=\[0S@ w0 =Fw0_x}0EAu0^lAv0GZb1Oc;|1]"_1 hA1E  i1\pu1[.e1Z\S1 \ o1 K |1eTH1YD\1 IC `1E  c1 P Ip1 Jty1x m1y M1Q9m1 |b f1E  H2R-T2CsLA2P M2WZ2K h2E  v2Cq1B2B s2c 2qAL2CnHM2c U2E  b2R{!o2_ j2C6Cw2E  z2HF2C):T2l N2 iA\2t]2Tk2_ y2E  F2A S2E  `2CMA m2Jjn2C@_X2Nw2CTTv2L J2e W2R d2=N4CZ L4CX Y4CY f4C_ s4Cb @4Cv M4C[ Z4CG g4CI t4 R @A4CV A4CM N4A|[4D W4E  d4z p4J }4 k#J4QGm4Cct4OB4!K P4"K ]4!E  j4nYv4UNO4S]]4Y,z4Cuf4T,t4IM`4j,m4.y Y4],g4.HS4e,a4.l M4X,[4.E  G4W,S4Ja4W,`4b L4Q,n4:l Z4o,h4:E  T4l,`4sXL4P,d4DE  P4R,\4q1H4pEy4w[~4u tY4qGg4o~n4rtl4TB `4t,l4Tc X4\,e4u K Q4PB ^4Py `4u y m4M {4@HH4p P4u E  ]4hqNi4<g,w4<mpc5sg+S5sgp~5 g-n5e[5~4Kj5aE  u7Wc B76CO7cE  R7):^7W_ X7WHe7Wl  s7u-hiS@7iE  S7MA `7gta7g_ o7y|7gE  u71~4sA7vytF@_mFTTLFs~4d `FN UDF}R YF~4^!fFJ~4N*DFY~4q RGQCR~4URR{~4wgVR `^V}Q ~VRHKV~4RSVJJVe\{u{\g~4T I\LA&]\{M ^\&~4Nk\{V ya{I Fa~4ESa{G Xd{[ edh~4srd{v eeR rej~4veQ ue{b Be{_ Oe{Y \e{X ie~4Ove{Z EhuRh~4x`h{+>Xj {SJVj~4P`jKlOpk SI\l~4} el+>bl{KZO`l[ NzluHlQ VlQ~4SclR vp{LVKCp{RHYpQ apZ np~4m{pX hrY ur~4p;Br_ rsb s~4NLsv Zy[ gy~4Tty~4aHyG i{l~4Pv{~4nF{I t{V A{R N{{T[[{M v{d ZC{{@^]{<~4L {{QgR-G{A~4K Y|C~4od|{~yS~4PL~4s'\݄{yOuH Q@mV ~4UC{MA XE  Y\~4G f{):mE  g{6[sE  N{^P[{~4ikq ~4_TE  sQ8r@ Q~mr{nH_{sXgE  {q1K~4I|m \E~4YaE zG  HH  U{gQb Qls~4j_{o~IQhBGQiBIQuBKQwHMQyGUQT_\QP[{QY_VQ]auQWlVQX[BQQ[]QlcxQ{Y[QWatQRaUQ\cvQ|HYQ}~ aĠ~4F_ѠQYueՠp XZܠQgGrݠE  y~4[ F'Pa ` wq