rott/kf_sources/HideMut/Classes/HideMut.uc
2026-07-14 20:27:09 +07:00

169 lines
4.5 KiB
Ucode

class HideMut extends Mutator
config(HideMut);
// =============================================================
struct FunctionRecord
{
var config string About, Replace, With;
};
var config array<FunctionRecord> List;
var HideMut ref_HideMut;
// var newMainMenuClass class'HideMainMenu';
// =============================================================
event PreBeginPlay()
{
super.PreBeginPlay();
ref_HideMut = self;
default.ref_HideMut = self;
// remove some annoying messages
class'WaitingMessage'.default.DoorMessage = "";
class'WaitingMessage'.default.WeldedShutMessage = "";
class'WaitingMessage'.default.ZEDTimeActiveMessage = "";
// CrossbuzzsawBlade sound spam fix
class'CrossbuzzsawBlade'.default.AmbientSoundRef = "";
class'FNFALFire'.default.AmbientFireVolume = 0;
class'CashPickup'.default.TransientSoundVolume = 0.0;
class'CashPickup'.default.AmbientGlow = 0;
class'machete'.default.priority = 3;
// replacing vanilla functions with ours
replace_Functions();
replace_LobbyMenu();
replace_MainMenu();
// EXPERIMENTAL!!!
// ReplaceDefaults();
}
final private function replace_LobbyMenu()
{
class'KFPlayerController'.default.LobbyMenuClassString = string(class'HideLobbyMenu');
class'KFPlayerController_Story'.default.LobbyMenuClassString = string(class'HideLobbyMenu');
}
// replace main menu with fixed one
final private function replace_MainMenu()
{
local bool bChan;
local string newmenuclass;
local GameEngine GE;
// our class
newmenuclass = string(class'HideMainMenu');
if (class'GameEngine'.default.MainMenuClass != newmenuclass || class'GameEngine'.default.SinglePlayerMenuClass != newmenuclass)
{
// change defaults
class'GameEngine'.default.MainMenuClass = newmenuclass;
class'GameEngine'.default.SinglePlayerMenuClass = newmenuclass;
// strange variable, not used anywhere??
// class'GameEngine'.default.InstantActionMenuClass = class'HideMainMenu';
// save the config
// class'GameEngine'.static.StaticSaveConfig();
bChan = true;
}
if (!bChan)
return;
// change instanced ones
foreach AllObjects(class'GameEngine', GE)
{
GE.MainMenuClass = class'GameEngine'.default.MainMenuClass;
GE.SinglePlayerMenuClass = class'GameEngine'.default.SinglePlayerMenuClass;
// save the config
// GE.SaveConfig();
}
// log(">>> HIDEMUT: MENU class changed to " $ newmenuclass);
}
// replace lot's of bugged functions / add our hacks
final function replace_Functions()
{
local uFunction A, B;
local int i;
for (i = 0; i < List.Length; i++)
{
// This removes the need to declare variables for every new class we make.
DynamicLoadObject(class.outer.name $ "." $ Left(List[i].With,InStr(List[i].With,".")), class'class',true);
A = class'UFunction'.static.CastFunction(FindObject(List[i].Replace, class'function'));
B = class'UFunction'.static.CastFunction(FindObject(List[i].With, class'function'));
if (A == none)
{
log("> Failed to process " $ List[i].Replace);
continue;
}
if (B == none)
{
log("> Failed to process " $ List[i].With);
continue;
}
A.Script = B.Script;
log("> Processing " $ List[i].Replace $ " ----> " $ List[i].With);
}
}
// final function ReplaceDefaults()
// {
// local UClass a, b;
// a = class'UClass'.static.CastClass(FindObject("KFMod.CrossbuzzsawBlade", class'class'));
// b = class'UClass'.static.CastClass(FindObject("HideMut.repl_proj_buzzsaw", class'class'));
// if (A == none)
// {
// log("> Failed to process " $ string(a));
// return;
// }
// if (B == none)
// {
// log("> Failed to process " $ string(b));
// return;
// }
// a.Defaults = b.Defaults;
// log("> Processing " $ string(a) $ " ----> " $ string(b));
// }
// get our GUIController and open our Daddy menu, which attaches HideMutInteraction and saves it from GC
simulated function tick(float deltaTime)
{
local PlayerController pc;
pc = level.getLocalPlayerController();
if (pc != none)
{
GUIController(pc.player.guiController).openMenu(string(class'WhosYourDaddy'));
GUIController(pc.player.guiController).closeMenu(false);
// we don't want this running forever, we already did all the work
disable('tick');
destroyed();
}
}
// =============================================================
defaultproperties
{
}