Yes "Game Ended" is another way...
Hint: In MH2 used by me I have eliminated stupid monsters attack before game start and invisible weapons by using this state for monsters. Actually if nobody play, it's useless to do iterators and new actors if map will change soon - that's my dumb logic.
"Auto State" contains a lot of executions which simply are not needed if no hunter is there - including original solution in making a weapon from Skaarj invisible if has spawned and held so early. I could awake them at first player joined but... nah... if game is not started nobody moves around. Yes, GameEnded saved me - during this time I could remove some of them which are useless (maps with a crap-ton of them added in level crashing at teaming problem due to internal iterators).
Edit:Another mention:
Let's say a Level type LongCorridor having XC Links will save even a NON XC Server from crashing... as follows:
- 2 Pathnodes will replace WarpZoneMarkers and...;
- WarpZoneMarkers will have 100.. 00 ExtraCost... because;
- human tester fooling around those paths might do something funny:
Code: Select all
Critical: appError called:
Critical: WarpZoneMarker MH-__________.WarpZoneMarker15 (Function Engine.WarpZoneMarker.SpecialHandling:0000) Infinite script recursion (250 calls) detected
Exit: Executing UObject::StaticShutdownAfterError
Critical: FFrame::Serialize
Critical: UObject::ProcessEvent
Critical: (WarpZoneMarker MH-__________.WarpZoneMarker15, Function Engine.WarpZoneMarker.SpecialHandling)
Critical: APawn::HandleSpecial
Critical: UObject::ProcessEvent
etc...
And then probably these craps have no "SpecialHandling" deal for player (lol to custom games HideAndSeek types) but they do have now (at least I have done some changes around):
Code: Select all
/* SpecialHandling is called by the navigation code when the next path has been found.
It gives that path an opportunity to modify the result based on any special considerations
*/
/* FIXME - how to figure out if other side actor is OK and use intelligently for all dests?
*/
function Actor SpecialHandling(Pawn Other)
{
//Ns Add: More intelligently is preventing a crash based on default zero deal, geniuses !
if (PlayerPawn(Other) != None))
return Self;
//End of Add
if (Other.Region.Zone == markedWarpZone)
markedWarpZone.ActorEntered(Other);
return self;
}
/*
if ( markedWarpZone.numDestinations <= 1 )
return self;
if ( markedWarpZone.OtherSideActor is OK )
return self;
Ns Question: Why Engine returns a path if OtherSideActor is not OK ??? Why should it do routes in there ???
if (TriggerActor == None)
{
FindTriggerActor();
if (TriggerActor == None)
return None;
}
return TriggerActor;
}
*/
Eheh... the other "friend" WarpZoneInfo looks like do works better with less simulated stuff - someone doesn't understand who is AUTHORITY and who decides Locations - else I have written some breakers in State "DelayedWarp" in purpose to slow down tick crapping pawn iterations.
It's probably time to rewrite teleporters... Or not ?
Because I might have a recommendation toward Bot through Warp-Zones:
Add 2 Teleporters ruined into those zones (less collision as possible but still Enabled) do "PathsDefine" command. Find WarpZoneMarkers and put their cost 10000000 (something high) letting teleporters to manage routes - end of navigation troubles...