• Please make sure you are familiar with the forum rules. You can find them here: https://forums.tripwireinteractive.com/index.php?threads/forum-rules.2334636/

[Mutator] ServerPerksX - Updated ServerPerks for Story Mode + Dynamic Zed Replacement

Noticed a couple of strange bugs running ServerPerksX:


  • Players start out with 'No perk available', and have to re-select a perk from the menu to fix.
  • Started a game, players spawned with no weapons whatsoever (not even knife), could pick up weapons but were unable to use/access them.
  • When using the Say command, player names appear twice in chat.
I'm using the default .ini atm, haven't really made any changes that I can think of, but I am running as a votable side-by-side with ServerPerks 6.

When ServerPerksX is loaded, it's the only mutator running. Mutators running alongside ServerPerks 6 are as follows:

The ScrN Balance V5 (Server), Server Veterancy Handler V6, ScrN Voting Handler, Kill Messages V2, Doom 3 Monsters Mode - ScrN Edition
I have no idea what would cause this. I'll see if I can grab any logs when I have more time later.

Edit: The no perk issue doesn't seem to be consistent. Sometimes it says there's no perk available, other times it's just fine. Seems to happen more often when switching from ServerPerks 6, but I just tested it again and my perk loaded normally.

I may try reinstalling ServerPerksX and see if that fixes the bugs. It could just be a bad install.

Reinstalled, having the same problem. Screenshot of player without weapon: http://steamcommunity.com/sharedfiles/filedetails/?id=160286512

Also, ServerPerksX seems to be pulling from the same ServerPerkStats.ini, so I wonder if this might have anything to do with it?
 
Last edited:
Upvote 0
Noticed a couple of strange bugs running ServerPerksX:


  • Players start out with 'No perk available', and have to re-select a perk from the menu to fix.
  • Started a game, players spawned with no weapons whatsoever (not even knife), could pick up weapons but were unable to use/access them.
  • When using the Say command, player names appear twice in chat.

I did experience those too with with version 1.1, haven't tried 1.3 yet.
 
Upvote 0
Had a replication error with the delegates, fixed it. try v1.31, should no longer be an issue. All I can say is... oops! I don't know why I was even trying to replicate the delegate assignments in the first place, since simulated proxies wouldn't get that information.

edit: Also, a note about using mods like ScrNBalance. While it is true that anything compatible with ServerPerks is compatible with ServerPerksX, it will require a recompile in order to make it work. Poosh says he may be extending ServerPerksX in his next version of ScrNBalance, so that will probably be taken care of on its own in time. Otherwise, you'll need to recompile ScrNBalance on your own to make it work (which will cause version mismatch errors if some one tries to connect to your server and has previously downloaded the host files for ScrNBalance). Best to wait for other modders to update to this new system. Likewise, don't expect anything built for ServerPerks to work without a recompile. While Marco has given his permission for this mutator, I don't feel comfortable releasing it as "ServerPerks V7" unless he requests it directly.

Also let me know if you run across any more errors. I wish I could test everything myself, but with the volume of possible configurations I've added it's nearly impossible (though that replication bug shouldn't have ever slipped by, I apologize about that).
 
Last edited:
Upvote 0
Download ServerPerksX v1.32

Custom Monster Collection
ServerPerksX can now dynamically create and load in a Monster Collection at runtime, which allows you, the modder, to specify new or replacement monsters by simply changing a line in the ServerPerksX.ini file. Monster Collections are the basic list of zombies used by both game modes to spawn waves of zeds in the game, and any modifications to this will be global. The ServerPerksX Monster Collection replacement module lets you selectively specify replacements, or completely override the default MonsterCollectionClass. Default values in ServerPerksX.ini represent the vanilla KFMod version of the Monster Collection, with all the classic zeds.

Okay, just want to make sure I'm understanding how to do this correctly. If I wanted to make a Custom MonsterCollectionClass, all I would need to do is modify the defaultproperties of this class to include my ZEDs, rename, and specify the class name in the .ini:

Spoiler!

Is this correct? :)
 
Upvote 0
Yes, you can do that if you already have a Monster Collection class made, and you don't need to do anything else to get the monster list to work properly. Simply set the MonsterCollectionClass variable in the [ServerPerksXMut.ServerPerksMut] section to the "Package.ClassName" of that monster collection. By leaving that blank, it will use the defaults.

Note: Your MonsterCollection must extend KFMonstersCollection to be valid! You should use one of the Event Zed collections as your template (all they have in them is default properties, no need to write any of the other stuff).

