• 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/

Beta Release [Mutator] Project One

So I take it other mods, such as Auto-rage disabler/mut are incompatiable also. It's a shame. Think it's possible for that feature to be added?

I think he's referring to the game mode specifically (i.e. Project One is a gametype mod of base Survival mode), so any mutator that doesn't mess with such things (including the Auto-rage Disabler/Mod) should still work.

Let me know if it isn't working though.
 
Upvote 0
About map voting

About map voting

Hello,

I got ServerExt Mutator installed and it has mapvote system..

Question 1: Do I need to change this line to active project one mutator after changing map?
KFMapVote.ini GameClass="KFGameContent.KFGameInfo_Survival"

change to

KFMapVote.ini GameClass="ProjectOneV2.KFGameInfo_ProjectOne"

I notice it has option, so I change option to this line:
Options="Game=ProjectOneV2.KFGameInfo_ProjectOne"

It seems like change the option usually get server crash, this is crash log:
[1270.54] Warning: SpawnActor destroyed [KFPawn_ZedClot_Slasher_75] after spawning because it was encroaching on another Actor
[1270.54] Warning: Warning, Failed to spawn KFPawn_ZedClot_Slasher at X=-1071.000 Y=-1409.000 Z=-670.000 (Marker Index 9) in volume KFSpawnVolume_4
[1270.54] Warning: Warning, Not all AI spawned for volume KFSpawnVolume_4 with 9 markers
[1289.52] Warning: SpawnActor destroyed [KFPawn_ZedCrawler_135] after spawning because it was encroaching on another Actor
[1289.52] Warning: Warning, Failed to spawn KFPawn_ZedCrawler at X=-248.000 Y=-1024.241 Z=-659.500 (Marker Index 9) in volume KFSpawnVolume_27
[1289.52] Warning: Warning, Not all AI spawned for volume KFSpawnVolume_27 with 9 markers
[1294.66] Log: [KFPawn_ZedStalker_47] Attempt to find path from PathNode KF-N64Goldeneye_FacilityV3.TheWorld:persistentLevel.PathNode_7 to PathNode KF-N64Goldeneye_FacilityV3.TheWorld:persistentLevel.PathNode_7 failed because start is the goal
[1294.82] Log: [KFPawn_ZedStalker_47] Attempt to find path from PathNode KF-N64Goldeneye_FacilityV3.TheWorld:persistentLevel.PathNode_80 to PathNode KF-N64Goldeneye_FacilityV3.TheWorld:persistentLevel.PathNode_80 failed because start is the goal
[1309.48] Warning: SpawnActor failed because of collision at the spawn location [X=-194.670 Y=-3453.938 Z=-531.322] for [KFProj_Bullet_Pellet]
[1309.48] Warning: SpawnActor failed because of collision at the spawn location [X=-194.670 Y=-3453.938 Z=-531.322] for [KFProj_Bullet_Pellet]
[1309.48] Warning: SpawnActor failed because of collision at the spawn location [X=-194.670 Y=-3453.938 Z=-531.322] for [KFProj_Bullet_Pellet]
[1309.48] Warning: SpawnActor failed because of collision at the spawn location [X=-194.670 Y=-3453.938 Z=-531.322] for [KFProj_Bullet_Pellet]
[1309.49] Warning: SpawnActor failed because of collision at the spawn location [X=-194.670 Y=-3453.938 Z=-531.322] for [KFProj_Bullet_Pellet]
[1309.49] Warning: SpawnActor failed because of collision at the spawn location [X=-194.670 Y=-3453.938 Z=-531.322] for [KFProj_Bullet_Pellet]
[1309.49] Warning: SpawnActor failed because of collision at the spawn location [X=-194.670 Y=-3453.938 Z=-531.322] for [KFProj_Bullet_Pellet]
[1311.07] Log: Script call stack:
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep

[1311.08] Critical: appError called: Infinite script recursion (250 calls) detected
ProjectOneMut KF-N64Goldeneye_FacilityV3.TheWorld:persistentLevel.ProjectOneMut_1
Function Engine.Mutator:AlwaysKeep:0000
Script call stack:
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep

