From 647d29b804a4b1cc6b985834ebf8a9c5b8d1a57e Mon Sep 17 00:00:00 2001 From: asapi1020 <88693257+Asapi1020@users.noreply.github.com> Date: Tue, 3 Sep 2024 00:32:27 +0900 Subject: [PATCH] refactor CD_Survival --- CombinedCD2/Classes/CD_ChatCommander.uc | Bin 90224 -> 91094 bytes CombinedCD2/Classes/CD_PickupQueryHandler.uc | 79 +++++++ CombinedCD2/Classes/CD_PlayerController.uc | Bin 80118 -> 80358 bytes CombinedCD2/Classes/CD_SettingManager.uc | 207 ++++++++++++++++++ CombinedCD2/Classes/CD_SettingSynchronizer.uc | 54 +++++ CombinedCD2/Classes/CD_Survival.uc | Bin 186884 -> 153250 bytes CombinedCD2/Classes/CD_ZT_SpawnManager.uc | 70 ++++++ CombinedCDContent/Classes/CD_TimeAttack.uc | 101 --------- CombinedCDContent/Classes/UTestMode.uc | 8 +- 9 files changed, 414 insertions(+), 105 deletions(-) create mode 100644 CombinedCD2/Classes/CD_PickupQueryHandler.uc create mode 100644 CombinedCD2/Classes/CD_SettingManager.uc create mode 100644 CombinedCD2/Classes/CD_SettingSynchronizer.uc create mode 100644 CombinedCD2/Classes/CD_ZT_SpawnManager.uc delete mode 100644 CombinedCDContent/Classes/CD_TimeAttack.uc diff --git a/CombinedCD2/Classes/CD_ChatCommander.uc b/CombinedCD2/Classes/CD_ChatCommander.uc index 46b0c24e1cb14ff26da27848a2933fa4de4ecdd8..1c414ce443c6d02d79d33cc0687cb6510bc6613b 100644 GIT binary patch delta 1070 zcmexxfc4sO)(u}&8H+Z5RW;U;4Q5DXC;`GuhCGIJ2499mAe{(gr7{#T=uK`+x15|1 zBtlS?_~fpjRfJV-_6oKjY}jeS22K8zT{QVhMh*d$_L=7is*nboH7l!tfXdt1@{{d? zlqT0?P9muCq%@vjoy>Svdh(u}Fao9s<`&~MMfbeo WeapDefClass; + +public function Initialize(Pawn OwnerPawn, Actor Pickup) +{ + CDDP = CD_DroppedPickup(Pickup); + Weap = KFWeapon(CDDP.Inventory); + WeapDefClass = class(Weap.class.default.InstantHitDamageTypes[3]).default.WeaponDef; + + CDPC = CD_PlayerController(OwnerPawn.Controller); + Player = CD_Pawn_Human(OwnerPawn); +} + +public function bool PickupQuery(optional bool bIgnoreDualQuery) +{ + if(CDDP == none || Weap == none || CDPC == none || Player == none || WeapDefClass == none) + { + return true; + } + + return ( bIgnoreDualQuery || DualQuery() ) && LowAmmoQuery() && OthersQuery(); +} + +private function bool DualQuery() +{ + return !( Outer.MyKFGRI.bTraderIsOpen && CDPC.bDisableDual && Player.IsGonnaBeDual(Weap) ); +} + +private function bool LowAmmoQuery() +{ + return !( Outer.MyKFGRI.bWaveIsActive && IsDisableLowAmmo() && CDDP.IsLowAmmo() ); +} + +private function bool OthersQuery() +{ + return !( CDDP.OriginalOwner != Player.PlayerReplicationInfo && IsUnobtainableOthers() ); +} + +private function bool IsDisableLowAmmo() +{ + local int index; + local PlayerReplicationInfo PRI; + PRI = Player.PlayerReplicationinfo; + + index = Outer.PickupSettings.Find('PRI', PRI); + + if(index != INDEX_NONE) + { + return Outer.PickupSettings[index].DisableLowAmmo; + } + + return false; +} + +private function bool IsUnobtainableOthers() +{ + local bool bLocked; + local bool bDisableOthers; + local bool bAuthorized; + local int registryIndex, settingIndex; + local PlayerReplicationinfo PRI; + PRI = Player.PlayerReplicationinfo; + + registryIndex = Outer.PickupTracker.WeaponPickupRegistry.Find('KFDP', CDDP); + bLocked = (registryIndex != INDEX_NONE && Outer.PickupTracker.WeaponPickupRegistry[registryIndex].bLocked); + + settingIndex = Outer.PickupSettings.Find('PRI', PRI); + bDisableOthers = (settingIndex != INDEX_NONE && Outer.PickupSettings[settingIndex].DisableOthers); + + bAuthorized = CDPC.IsAllowedWeapon(WeapDefClass, true, false); + + return (bLocked || bDisableOthers || !bAuthorized); +} \ No newline at end of file diff --git a/CombinedCD2/Classes/CD_PlayerController.uc b/CombinedCD2/Classes/CD_PlayerController.uc index 8bdc0002c1e58c1de95853a2f483a810d1f435b0..75867d9454e1e170c505b27f6a2bb8b40d965ab1 100644 GIT binary patch delta 288 zcmezNk>%NEmJQc5lv5c>fH0FGk0G5Qn4uC#Co^O)6fxujS(yw~45 DynamicSettings; +var array BasicSettings; +var array AllSettings; + +public function Initialize(CD_Survival OuterClass, string Options) +{ + SetupBasicSettings(OuterClass); + SetupDynamicSettings(OuterClass); + SortAllSettingsByName(); + ParseCDGameOptions( Options ); +} + +private function SortAllSettingsByName() +{ + AllSettings.sort(SettingNameComparator); +} + +private function int SettingNameComparator( CD_Setting a, CD_Setting b ) +{ + local string an, bn; + + an = a.GetOptionName(); + bn = b.GetOptionName(); + + if ( an < bn ) + { + return 1; + } + else if ( an > bn ) + { + return -1; + } + return 0; +} + +private function SetupBasicSettings(CD_Survival OuterClass) +{ + AlbinoAlphasSetting = new(OuterClass) class'CD_BasicSetting_AlbinoAlphas'; + RegisterBasicSetting( AlbinoAlphasSetting ); + + AlbinoCrawlersSetting = new(OuterClass) class'CD_BasicSetting_AlbinoCrawlers'; + RegisterBasicSetting( AlbinoCrawlersSetting ); + + AlbinoGorefastsSetting = new(OuterClass) class'CD_BasicSetting_AlbinoGorefasts'; + RegisterBasicSetting( AlbinoGorefastsSetting ); + + AutoPauseSetting = new(OuterClass) class'CD_BasicSetting_AutoPause'; + RegisterBasicSetting( AutoPauseSetting ); + + BossSetting = new(OuterClass) class'CD_BasicSetting_Boss'; + RegisterBasicSetting( BossSetting ); + + BossDifficultySetting = new(OuterClass) class'CD_BasicSetting_BossDifficulty'; + RegisterBasicSetting( BossDifficultySetting ); + + CountHeadshotsPerPelletSetting = new(OuterClass) class'CD_BasicSetting_CountHeadshotsPerPellet'; + RegisterBasicSetting( CountHeadshotsPerPelletSetting ); + + DisableBossSetting = new(OuterClass) class'CD_BasicSetting_DisableBoss'; + RegisterBasicSetting( DisableBossSetting ); + + DisableBossMinionsSetting = new(OuterClass) class'CD_BasicSetting_DisableBossMinions'; + RegisterBasicSetting( DisableBossMinionsSetting ); + + DisableRobotsSetting = new(OuterClass) class'CD_BasicSetting_DisableRobots'; + RegisterBasicSetting( DisableRobotsSetting ); + + DisableSpawnersSetting = new(OuterClass) class'CD_BasicSetting_DisableSpawners'; + RegisterBasicSetting( DisableSpawnersSetting ); + + EnableReadySystemSetting = new(OuterClass) class'CD_BasicSetting_EnableReadySystem'; + RegisterBasicSetting( EnableReadySystemSetting ); + + FleshpoundRageSpawnsSetting = new(OuterClass) class'CD_BasicSetting_FleshpoundRageSpawns'; + RegisterBasicSetting( FleshpoundRageSpawnsSetting ); + + StartingWeaponTierSetting = new(OuterClass) class'CD_BasicSetting_StartingWeaponTier'; + RegisterBasicSetting( StartingWeaponTierSetting ); + + StartwithFullAmmoSetting = new(OuterClass) class'CD_BasicSetting_StartwithFullAmmo'; + RegisterBasicSetting( StartwithFullAmmoSetting ); + + StartwithFullArmorSetting = new(OuterClass) class'CD_BasicSetting_StartwithFullArmor'; + RegisterBasicSetting( StartwithFullArmorSetting ); + + StartwithFullGrenadeSetting = new(OuterClass) class'CD_BasicSetting_StartwithFullGrenade'; + RegisterBasicSetting( StartwithFullGrenadeSetting ); + + SpawnCycleSetting = new(OuterClass) class'CD_BasicSetting_SpawnCycle'; + RegisterBasicSetting( SpawnCycleSetting ); + + TraderTimeSetting = new(OuterClass) class'CD_BasicSetting_TraderTime'; + RegisterBasicSetting( TraderTimeSetting ); + + ZedsTeleportCloserSetting = new(OuterClass) class'CD_BasicSetting_ZedsTeleportCloser'; + RegisterBasicSetting( ZedsTeleportCloserSetting ); + + ZTSpawnModeSetting = new(OuterClass) class'CD_BasicSetting_ZTSpawnMode'; + RegisterBasicSetting( ZTSpawnModeSetting ); +} + +private function SetupDynamicSettings(CD_Survival OuterClass) +{ + BossHPFakesSetting = new(OuterClass) class'CD_DynamicSetting_BossHPFakes'; + BossHPFakesSetting.IniDefsArray = OuterClass.BossHPFakesDefs; + RegisterDynamicSetting( BossHPFakesSetting ); + + CohortSizeSetting = new(OuterClass) class'CD_DynamicSetting_CohortSize'; + CohortSizeSetting.IniDefsArray = OuterClass.CohortSizeDefs; + RegisterDynamicSetting( CohortSizeSetting ); + + WaveSizeFakesSetting = new(OuterClass) class'CD_DynamicSetting_WaveSizeFakes'; + WaveSizeFakesSetting.IniDefsArray = OuterClass.WaveSizeFakesDefs; + RegisterDynamicSetting( WaveSizeFakesSetting ); + + MaxMonstersSetting = new(OuterClass) class'CD_DynamicSetting_MaxMonsters'; + MaxMonstersSetting.IniDefsArray = OuterClass.MaxMonstersDefs; + RegisterDynamicSetting( MaxMonstersSetting ); + + SpawnModSetting = new(OuterClass) class'CD_DynamicSetting_SpawnMod'; + SpawnModSetting.IniDefsArray = OuterClass.SpawnModDefs; + RegisterDynamicSetting( SpawnModSetting ); + + SpawnPollSetting = new(OuterClass) class'CD_DynamicSetting_SpawnPoll'; + SpawnPollSetting.IniDefsArray = OuterClass.SpawnPollDefs; + RegisterDynamicSetting( SpawnPollSetting ); + + ScrakeHPFakesSetting = new(OuterClass) class'CD_DynamicSetting_ScrakeHPFakes'; + ScrakeHPFakesSetting.IniDefsArray = OuterClass.ScrakeHPFakesDefs; + RegisterDynamicSetting( ScrakeHPFakesSetting ); + + FleshpoundHPFakesSetting = new(OuterClass) class'CD_DynamicSetting_FleshpoundHPFakes'; + FleshpoundHPFakesSetting.IniDefsArray = OuterClass.FleshpoundHPFakesDefs; + RegisterDynamicSetting( FleshpoundHPFakesSetting ); + + QuarterPoundHPFakesSetting = new(OuterClass) class'CD_DynamicSetting_QuarterPoundHPFakes'; + QuarterPoundHPFakesSetting.IniDefsArray = OuterClass.QuarterPoundHPFakesDefs; + RegisterDynamicSetting( QuarterPoundHPFakesSetting ); + + TrashHPFakesSetting = new(OuterClass) class'CD_DynamicSetting_TrashHPFakes'; + TrashHPFakesSetting.IniDefsArray = OuterClass.TrashHPFakesDefs; + RegisterDynamicSetting( TrashHPFakesSetting ); + + ZTSpawnSlowdownSetting = new(OuterClass) class'CD_DynamicSetting_ZTSpawnSlowdown'; + ZTSpawnSlowdownSetting.IniDefsArray = OuterClass.ZTSpawnSlowdownDefs; + RegisterDynamicSetting( ZTSpawnSlowdownSetting ); +} + +private function RegisterBasicSetting( const out CD_BasicSetting BasicSetting ) +{ + BasicSettings.AddItem( BasicSetting ); + AllSettings.AddItem( BasicSetting ); +} + +private function RegisterDynamicSetting( const out CD_DynamicSetting DynamicSetting ) +{ + DynamicSettings.AddItem( DynamicSetting ); + AllSettings.AddItem( DynamicSetting ); +} + +private function ParseCDGameOptions( const out string Options ) +{ + local int i; + + for ( i = 0; i < AllSettings.Length; i++ ) + { + AllSettings[i].InitFromOptions( Options ); + } +} \ No newline at end of file diff --git a/CombinedCD2/Classes/CD_SettingSynchronizer.uc b/CombinedCD2/Classes/CD_SettingSynchronizer.uc new file mode 100644 index 0000000..511afd6 --- /dev/null +++ b/CombinedCD2/Classes/CD_SettingSynchronizer.uc @@ -0,0 +1,54 @@ +class CD_SettingSynchronizer extends Object + within CD_Survival; + +// Perk, skill, weapon, auth level +public function SynchSettings(CD_PlayerController CDPC) +{ + local CD_PerkInfo PerkRestriction; + local CD_SkillInfo SkillRestriction; + local CD_WeaponInfo WeaponRestriction; + + CDPC.ResetSettings(); + CDPC.ReceiveAuthority(Outer.AuthorityHandler.GetAuthorityLevel(CDPC)); + CDPC.GetCDPRI().AuthorityLevel = Outer.AuthorityHandler.GetAuthorityLevel(CDPC); + CDPC.ReceiveLevelRestriction(Outer.AuthorityHandler.bRequireLv25); + CDPC.ReceiveAntiOvercap(Outer.AuthorityHandler.bAntiOvercap); + + foreach Outer.AuthorityHandler.PerkRestrictions(PerkRestriction) + { + CDPC.ReceivePerkRestrictions(PerkRestriction); + } + + foreach Outer.AuthorityHandler.SkillRestrictions(SkillRestriction) + { + CDPC.ReceiveSkillRestrictions(SkillRestriction); + } + + foreach Outer.AuthorityHandler.WeaponRestrictions(WeaponRestriction) + { + CDPC.ReceiveWeaponRestrictions(WeaponRestriction); + } + + CDPC.SynchFinished(); +} + +public function ResynchSettings() +{ + local CD_PlayerController CDPC; + + foreach Outer.WorldInfo.AllControllers(class'CD_PlayerController', CDPC) + { + SynchSettings(CDPC); + } +} + +public function SendAuthList(CD_PlayerController CDPC) +{ + local int i; + + for(i=0; i&~yf8LeIHxmx4;| zADzz5?z{KhbME>0o!_~455Amo^yjmF@vA(%TsV)0jzP9HRP<~**0@sf`n*)@;7XT) zmDOcxIH!|tbpy5vOs&1C+RPCx17hL@kMa~?| z`S{z#bFV7a5l9S;>}k6SlCJ^sv9P|GPK97020nJ;)9c)Lw7!qRCtx9sgdmZe!-mVM z-h2+|iEkJQ)|LK2(5pDopPc`nj6FghZG}uK9WcCjYSVmNv1z%(RIBjffm}SisfXUY z2+0j4oKsVk@OLeH+R2|b)ylIrwTHh!PKV&Oi^nFf@8-EYTVgSpobv$B_wq`&?1XS3 z2gAe3_*v-dv~3Y2qZyu0$Fd+DukZgdnXedSdPb+qjBGmh9V2o78db-(1zX8XIe$!k z)6T!UrsdDW7EE2OZT!2F$3gb0hh>7=y2&~cfmA^$ueNg5O>3(a^5pFRKIp$FDv@XKkMP&Pb zsbl*LYgQwpr zZTUA3n^|0{SIW&UEa6;>R+mn)i)YfO1;d>>Rh>K%mP%FF23oX9DNS*yQzue$lR|&s zptCPl8TiG0E_~=x4IUYFV)MI&;Kf%j<BPHujAKvG8(;zSj(?lvi%JXmG1hh|i9!K=Zxx)PFDJNprKz z-yL_5``1Q>HTtLD8j@b?j~@gb_0V7YAW4Y8#fz7&iJ#}Rv@+wsoPT*qowV}s;= z*GQNnzDZSyZ#~M36QAbe;@>CZlcSqsiUpW>?R6Pjm#*Cn@!g;p7mOC8`DqA;ZX`$x zv-W)cih)=Eo`=SG5YLb2G03ld&Ik8+p@Z>_ja~S~cy^MsMgi7d&%p4FdDhU4ryW=^ zu?a&HOP<=mysDU3f@2f&pK?Rx@CI-uP#J(LT5%T~1K1aR!3h(9BR@!&6M(Ly@Cml? zMaZJfB~TcxnGIKfA*km5q`|2fK;IEh_5T)hVMeb`Y^+r9x#M$p#Cc@1 zYP&8nfnJ|!`g9cLnX!h}swr-tPn`^rUl)TkxwxiuX}fDnVF>>wOCvgz3GSrHEWMu( zgH&4t8TfLQo4!^AS+h5AeMyU!4jCkW0W6|(smv)koX9L;?R{Klj2Epbg1Mq6Hyf>+ zIZcmxG($E&?yDn-9yU$8wWDu|xj<=(ikey{Zj;!v)cGOW-Ob z#jY4pPX+wLn4B&6D%59yeIbh;*$9^%5RCHeY>p#-jzj~E@O*iG6N56--Mb9)`&UzA z1m@jAY|)mv^yW!!s{_9QXY|Pk3>46opMp19eH0cZ-$D7M!U77NgvECji?WSlSM8{B zqDLMx+84w_bpOm~1kdzfZn@dU{tlFp@1#-A`S{^Uqs{P4jekZJ)r18Xa-;4Sjj@t{ E0Y#};oB#j- delta 15972 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 0.f && ZTSpawnSlowdownFloat > 1.f ) + { + if ( ZedTimeRemaining < ZedTimeBlendOutTime ) + { + // if zed time is running out, interpolate between [1.0, ZTSS] using the same lerp-alpha-factor that TickZedTime uses + // When zed time first starts to fade, we will use a divisor slightly less than ZTSS + // When zed time is on the last tick before it is completely over, we will use a divisor slightly more than 1.0 + // IOW, the divisor decreases towards one as zed time fades out + // See TickZedTime in KFGameInfo for background + SlowDivisor = Lerp(1.0, ZTSpawnSlowdownFloat, ZedTimeRemaining / ZedTimeBlendOutTime); + } + else + { + // if zed time is going strong, just use ZTSS + SlowDivisor = ZTSpawnSlowdownFloat; + } + + LocalDilation = LocalDilation / SlowDivisor; + + `cdlog("SpawnManagerWakeup's slowed clockwork timedilation: " $ LocalDilation $ " (ZTSS=" $ SlowDivisor $ ")", Outer.bLogControlledDifficulty); + } + else + { + `cdlog("SpawnManagerWakeup's realtime clockwork timedilation: " $ LocalDilation, Outer.bLogControlledDifficulty); + } + + Outer.ModifyTimerTimeDilation('SpawnManagerWakeup', LocalDilation, self); +} + +private function SpawnManagerWakeup() +{ + if ( Outer.SpawnManager != none ) + { + Outer.SpawnManager.Update(); + } +} \ No newline at end of file diff --git a/CombinedCDContent/Classes/CD_TimeAttack.uc b/CombinedCDContent/Classes/CD_TimeAttack.uc deleted file mode 100644 index 23a288c..0000000 --- a/CombinedCDContent/Classes/CD_TimeAttack.uc +++ /dev/null @@ -1,101 +0,0 @@ -class CD_TimeAttack extends CD_Survival - config( CombinedCDContent ); - -var byte ActualWaveNum; - -function StartMatch() -{ - ActualWaveNum = 0; - - super.StartMatch(); - - SpawnManager.bTemporarilyEndless = true; - MyKFGRI.bWaveIsEndless = true; - SetTimer(180.f, false, 'EndCurrentWave'); -} - -state TraderOpen -{ - local KFPlayerController KFPC; - - function BeginState(name PreviousStateName) - { - MyKFGRI.SetWaveActive(false, GetGameIntensityForMusic()); - - ForEach WorldInfo.AllControllers(class'KFPlayerController', KFPC) - { - if( KFPC.GetPerk() != none ) - { - KFPC.GetPerk().OnWaveEnded(); - } - KFPC.ApplyPendingPerks(); - } - - StartHumans(); - - OpenTrader(); - - if ( AllowBalanceLogging() ) - { - LogPlayersDosh(GBE_TraderOpen); - } - - SetTimer(TimeBetweenWaves, false, nameof(CloseTraderTimer)); - } - - function EndState(name NextStateName) - { - StartHumans(); - super.EndState(NextStateName); - SetTimer(180.f, false, 'EndCurrentWave'); - } -} - -function WaveEnded( EWaveEndCondition WinCondition ) -{ - local string CDSettingChangeMessage; - - if(WinCondition == WEC_TeamWipedOut) - SaveFinalSettings(); - - super(KFGameInfo_Survival).WaveEnded( WinCondition ); - - if ( ApplyStagedConfig( CDSettingChangeMessage, "Staged settings applied:" ) ) - { - BroadcastCDEcho( CDSettingChangeMessage ); - RefleshWebInfo(); - } -} - -function StartWave() -{ - ActualWaveNum++; - if(WaveNum == 10) - { - WaveNum = 9; - MyKFGRI.WaveNum = ActualWaveNum; - } - - super.StartWave(); -} - -exec function EndCurrentWave() -{ - ClearTimer('EndCurrentWave'); - WaveEnded(WEC_WaveWon); -} - -exec function SetWave(byte NewWaveNum) -{ - return; -} - -exec function WinMatch() -{ - return; -} - -defaultproperties -{ - DifficultyInfoClass=class'CombinedCDContent.CD_DifficultyInfo_TimeAttack' -} \ No newline at end of file diff --git a/CombinedCDContent/Classes/UTestMode.uc b/CombinedCDContent/Classes/UTestMode.uc index 2bf90f0..f4f4513 100644 --- a/CombinedCDContent/Classes/UTestMode.uc +++ b/CombinedCDContent/Classes/UTestMode.uc @@ -85,7 +85,7 @@ event PostBeginPlay() MySTMGRI.bLargeLess = bLargeLess; MYSTMGRI.bHSOnly = bHSOnly; MySTMGRI.nFakedPlayers = ZedHPFakes; - RefleshWebInfo(); + RefreshWebInfo(); bNVBlockDramatic = bDisableZedTime; // an variable called in DramaEvent() SaveConfig(); @@ -428,7 +428,7 @@ function MaintainTrashChallenge() MaxMonstersInt += 4; MaxMonsters = string(MaxMonstersInt); - RefleshWebInfo(); + RefreshWebInfo(); if(MaxMonstersInt < 32) SetTimer(30.f, false, 'MaintainTrashChallenge'); @@ -465,7 +465,7 @@ exec function DisableRespawn(bool bDisable) bDisableRespawn = bDisable; } -function RefleshWebInfo() +function RefreshWebInfo() { MySTMGRI.CDInfoParams.SC = SpawnCycle; MySTMGRI.CDInfoParams.MM = MaxMonsters; @@ -483,7 +483,7 @@ function SetParams(CD_PlayerController CDPC, string S) { ChatCommander.RunCDChatCommandIfAuthorized(CDPC, S); SaveConfig(); - RefleshWebInfo(); + RefreshWebInfo(); } function ModTraderDash(bool bDash){ return; }