Alternatively OR additionally, you can also have the ZedList create a monster class dynamically by specifying it in the .ini file under the [ServerPerksXMut.SRZombieList] section. The Monster Collection it creates will use the monster collection defined by the MonsterCollectionClass as its base (or the defaults if it is undefined). Set the bCustomMonsterCollection variable to true, and it'll activate the monster definitions. When you change that variable to true, any Monster=(XXX) definitions you add will be APPENDED to your monster collection, and if you specify any monster definitions with a letter ID which is the same as one that is in the defined monster list, it will simply replace them. Otherwise, it'll add them to it.

I find this method better because it allows you to add, or change, zeds on the fly. For instance, if you do not define a MonsterCollectionClass in the .ini file, it will always use the base zeds as its defaults. This allows Killing Floor event zeds to be used whenever an event is going on, and you will always add your new zeds on top of them. So if the summer sideshow event is going on, those zeds will show up in addition to yours. (but if you replace any of the default zeds, yours will show up instead for those defined).

For reference, here's a fully created monster wave definition I've made for another mod I'm working on:
Spoiler!

This particular configuration replaces all of the default zeds, adds more, and defines a bunch of waves, wave sets, squads, and basically everything else that can be done. And it's all done without a MonsterCollection class (as it allows ServerPerksX to create one when the server launches).
 
Last edited:
Upvote 0
Yes, you can do that if you already have a Monster Collection class made, and you don't need to do anything else to get the monster list to work properly. Simply set the MonsterCollectionClass variable in the [ServerPerksXMut.ServerPerksMut] section to the "Package.ClassName" of that monster collection. By leaving that blank, it will use the defaults.

Note: Your MonsterCollection must extend KFMonstersCollection to be valid! You should use one of the Event Zed collections as your template (all they have in them is default properties, no need to write any of the other stuff).

Alternatively OR additionally, you can also have the ZedList create a monster class dynamically by specifying it in the .ini file under the [ServerPerksXMut.SRZombieList] section. The Monster Collection it creates will use the monster collection defined by the MonsterCollectionClass as its base (or the defaults if it is undefined). Set the bCustomMonsterCollection variable to true, and it'll activate the monster definitions. When you change that variable to true, any Monster=(XXX) definitions you add will be APPENDED to your monster collection, and if you specify any monster definitions with a letter ID which is the same as one that is in the defined monster list, it will simply replace them. Otherwise, it'll add them to it.

I find this method better because it allows you to add, or change, zeds on the fly. For instance, if you do not define a MonsterCollectionClass in the .ini file, it will always use the base zeds as its defaults. This allows Killing Floor event zeds to be used whenever an event is going on, and you will always add your new zeds on top of them. So if the summer sideshow event is going on, those zeds will show up in addition to yours. (but if you replace any of the default zeds, yours will show up instead for those defined).

For reference, here's a fully created monster wave definition I've made for another mod I'm working on:
Spoiler!

This particular configuration replaces all of the default zeds, adds more, and defines a bunch of waves, wave sets, squads, and basically everything else that can be done. And it's all done without a MonsterCollection class (as it allows ServerPerksX to create one when the server launches).


This is awesome, thank you! I hadn't even considered using the Event Zed collections as a template. I was just going to make several subclasses of the KFMonstersCollection and load them as I saw fit (as my own 'events', for example), but this should save me a lot of time.

This might be a stupid question, but I'm rather new to UnrealScript. If I wanted to write a mutator that allowed random bosses to be spawned mid-game (similar to the Doom 3 mod), would this sort of thing be compatible with ServerPerksX?

Also, I don't suppose anyone has a reference to which unicode characters are valid for defining the monster array (or a list of invalid characters, as the case may be)?
 
Upvote 0
This is awesome, thank you! I hadn't even considered using the Event Zed collections as a template. I was just going to make several subclasses of the KFMonstersCollection and load them as I saw fit (as my own 'events', for example), but this should save me a lot of time.

This might be a stupid question, but I'm rather new to UnrealScript. If I wanted to write a mutator that allowed random bosses to be spawned mid-game (similar to the Doom 3 mod), would this sort of thing be compatible with ServerPerksX?