[1311.09] Critical: Windows GetLastError: X>???!?d}?(8)
[1312.82] Log: === Critical error: ===
Infinite script recursion (250 calls) detected
ProjectOneMut KF-N64Goldeneye_FacilityV3.TheWorld:persistentLevel.ProjectOneMut_1
Function Engine.Mutator:AlwaysKeep:0000
Script call stack:
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep


Address = 0xfcffb3dd (filename not found) [in C:\Windows\system32\KERNELBASE.dll]
Address = 0x3f67a275 (filename not found) [in C:\KF2\Binaries\win64\KFServer.exe]
Address = 0x3f639e3b (filename not found) [in C:\KF2\Binaries\win64\KFServer.exe]
Address = 0x3f600cc9 (filename not found) [in C:\KF2\Binaries\win64\KFServer.exe]
Address = 0x3f639c76 (filename not found) [in C:\KF2\Binaries\win64\KFServer.exe]
[1312.85] Exit: Executing UObject::StaticShutdownAfterError
[1312.85] Exit: Executing UWindowsClient::ShutdownAfterError
[1312.86] Log: appRequestExit(1)

Question 2: I don't know how the SpawnRateMod work, if I want to let the monsters all spawn at one wave (for instant 85 monsters), then how do I do ?

Question 3: I notice that the ServerExt has as same function on maxplayer as project one, I'm curiously if these two mutator will affect each other or just override other's function?

Last question: I would like to know if there's a log can give server owner to watch how many zeds will spawn with fake player amount, and how many hp the zed has if I change the ZedHealthModList...etc.

Thank you sir, your mutator is so wonderful. ;D

PS:
I got server crash event I don't change the mapvote.ini, the crash message is the same with FileNotFound KF2Server.exe exception and lots of Address pointer log. (I have BRTServerAds, ServerExtMut, ProjectOne, AdminCmdsMut, SlotsMut installed)
 
Last edited:
Upvote 0
Question 1: Do I need to change this line to active project one mutator after changing map?
I'm not sure - I've never used Marco's mapvote system from Server Ext, this is probably a question for him!

Question 2: I don't know how the SpawnRateMod work, if I want to let the monsters all spawn at one wave (for instant 85 monsters), then how do I do ?
Due to how KF2's spawning system works, instantly spawning the entire wave isn't really possible. If SpawnRateMod isn't going very fast when set to 0, I'd recommend setting SpawnRateMod to 0.00001 instead since users are reporting that works better.

Question 3: I notice that the ServerExt has as same function on maxplayer as project one, I'm curiously if these two mutator will affect each other or just override other's function?
You should set both to the same number. Project One and Server Ext both have systems that check to see if the number has already been changed to the one they want so they won't conflict.

Last question: I would like to know if there's a log can give server owner to watch how many zeds will spawn with fake player amount, and how many hp the zed has if I change the ZedHealthModList...etc.
Project One has 3 debug options at the bottom of the config file. If you set the value "bDebugDamage" to true in your config, you should see a log output each time something takes damage. If "bWeaponDebug" is set to true, Project One will write to the log every time it modifies a weapon's values (used for logging the switch speed modification and medic gun modifier as well as applying the knife movement speed bonus). If "bFakedDebug" is true, all of the spawning changes are logged. So spawn time modification, faked player modifications, and some new features that are coming in V3 will all be logged when they're used.

Looking at the log you sent... I think what might be happening is that the server is making 2 copies of Project One, as usually the object in the error should be ProjectOneMut_0 and not ProjectOneMut_1. Maybe you're adding the mutator twice in your server config?

-> After discussing this with a friend, if you have a duplicate of any mutator in your server config, this error can happen. Check your server actors list as well as your options list for any duplication!

If that's not the case then I don't think this has anything to do with Project One... AlwaysKeep() is being called a bunch of times to the point where the game thinks it's stuck in an endless loop. The problem with this is that Project One doesn't use the function AlwaysKeep(). I'm not really sure how to debug this. Maybe change the order of your mutators in your server config and see if anything changes?

Thank you sir, your mutator is so wonderful. ;D
Thanks!
 
Last edited:
Upvote 0
I'm not sure - I've never used Marco's mapvote system from Server Ext, this is probably a question for him!

Thank you sir, I will ask him for more details on mapvote system.

