Pawn Roaming -> Some Game Crash

Search, find and discuss about Mutators!
Post Reply
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Pawn Roaming -> Some Game Crash

Post by sektor2111 »

Chapter how to not be an ass at making a path crashing type Level is not very known. Then let's see how do these work.
We are disturbed by a spot and we are removing a NavigationPoint, now should be OK, Save As, let's play. Suddenly a game crash occurs depending on how much is level populated with "roamers", because we are ignoring a path rebuild if a modification has been performed.
We might have a solution, or is not a response at this issue entirely created by so called mappers.

If we have a tool for testing Level name and calling "tweakers" we can call a tool mutator which in 0.5 seconds will discard paths and even removing PathNodes, excepting SpawnPoint Teleporter PlayerStart type which are somehow reset.

Games using Camp style can fully use this to stop Bot running and gunning even in best pathed Levels.

Initial goal was to prevent crashing a Level with PathNet screwed up by completely deleting Navigation data.
[attachment=0]NO_AI.zip[/attachment]
I'm sad at using this and I prefer to not have such "tools".
Attachments
NO_AI.zip
(2.62 KiB) Downloaded 130 times
User avatar
Barbie
Godlike
Posts: 2792
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: Pawn Roaming -> Some Game Crash

Post by Barbie »

I messed around with a problem that has the same reason: in some maps double jump (DJ_InventoryItem) does not work any more after picking up a certain inventory item. (Also respawning of that item does not work and the map crashed the server later, but I'm not sure if there is caused also by that issue.) Now I found that this happens, if that inventory item has no InventorySpot - that means that the mapper did not rebuild the map after adding that inventory items. Therefore I've added another check function to my base mutator:

Code: Select all

function int CheckInventorySpots(bool bLogBadInventory) {
/******************************************************************************
Iterates over all Inventory items and reports missing InventorySpots.
Vice versa: reports missing Inventory items of InventorySpots.
Returns the number of suspicious cases.
******************************************************************************/
local int result;
local Inventory inv;
local InventorySpot IS;

	foreach AllActors(class'Inventory', inv)
		if (inv.MyMarker == None)
		{
			result++;
			if (bLogBadInventory)
				LogEx("CheckInventorySpots", inv @ "has no InventorySpot");
		}
	foreach AllActors(class'InventorySpot', IS)
		if (IS.markedItem == None)
		{
			result++;
			if (bLogBadInventory)
				LogEx("CheckInventorySpots", IS @ "has no inventory item");
		}

	return result;
}
Example output
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.ForceField0 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.Armor0 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.Armor1 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.SearchLight0 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.SearchLight1 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.SearchLight2 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.SearchLight3 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.SCUBAGear0 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.HealthPack0 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.HealthPack1 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.HealthPack2 has no InventorySpot
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.InventorySpot4 has no inventory item
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.InventorySpot6 has no inventory item
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.CheckInventorySpots: MH-UM-NaliBoat.InventorySpot7 has no inventory item
2016-06-08 00:39:18 MH-UM-NaliBoat.KHMBase0.Auto State Ready.BeginState(): numbers of suspicious inventory items and their spots: 14
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Pawn Roaming -> Some Game Crash

Post by sektor2111 »

Heh, I saw this post right now... This tool somehow must be rewritten. It's not about InventorySpot without items is about an InventorySpot or something missing/stupidly deleted in Editor without rebuiding paths, the crash in cause looks different. Else I will try something compiled normally. Of course THIS is not a priority, I don't like to bug things this way because of some stupid who don't know what it does in Editor. Previous tool is half operational... because of compiling style it leads in later troubles, at this moment is not the right thing, perhaps someone else will find the right way. Example of such crash, MH-Egyptica, some MH-GolgothaAL_fix (or such) yes it's amazingly called "fix". Even with 0 Bots loaded, a Krall can crash game while is trying to hunt player.
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Pawn Roaming -> Some Game Crash

Post by sektor2111 »

I think the fix in case of such a crash is very simple, I'm not sure if mutator fixer or actor needs more than 1kb of file.
It might be like that:

Code: Select all

class ANameToIncreaseMutatorSize expands Mutator /* or Actor */;

var bool bInitialized;

Event PrebeginPlay()
{
  if (!bInitialized)
  {
      ConsoleCommand("SET LEVELINFO NAVIGATIONPOINTLIST NONE");
      bInitialized=True;
  }
}
Compile it properly and strip code to not exhaust entire disk space by making it smaller... so it doesn't need a hacked compilation.
Post Reply