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

165 lines
6.6 KiB
Ucode

/**
* API that provides functions for working with chat.
* Copyright 2022 Anton Tarasenko
*------------------------------------------------------------------------------
* This file is part of Acedia.
*
* Acedia is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License, or
* (at your option) any later version.
*
* Acedia is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Acedia. If not, see <https://www.gnu.org/licenses/>.
*/
class OldSchoolZedsAddon_Feature extends Feature;
struct FlagUpdateDefinition
{
var string flagName;
var string variableName;
var class<Actor> relevantClass;
};
var private array<FlagUpdateDefinition> flagToUpdate;
protected function OnEnabled()
{
_server.unreal.GetGameType().AddToPackageMap("KFOldSchoolZeds");
Log("BEFORE!!!" @ _server.unreal.GetKFGameType().MonsterCollection @ _server.unreal.GetKFGameType().InitSquads.length);
_server.unreal.GetGameType().AddMutator(string(class'KF25OSMut'));
Log("PUHPUH!!!" @ _server.unreal.mutator.FindInstance(class'KF25OSMut'));
Log("AFTER!!!" @ _server.unreal.GetKFGameType().MonsterCollection @ _server.unreal.GetKFGameType().InitSquads.length);
}
protected function SwapConfig(FeatureConfig config)
{
local KF25OSMut mutatorInstance;
local OldSchoolZedsAddon newConfig;
newConfig = OldSchoolZedsAddon(config);
if (newConfig == none) {
return;
}
mutatorInstance =
KF25OSMut(_server.unreal.mutator.FindInstance(class'KF25OSMut'));
UpdateFlags(mutatorInstance, newConfig);
UpdateDefaultMutatorFlags(newConfig);
UpdateDefaultActorsFlags(newConfig);
}
// Necessary boiler plate code for updating default values
private function UpdateDefaultMutatorFlags(OldSchoolZedsAddon newConfig)
{
if (newConfig == none) {
return;
}
class'KF25OSMut'.default.bDisableIncendiaryRounds =
newConfig.bDisableIncendiaryRounds;
class'KF25OSMut'.default.bDisableIncendiaryResistance =
newConfig.bDisableIncendiaryResistance;
class'KF25OSMut'.default.bEnableOldBloatPuke =
newConfig.bEnableOldBloatPuke;
class'KF25OSMut'.default.bEnableOldCrawlerBehaviour =
newConfig.bEnableOldCrawlerBehaviour;
class'KF25OSMut'.default.bEnableSirenNadeBoom =
newConfig.bEnableSirenNadeBoom;
class'KF25OSMut'.default.bEnableOldScrakeBehavior =
newConfig.bEnableOldScrakeBehavior;
class'KF25OSMut'.default.bEnableOldFleshpoundBehavior =
newConfig.bEnableOldFleshpoundBehavior;
class'KF25OSMut'.default.bNerfEP = newConfig.bNerfEP;
}
// Necessary boiler plate code for updating default values
private function UpdateDefaultActorsFlags(OldSchoolZedsAddon newConfig)
{
if (newConfig == none) {
return;
}
class'ZombieRangedPoundOS'.default.bDisableIncendiaryRounds =
newConfig.bDisableIncendiaryRounds;
class'ZombieRangedPoundOS'.default.bDisableIncendiaryResistance =
newConfig.bDisableIncendiaryResistance;
class'ZombieBloatOS'.default.bEnableOldBloatPuke =
newConfig.bEnableOldBloatPuke;
class'ControllerCrawlerOS'.default.bEnableOldCrawlerBehaviour =
newConfig.bEnableOldCrawlerBehaviour;
class'ZombieSirenOS'.default.bEnableSirenNadeBoom =
newConfig.bEnableSirenNadeBoom;
class'ZombieScrakeOS'.default.bEnableOldScrakeBehavior =
newConfig.bEnableOldScrakeBehavior;
class'ZombieFleshPoundOS'.default.bEnableOldFleshpoundBehavior =
newConfig.bEnableOldFleshpoundBehavior;
class'ControllerFleshpoundOS'.default.bEnableOldFleshpoundBehavior =
newConfig.bEnableOldFleshpoundBehavior;
class'ZombieExplosivesPoundOS'.default.bNerfed = newConfig.bNerfEP;
class'GunnerGLProjectile'.default.bNerfed = newConfig.bNerfEP;
}
private function UpdateFlags(
KF25OSMut mutatorInstance,
OldSchoolZedsAddon config)
{
local int i;
local string flagName, variableName, flagValue;
if (config == none) {
return;
}
for (i = 0; i < flagToUpdate.length; i += 1)
{
flagName = flagToUpdate[i].flagName;
flagValue = config.GetPropertyText(flagToUpdate[i].flagName);
variableName = flagToUpdate[i].variableName;
if (variableName == "") {
variableName = flagToUpdate[i].flagName;
}
if (mutatorInstance != none){
mutatorInstance.SetPropertyText(flagName, flagValue);
}
if (flagToUpdate[i].relevantClass != none)
{
UpdateActorsFlag(
flagToUpdate[i].relevantClass,
variableName,
flagValue);
}
}
}
private function UpdateActorsFlag(
class<Actor> classToUpdate,
string variableName,
string variableValue)
{
local LevelInfo level;
local Actor nextActorInstance;
if (classToUpdate == none) {
return;
}
level = _server.unreal.GetLevel();
foreach level.DynamicActors(classToUpdate, nextActorInstance) {
nextActorInstance.SetPropertyText(variableName, variableValue);
}
}
defaultproperties
{
configClass = class'OldSchoolZedsAddon'
flagToUpdate(0) = (flagName="bDisableIncendiaryRounds",relevantClass=class'ZombieRangedPoundOS')
flagToUpdate(1) = (flagName="bDisableIncendiaryResistance",relevantClass=class'ZombieRangedPoundOS')
flagToUpdate(2) = (flagName="bNerfEP",variableName="bNerfed",relevantClass=class'ZombieExplosivesPoundOS')
flagToUpdate(3) = (flagName="bNerfEP",variableName="bNerfed",relevantClass=class'GunnerGLProjectile')
flagToUpdate(4) = (flagName="bEnableOldBloatPuke",relevantClass=class'ZombieBloatOS')
flagToUpdate(5) = (flagName="bEnableOldCrawlerBehaviour",relevantClass=class'ControllerCrawlerOS')
flagToUpdate(6) = (flagName="bEnableSirenNadeBoom",relevantClass=class'ZombieSirenOS')
flagToUpdate(7) = (flagName="bEnableOldScrakeBehavior",relevantClass=class'ZombieScrakeOS')
flagToUpdate(8) = (flagName="bEnableOldFleshpoundBehavior",relevantClass=class'ZombieFleshPoundOS')
flagToUpdate(9) = (flagName="bEnableOldFleshpoundBehavior",relevantClass=class'ControllerFleshpoundOS')
}