I'd recommend setting SpawnRateMod to 0.00001 instead since users are reporting that works better.

I've tested it and it worked as what you said. Now I know how it works. More small the rate value, the more fast the mobs spawning, and it has limitation on spawning speed. :)

Project One has 3 debug options at the bottom of the config file.

Wow ! I enable the log and saw lots of useful information like PROJECT ONE: text in console prompt. If it has monsters health information (after scaling health with n players and mutator's multiple formula), it would be more handy to adjust the value.:p

Looking at the log you sent... I think what might be happening is that the server is making 2 copies of Project One.

I found the problem ! I checked PCServer-KFGame.ini file, I saw two section of projectone in it, I think it was added automatically by server, remove it and it works without any error ! weee~

I'm looking forward to v3 version of project one mutator. Thank you very much ! ;)

// I got new error on it, sometimes it happened...
I have these mutator installed:
ProjectOneV2, ServerExtMut, BRTSServerAds, AdminCmdsV2, UnlimitedZeds
(Situation 1) Crash error log:
[13140.85] ScriptWarning: Accessed None 'LaserSight'
KFWeap_Eviscerator KF-Frozen.TheWorld:persistentLevel.KFWeap_Eviscerator_0
Function KFGame.KFWeapon:Active.BeginState:019B
[13152.67] ScriptLog: #### FirstPerson
[13153.55] Log: Script call stack:
Function GameFramework.GameExplosionActor:preBeginPlay
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function ProjectOneV2.ProjectOneMut:CheckReplacement

[13153.57] Critical: appError called: Infinite script recursion (250 calls) detected
ProjectOneMut KF-Frozen.TheWorld:persistentLevel.ProjectOneMut_0
Function ProjectOneV2.ProjectOneMut:CheckReplacement:0000
Script call stack:
Function GameFramework.GameExplosionActor:preBeginPlay
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function ProjectOneV2.ProjectOneMut:CheckReplacement

[13153.60] Critical: Windows GetLastError: X>???!?d}?(8)
[13154.68] Log: === Critical error: ===
Infinite script recursion (250 calls) detected
ProjectOneMut KF-Frozen.TheWorld:persistentLevel.ProjectOneMut_0
Function ProjectOneV2.ProjectOneMut:CheckReplacement:0000
Script call stack:
Function GameFramework.GameExplosionActor:preBeginPlay
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function Engine.Mutator:IsRelevant
Function ProjectOneV2.ProjectOneMut:CheckReplacement


Address = 0xfcffb3dd (filename not found) [in C:\Windows\system32\KERNELBASE.dll]
Address = 0x3fd1a275 (filename not found) [in C:\KF2\Binaries\win64\KFServer.exe]
Address = 0x3fcd9e3b (filename not found) [in C:\KF2\Binaries\win64\KFServer.exe]
...
[13154.71] Exit: Executing UObject::StaticShutdownAfterError
[13154.72] Exit: Executing UWindowsClient::ShutdownAfterError
[13154.72] Log: appRequestExit(1)

(Situation 2) Crash error log:
[3055.06] ScriptWarning: - I'm just in the inventory, so resync client and server
KFWeap_AssaultRifle_Medic KF-lotd-downtownV1.TheWorld:persistentLevel.KFWeap_AssaultRifle_Medic_0
Function Engine.Weapon:Inactive.ServerStartFire:03A7
[3056.03] ScriptWarning: Calling LogZedKilled() without committing previous context!
KFGameplayEventsWriter KF-lotd-downtownV1.TheWorld:persistentLevel.KFGameInfo_ProjectOne_0.KFGameplayEventsWriter_1
Function KFGame.KFGameplayEventsWriter:LogZedKilled:00AE
[3056.19] ScriptLog: PROJECT ONE: Next spawn time modified from 6.4848 to 0.0000
[3083.74] Log: Script call stack:
Function Engine.Actor:preBeginPlay

[3083.74] Critical: appError called: Infinite script recursion (250 calls) detected
ExplosionNotifyActor KF-lotd-downtownV1.TheWorld:persistentLevel.ExplosionNotifyActor_177
Function Engine.Actor:preBeginPlay:0000
Script call stack:
Function Engine.Actor:preBeginPlay