Also, I don't suppose anyone has a reference to which unicode characters are valid for defining the monster array (or a list of invalid characters, as the case may be)?
As far as the letter ID goes, it's best (for simplicity's sake) to just stick with A, B, C, D, E, F etc. And if you go all the way through to Z, start again in lower cases (it's case sensitive). There's probably never going to be a need to do anything else, but if you find yourself running out... basically, ANY character can be used here which is supported by Unreal's native code. Parentheses, asterixes, Cyrillic letters, foreign language characters etc. If you want a useful list of what you can use, go to Start Menu -> Accessories -> System Tools -> Character map. Then select the "advanced view" check box, and make sure Unicode is selected (this will make the character map show all valid unicode characters for the selected font which have a graphic character defined). Then select the font Courier New, since of the default fonts it has the most graphic characters. Everything that shows up there is valid here. And that's a ****ing ****load of characters. Basically, if you can make your keyboard spit it out, you can use it as a monster ID. Hell, you can even use numbers... but then your squad definitions would get really confusing to look at, since you'd use a number followed by a number to define a squad.

Just stick to letters, if you ask me. Note: I have not tested the use of all unicode characters, but it should work theoretically, provided you stick to the actual, encoded characters in Unicode 4.0 (of which there are like 190,000).

As far as random bosses go... hmm. Well, that's interesting. How do you want the bosses to show up? Just in the middle of the wave? At the beginning? KF's spawning routine doesn't really support special mechanics for bosses, but one thing you CAN do is define an "OpeningSet" for a wave that has your boss in it, which will make him show up on whatever wave has that opening set. Heck, you can even shove the patriarch into the normal rotation (but do note that the vanilla patriarch will trigger the end of the game if he dies).

If you let me know exactly what you want I can try to think up a way to get it to work with this and maybe put it in an update.
 
Last edited:
Upvote 0
As far as the letter ID goes, it's best (for simplicity's sake) to just stick with A, B, C, D, E, F etc. And if you go all the way through to Z, start again in lower cases (it's case sensitive). There's probably never going to be a need to do anything else, but if you find yourself running out... basically, ANY character can be used here which is supported by Unreal's native code. Parentheses, asterixes, Cyrillic letters, foreign language characters etc. If you want a useful list of what you can use, go to Start Menu -> Accessories -> System Tools -> Character map. Then select the "advanced view" check box, and make sure Unicode is selected (this will make the character map show all valid unicode characters for the selected font which have a graphic character defined). Then select the font Courier New, since of the default fonts it has the most graphic characters. Everything that shows up there is valid here. And that's a ****ing ****load of characters. Basically, if you can make your keyboard spit it out, you can use it as a monster ID. Hell, you can even use numbers... but then your squad definitions would get really confusing to look at, since you'd use a number followed by a number to define a squad.

Just stick to letters, if you ask me. Note: I have not tested the use of all unicode characters, but it should work theoretically, provided you stick to the actual, encoded characters in Unicode 4.0 (of which there are like 190,000).

Okay, that's what I figured. I just wanted to make sure that none of the Unicode characters were 'reserved' for some reason or another. I shouldn't need more than 52 monster entries, but one of my long-term goals is to model, etc. whole new sets of monsters for KF, so I figured it's better to ask now.

As far as random bosses go... hmm. Well, that's interesting. How do you want the bosses to show up? Just in the middle of the wave? At the beginning? KF's spawning routine doesn't really support special mechanics for bosses, but one thing you CAN do is define an "OpeningSet" for a wave that has your boss in it, which will make him show up on whatever wave has that opening set. Heck, you can even shove the patriarch into the normal rotation (but do note that the vanilla patriarch will trigger the end of the game if he dies).

If you let me know exactly what you want I can try to think up a way to get it to work with this and maybe put it in an update.
Basically, I'm looking for there to be a chance of a random boss spawning on any wave after a certain wave. It doesn't really matter at what point in the wave they spawn, but I don't want it to be predictable. So, after Wave X there's a % chance that each wave could include a boss.

It sounds like I could do this by defining an OpeningSet, and the boss would show up on that wave, but it wouldn't be random. That could work, but I worry that it'd get boring after a while if you know that Wave X, Y, and Z are all going to have a boss in them (the same way everyone knows that Wave 11 is the Patriarch). So I'd like to randomize it, the way Doom 3 does.

The Doom 3 mutator uses BossStartWaves and BossWaveRate variables to control when bosses start to spawn and how often, respectively.

Excerpt from Doom3KF.ini:

Spoiler!
Code:
 
Last edited:
Upvote 0
I'll do some research on how that's being done in the Doom3 mod, but from the looks of things it's either a custom gametype or a timer running in the mutator. As far as the timer thing goes, I wouldn't want to add a recurring timer to ServerPerks since that's beyond the "low drag" scope of the project, but I suppose I could add it as an optional module if necessary.

What I CAN do without manipulating the gametype or running a background timer is add a PercentChance variable to Sets, so that each monster defined in them only has the defined percentage chance to be added to the opening set pool per map wave. Opening sets are handled differently by the killing floor code than the rest of the squads, and can contain duplicate zeds (and even duplicate squads of zeds), so that might be what you're looking for.

I, too, was looking to add some randomization to the Invasion Mode waves. I think that's a promising venture. You can expect that in the next version.

edit: for now, the opening set thing is the closest this mod gets. but luckily you can change the settings in the .ini pretty easily to mix it up. next version should either be out in 3 days, or 20. i'm going to be out of town for 2 weeks starting on the 28th.
 
Last edited:
Upvote 0
Doom3 uses times. It does not use custom game type. Actually background timer is already running in ServerPerksMut:

Code:
Auto state EndGameTracker
{
Begin:
	while( !Level.Game.bGameEnded )
	{
		[COLOR="Lime"]Sleep(1.f);[/COLOR]
		if( MidGameSaveWaves>0 && KFGT!=None && KFGT.WaveNum!=LastSavedWave )
		{
			LastSavedWave = KFGT.WaveNum;
			InitNextWave();
		}
	}
	CheckWinOrLose();
	SaveStats();
}
 
Upvote 0
Surly, can you do me a favor and add the following code in ServerPerksMut:

Code:
state SaveStats
{
Begin:
    SaveStats();
    if ( !Level.Game.bGameEnded )
        GotoState('EndGameTracker');
}

Then it will be much easier to force stat saving from other mutators without linking them to ServerPerksMut.
 
Upvote 0
I added:
Code:
state SaveStatsState
{
Begin:
    SaveStats();
    if ( !Level.Game.bGameEnded )
        GotoState('EndGameTracker');
}
Since SaveStats is a function, it can't also be a state. Uploaded the change to v1.33, and this will probably be the last update for at least 2 weeks while I'm without internets (but I will be working on a new version in this time).
 
Upvote 0
I'm loving the mutator so far; the custom spawns and waves are gonna be fun when I get it all set. But I'm wondering why after installing this mutator, no one can buy things like the thompson, or the flare revolvers, or basically any of the newer items, DLC included. I stumbled on a thread mentioning KF_DLC.utx for a similar problem last night. I checked my server and sure enough the file was tiny compared the the one I had on my home PC, so I uploaded the bigger one, hoping it would fix the issue, and it didn't, at least for the flares. I don't have many DLC packs so I can't say for sure what's fixed and what isn't. But then, didn't I read somewhere that these mutators are unable to check if a user has the rights to the DLC weapons, only the DLC characters?
 
Upvote 0
I'm loving the mutator so far; the custom spawns and waves are gonna be fun when I get it all set. But I'm wondering why after installing this mutator, no one can buy things like the thompson, or the flare revolvers, or basically any of the newer items, DLC included. I stumbled on a thread mentioning KF_DLC.utx for a similar problem last night. I checked my server and sure enough the file was tiny compared the the one I had on my home PC, so I uploaded the bigger one, hoping it would fix the issue, and it didn't, at least for the flares. I don't have many DLC packs so I can't say for sure what's fixed and what isn't. But then, didn't I read somewhere that these mutators are unable to check if a user has the rights to the DLC weapons, only the DLC characters?

Check the trader inventory in the config file. There's a good chance the weapons aren't listed there, and therefore won't show up in game. Keep in mind (at least in the original ServerPerks) the Perks were written before many of the newer weapons came out, so even if you add them to the trader they may not be perked.

If they're not there, you'll have to grab the pickup class names of the weapons and add them yourself. You can find the source for the weapons (and a great deal of other things) in a folder called KFMod in your Killing Floor directory.

There are a couple ways to deal with DLC weapons not being perked if that turns out to be the case (which I imagine it will be). I'd check the original ServerPerks thread, I know someone linked a more recent version of the KF perks. You'll probably have to change a few things around in the .ini to get them working (the lines that say "Perks=PackageName.ClassName"), but they should work nonetheless.
 
Upvote 0
Thanks PotentiaLeaena, but they are listed in the config correctly. A helpful modder told me the problem is basically that servers running non-whitelisted content can't lookup whether or not a user has purchased the DLC, and just assumes no one has. There is a fix, but not sure if tripwire-sanctioned per se, so I won't mention, but it is indeed in the source code files in KFMod.
 
Upvote 0
Thanks PotentiaLeaena, but they are listed in the config correctly. A helpful modder told me the problem is basically that servers running non-whitelisted content can't lookup whether or not a user has purchased the DLC, and just assumes no one has. There is a fix, but not sure if tripwire-sanctioned per se, so I won't mention, but it is indeed in the source code files in KFMod.

That's interesting. I wasn't aware of this. I've always been able to load the DLC weapons just by adding them to the TraderInventory lines. Might experiment with it when I get a chance just to double-check.
 
Upvote 0