elitetrials / ut2004-mutbesttimes Goto Github PK
View Code? Open in Web Editor NEWA records keeping mutator for UT2004's popular Trial maps.
Home Page: https://eliotvu.com/portfolio/view/5/mutbesttimes
A records keeping mutator for UT2004's popular Trial maps.
Home Page: https://eliotvu.com/portfolio/view/5/mutbesttimes
Servers running MutBestTimes are experiencing random crashes when the server is collecting garbage especially during a server travel.
This happens regardless of whether new ghosts or records were set.
The following is a crash when after the server saved new ghost data files:
Socket shut down
Collecting garbage
Signal: SIGSEGV [segmentation fault]
Aborting.
Crash information will be saved to your logfile.
Developer Backtrace:
[ 1] ./ucc-bin() [0x86329f9]
...
Unreal Call Stack: UObject::GetFullName <- TestReach <- TArray<< <- UModel::Serialize <- TestReach <- ULevel::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UObject::Serialize <- AActor::Serialize <- TestReach <- UStruct::SerializeBin <- UClass::Serialize <- TestReach <- SerializeExpr <- SerializeExpr <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::Serialize <- UFunction::Serialize <- TestReach <- UField::Serialize <- UStruct::S
Exiting.
The next log occurs when no new ghost data files are made:
Collecting garbage
Purging garbage
Signal: SIGSEGV [segmentation fault]
Aborting.
Crash information will be saved to your logfile.
Developer Backtrace:
[ 1] ./ucc-bin() [0x86329f9]
...
[13] ./ucc-bin(__strtod_internal+0x32ad) [0x804d32d]
[14] /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf7) [0xf74cc637]
[15] ./ucc-bin(readdir+0x91) [0x804a9f1]
Unreal Call Stack: UObject::GetPathName <- UObject::GetPathName <- UObject::GetPathName <- UObject::GetFullName <- DispatchDestroy <- DispatchDestroys <- UObject::PurgeGarbage <- UObject::CollectGarbage <- Cleanup <- UGameEngine::LoadMap <- LocalMapURL <- UGameEngine::Browse <- ServerTravel <- UGameEngine::Tick <- UpdateWorld <- UServerCommandlet::Main
Exiting.
Regardless it is not evident whether this is an issue related to MutBestTimes.
As it currently stands only the final objective instigator will have a recorded ghost with movements data, this is probably due the fact that pressing the final objective will kills its instigator; as the instigator dies the TrialGroup mod will kill the remaining team mates before BTimes gets a chance to save their ghosts movements data.
in past versions this was used because of a performance issue caused by the array used to store the ghost frames being resized for every frame to be saved
i only skimmed over the new code but this seems to be fixed now (maybe by accident) by setting the length of the array in advance so there shouldnt be a need for queueing frames anymore
in an older version that i had patched this resulted in near instantaneous ghost saves even for hour long ghosts and prevented broken ghosts / server crashes on map change so i thought you might wanna give it a shot
If a player sets a new record when player has already an active ghost playing then the new ghost will never finish the saving process.
Probable cause is that a new ghost data file will logically have lesser movement keys than the old ghost data file and thus never reaching a threshold.
At least on STR maps with multiple levels, ghosts will not be destroyed during map restart.
Another crash case (only since the last GhostManager related update):
Collecting garbage
Purging garbage
Unhashed name 'BTGhost_STR-JaNyShiT-01-Industry_e9a915bde9c6ccd6ff26fc3a97fd42'
Executing UObject::StaticShutdownAfterError
Unhashed name 'BTGhost_STR-JaNyShiT-01-Industry_e9a915bde9c6ccd6ff26fc3a97fd42'
History:
Exiting due to error
Exiting.
And yet another case:
*** ServerTraveling ***
Moving '../Saves/Save.tmp' to '../Saves/BTGhost_GTR-GeometricAbsolution_2e216ede3cf7a275764b04b5ccdd005d.uvx'
Save=23.167877
Moving '../Saves/Save.tmp' to '../Saves/BTGhost_GTR-GeometricAbsolution_d1be5996b0a81ef2193ce5d422b91800.uvx'
ProcessServerTravel: ?restart
...
Collecting garbage
Purging garbage
Unhashed name 'BTGhost_GTR-GeometricAbsolution_2e216ede3cf7a275764b04b5ccdd005'
Executing UObject::StaticShutdownAfterError
Unhashed name 'BTGhost_GTR-GeometricAbsolution_2e216ede3cf7a275764b04b5ccdd005'
What's interesting here is that the latter is missing a d after 005.
Originally posted by @EliotVU in #7 (comment)
It is not clear how a player can disable a map checkpoint once it is set.
A solution to this would be to disable the checkpoint as soon as the player dies by a "suicide", a checkpoint should only remain active if its instigator death was due the environment.
The only downside to this is the fact that deaths caused by crushing movers are recognized as a "suicide".
Currently players can click the "Watch Ghost" button on RTR maps but this feature is not enabled on RTR mpa instances.
Hello @EliotVU ,
Nice work here.
Having some issues to get it to work correctly
For the compilation of the mutator,
Shouldn't there be the .u files?
Or if there is any .readme for the installation somewhere?
Thanks you very much
Regards,
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.