[3083.74] Critical: Windows GetLastError: X>???!?d}?(8)
[3084.79] Log: === Critical error: ===
Infinite script recursion (250 calls) detected
ExplosionNotifyActor KF-lotd-downtownV1.TheWorld:persistentLevel.ExplosionNotifyActor_177
Function Engine.Actor:preBeginPlay:0000
Script call stack:
Function Engine.Actor:preBeginPlay


Address = 0xfcffb3dd (filename not found) [in C:\Windows\system32\KERNELBASE.dll]
Address = 0x3f7da275 (filename not found) [in C:\KF2\Binaries\win64\KFServer.exe]
...
[3084.79] Exit: Executing UObject::StaticShutdownAfterError
[3084.79] Exit: Executing UWindowsClient::ShutdownAfterError
[3084.79] Log: appRequestExit(1)

(Situation 3) Crash error log:
[6136.48] ScriptLog: PROJECT ONE: Next spawn time modified from 3.1096 to 0.0000
[6137.49] ScriptLog: PROJECT ONE: Next spawn time modified from 3.0074 to 0.0000
[6138.16] Log: PlayCustomAnim Death_V3, CustomChildIndex: 1, Animation Not Found!!
[6138.17] Log: Script call stack:
Function GameFramework.GameExplosionActor:preBeginPlay
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep

[6138.19] Critical: appError called: Infinite script recursion (250 calls) detected
ProjectOneMut KF-MAP30_v1.TheWorld:persistentLevel.ProjectOneMut_0
Function Engine.Mutator:AlwaysKeep:0000
Script call stack:
Function GameFramework.GameExplosionActor:preBeginPlay
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep

[6138.21] Critical: Windows GetLastError: X>???!?d}?(8)
[6138.77] Log: === Critical error: ===
Infinite script recursion (250 calls) detected
ProjectOneMut KF-MAP30_v1.TheWorld:persistentLevel.ProjectOneMut_0
Function Engine.Mutator:AlwaysKeep:0000
Script call stack:
Function GameFramework.GameExplosionActor:preBeginPlay
Function Engine.Actor:preBeginPlay
Function Engine.GameInfo:CheckRelevance
Function Engine.Mutator:CheckRelevance
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep
Function Engine.Mutator:AlwaysKeep


Address = 0xfcffb3dd (filename not found) [in C:\Windows\system32\KERNELBASE.dll]
Address = 0x3f4da275 (filename not found) [in C:\KF2\Binaries\win64\KFServer.exe]
...
[6138.81] Exit: Executing UObject::StaticShutdownAfterError
[6138.81] Exit: Executing UWindowsClient::ShutdownAfterError
[6138.82] Log: appRequestExit(1)

It seems like the original point is "ExplosionNotifyActor",now I set the bChainGrenades to false to see if it is the main problem. Thanks! :D

// update
Server hasn't crashed since yesterday. I think bChainGrenades module cause the problem. :D
 
Last edited:
Upvote 0
I've tested it and it worked as what you said. Now I know how it works. More small the rate value, the more fast the mobs spawning, and it has limitation on spawning speed. :)
Sounds good. nateku2 found the bug with 0 being slow - I'm, not entirely sure why that's happening... Glad the work around is working!

