Oh that's an interesting feature now.
visualising the reachable area ...I like this idea.
Oh that's an interesting feature now.
This depends from another coverage. On picture max distance fit to 1600, but exists big not covered area on left and right side of circles intersection. From where return to net can be a problem for usual bot/monster.sektor2111 wrote: ↑Thu May 06, 2021 10:20 pm Safety notes:
Stick at Max 1600 UU length. Pawn blocked in the middle won't resume navigation too soon. Pawn blocked closer to initial point resumes navigation from there and facing the blocker again = Loop. It's why the best practice could be at 1200 - 1400 if map it's... bigger. If map is really obstructed - small - I never recommend 1000 UU length for paths, here are generated just too many links which are not needed
Code: Select all
Botpack/Classes/Bot.uc:3038: PickLocalInventory(160, 1.8);
Botpack/Classes/Bot.uc:3043: PickLocalInventory(200, 1);
Botpack/Classes/Bot.uc:3048: PickLocalInventory(280, 0.55);
Botpack/Classes/Bot.uc:3051: PickLocalInventory(400, 0.5);
Botpack/Classes/Bot.uc:3070: if ( PickLocalInventory(600, 0) )
Botpack/Classes/Bot.uc:3105: if ( PickLocalInventory(300, 0.55) )
Botpack/Classes/Bot.uc:3128: if ( !bTriedToPick && PickLocalInventory(600, 0) )
Botpack/Classes/Bot.uc:4610: PickLocalInventory(160, 1.8);
Botpack/Classes/Bot.uc:4615: PickLocalInventory(200, 1);
Botpack/Classes/Bot.uc:4620: PickLocalInventory(200, 0.55);
Botpack/Classes/Bot.uc:4623: PickLocalInventory(400, 0.5);
Code: Select all
state Roaming
{
...
function PickDestination()
{
....
// look for long distance inventory
BestPath = FindBestInventoryPath(BestWeight, !bNovice && (skill >= 2));
//log("roam to"@BestPath);
//log("---------------------------------");
if ( BestPath != None )
{
MoveTarget = BestPath;
return;
}
....
if ( RoamTarget == None )
{
i = 0;
for ( N=Level.NavigationPointList; N!=None; N=N.NextNavigationPoint )
if ( N.IsA('InventorySpot') )
{
i++;
if ( (RoamTarget == None) || (Rand(i) == 0) )
RoamTarget = N;
}
}
// roam around
if ( RoamTarget != None )
{
if ( ActorReachable(RoamTarget) )
{
MoveTarget = RoamTarget;
RoamTarget = None;
if ( VSize(MoveTarget.Location - Location) > 2 * CollisionRadius )
return;
}
else
{
BestPath = FindPathToward(RoamTarget);
if ( BestPath != None )
{
MoveTarget = BestPath;
return;
}
else
RoamTarget = None;
}
}
....
False, I wrote Bot codes and so I know what I'm talking about - usually I do around 20-30 tests before to claim something READY. Even in a DeathMatch I can bring Bot to certain spot based on Bot itself. Bot reacts like a fish, a good bite catches him. A push code must leave pawn alone if has a target and sending it to a node ONLY if has Nothing to do - WANDERING. It doesn't affecting anything unless map is plain dumb - actor does damage in maps with lava holes and all sort of hazard and no, a generic mutator it's not welcomed at all in such a case.
Too bad that you think I am think that...sektor2111 wrote: ↑Fri May 07, 2021 6:50 pm Too bad that you think DeathMatch works only this way...
And probably without enough ammo.