Wow ! I enable the log and saw lots of useful information like PROJECT ONE: text in console prompt. If it has monsters health information (after scaling health with n players and mutator's multiple formula), it would be more handy to adjust the value.:p
I'll add that into V3. It's important to turn debug options off when you've finished debugging. An entire 10 wave game using these would end up with a log size in gigabytes and will slow your server down (and maybe even crash it)!

Crash error logs.
I have a very strong feeling that crash 1 and 3 are another situation of a duplicate entry in your log. However, crash 2 seems to have to do with grenade chaining, as you figured out. V3 will have a fix for this.

is there any chance of adding or is there already.....

something where you can increase the amount of zeds
so say like.... wave 5-6 has 2 Scrakes for example.
is there a way to increase the scrakes to say like 10 at a time....

so people would have to run and not camp
This is doable. I think some custom servers has their own custom wave setup already. It's very simple to change, but the issue comes down to making it easy to configure through Project One.

Another thing: Apparently some server owners are trying to keep the way to change zeds in a wave a secret, so let me explain exactly where waves are configured! c:

Wave archetypes (per-wave data) are set within each KFAISpawnManager class (so _Short, _Normal, _Long). Killing Floor 2's vanilla wave archetypes are stored in the package GP_Spawning_ARCH, which is a package you can open in the Killing Floor 2 SDK. You can create new ones by re-saving GP_Spawning_ARCH with a new name and modifying your new package, creating a new archetype via the class browser, or writing them in classes. You can then set your new archetypes to the KFAISpawnManager of your choice and you're done!

Project One V3 probably won't have this feature since it'll take me some time to figure out how to make this easily configurable (the primary goal of Project One). If someone does end up making a mutator that does this, that mutator will be compatible with Project One, so don't worry about using both.
 
Upvote 0
Another thing: Apparently some server owners are trying to keep the way to change zeds in a wave a secret, so let me explain exactly where waves are configured! c:

Wave archetypes (per-wave data) are set within each KFAISpawnManager class (so _Short, _Normal, _Long). Killing Floor 2's vanilla wave archetypes are stored in the package GP_Spawning_ARCH, which is a package you can open in the Killing Floor 2 SDK. You can create new ones by re-saving GP_Spawning_ARCH with a new name and modifying your new package, creating a new archetype via the class browser, or writing them in classes. You can then set your new archetypes to the KFAISpawnManager of your choice and you're done!


Thank You for this info! I've been trying to figure out something like this, maybe an endless wave mode which I've seen on some servers, and have been done for regular KF but not ported for KF2 or shared with the community. Appreciate the nudge in the right direction.



 
Last edited:
Upvote 0
Another thing: Apparently some server owners are trying to keep the way to change zeds in a wave a secret, so let me explain exactly where waves are configured! c:

Wave archetypes (per-wave data) are set within each KFAISpawnManager class (so _Short, _Normal, _Long). Killing Floor 2's vanilla wave archetypes are stored in the package GP_Spawning_ARCH, which is a package you can open in the Killing Floor 2 SDK. You can create new ones by re-saving GP_Spawning_ARCH with a new name and modifying your new package, creating a new archetype via the class browser, or writing them in classes. You can then set your new archetypes to the KFAISpawnManager of your choice and you're done!

Project One V3 probably won't have this feature since it'll take me some time to figure out how to make this easily configurable (the primary goal of Project One). If someone does end up making a mutator that does this, that mutator will be compatible with Project One, so don't worry about using both.

Thanks alot man!
 
Upvote 0
Thank You for this info! I've been trying to figure out something like this, maybe an endless wave mode which I've seen on some servers, and have been done for regular KF but not ported for KF2 or shared with the community. Appreciate the nudge in the right direction.


34.gif
An endless wave system would require more gamemode code than actual wave archetype changing.
Thanks alot man!
np!
I just thought of another thing I would like, Be able to set a speed modifier on the enemies too. Don't worry about it for V3 less you want since, I know you're already doing a lot for it.
Added to the list of potential features for V3!
 
Upvote 0
Oh hey I'll be posting an extra mutator soon that allows you to use your own wave archetypes and probably a tutorial on how to setup wave archetypes. Those should be out by the end of the day.

I'm still considering merging it with Project One but I'm not sure yet.

if you do that id love you.. youd probs get alot of hate due to other servers keeping it a 'secret' XD

well we did a test.... for server.. but we get a server miss match error :/
 
Last edited:
Upvote 0
well we did a test.... for server.. but we get a server miss match error :/
Mismatch probably coming from the fact that you overwrote a core file!
You can create new ones by re-saving GP_Spawning_ARCH with a new name and modifying your new package
^ As I wrote here - make sure you didn't accidentally overwrote GP_Spawning_ARCH!
if you do that id love you.. youd probs get alot of hate due to other servers keeping it a 'secret' XD
People that are a part of the modding community and who hide their code/keep secrets aren't helping anyone.

Here's a trial version of the wave modifier and a tutorial on how to setup custom waves in the SDK:

-snip- removed

Please note I have not tested this mutator and should be considered a trial mutator that is to be implemented into Project One at a later date - please be sure to follow the tutorial and report issues!
 
Last edited:
Upvote 0
Upvote 0