Index: binaries/data/mods/public/simulation/ai/petra/defenseArmy.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/defenseArmy.js +++ binaries/data/mods/public/simulation/ai/petra/defenseArmy.js @@ -277,7 +277,7 @@ continue; if (destination && !gameState.isPlayerMutualAlly(gameState.ai.HQ.territoryMap.getOwner(ent.position()))) - ent.moveToRange(destination[0], destination[1], radius, radius+5); + ent.moveToRange(destination[0], destination[1], radius, radius + 5); else ent.stopMoving(); } Index: binaries/data/mods/public/simulation/ai/petra/defenseManager.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/defenseManager.js +++ binaries/data/mods/public/simulation/ai/petra/defenseManager.js @@ -584,7 +584,7 @@ let pos = attacker.position(); let range = attacker.attackRange("Ranged") ? attacker.attackRange("Ranged").max + 15 : 25; if (range * range > API3.SquareVectorDistance(pos, target.position())) - target.moveToRange(pos[0], pos[1], range, range); + target.moveToRange(pos[0], pos[1], range, range + 5); } continue; } Index: binaries/data/mods/public/simulation/ai/petra/navalManager.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/navalManager.js +++ binaries/data/mods/public/simulation/ai/petra/navalManager.js @@ -573,7 +573,7 @@ // New transport ships receive boarding commands only on the following turn. if (gameState.ai.playedTurn < ship.getMetadata(PlayerID, "turnPreviousPosition") + 2) continue; - ship.moveToRange(shipPosition[0] + randFloat(-1, 1), shipPosition[1] + randFloat(-1, 1), 30, 30); + ship.moveToRange(shipPosition[0] + randFloat(-1, 1), shipPosition[1] + randFloat(-1, 1), 30, 35); blockedShips.push(ship); blockedIds.push(ship.id()); } @@ -601,7 +601,7 @@ continue; if (API3.SquareVectorDistance(shipPosition, dock.position()) > 4900) continue; - ship.moveToRange(dock.position()[0], dock.position()[1], 70, 70); + ship.moveToRange(dock.position()[0], dock.position()[1], 70, 75); } } @@ -630,7 +630,7 @@ // New transport ships receives boarding commands only on the following turn. if (gameState.ai.playedTurn < ship.getMetadata(PlayerID, "turnPreviousPosition") + 2) continue; - ship.moveToRange(shipPosition[0] + randFloat(-1, 1), shipPosition[1] + randFloat(-1, 1), 30, 30); + ship.moveToRange(shipPosition[0] + randFloat(-1, 1), shipPosition[1] + randFloat(-1, 1), 30, 35); blockedShips.push(ship); blockedIds.push(ship.id()); } @@ -658,7 +658,7 @@ continue; if (API3.SquareVectorDistance(shipPosition, dock.position()) > 4900) continue; - ship.moveToRange(dock.position()[0], dock.position()[1], 70, 70); + ship.moveToRange(dock.position()[0], dock.position()[1], 70, 75); } } } @@ -678,10 +678,10 @@ unitAIState != "INDIVIDUAL.RETURNRESOURCE.APPROACHING") { if (distSquare < 1600) - blockingShip.moveToRange(shipPosition[0], shipPosition[1], 40, 40); + blockingShip.moveToRange(shipPosition[0], shipPosition[1], 40, 45); } else if (distSquare < 900) - blockingShip.moveToRange(shipPosition[0], shipPosition[1], 30, 30); + blockingShip.moveToRange(shipPosition[0], shipPosition[1], 30, 35); } for (let blockingShip of gameState.ai.HQ.tradeManager.traders.filter(API3.Filters.byClass("Ship")).values()) @@ -698,10 +698,10 @@ if (unitAIState != "INDIVIDUAL.TRADE.APPROACHINGMARKET") { if (distSquare < 1600) - blockingShip.moveToRange(shipPosition[0], shipPosition[1], 40, 40); + blockingShip.moveToRange(shipPosition[0], shipPosition[1], 40, 45); } else if (distSquare < 900) - blockingShip.moveToRange(shipPosition[0], shipPosition[1], 30, 30); + blockingShip.moveToRange(shipPosition[0], shipPosition[1], 30, 35); } } }; Index: binaries/data/mods/public/simulation/ai/petra/startingStrategy.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/startingStrategy.js +++ binaries/data/mods/public/simulation/ai/petra/startingStrategy.js @@ -382,7 +382,7 @@ --num1; ent.setMetadata(PlayerID, "allied", true); let range = 1.5 * cc.footprintRadius(); - ent.moveToRange(cc.position()[0], cc.position()[1], range, range); + ent.moveToRange(cc.position()[0], cc.position()[1], range, range + 5); break; } }); @@ -401,7 +401,7 @@ --num2; ent.setMetadata(PlayerID, "allied", true); let range = 1.5 * cc.footprintRadius(); - ent.moveToRange(cc.position()[0], cc.position()[1], range, range); + ent.moveToRange(cc.position()[0], cc.position()[1], range, range + 5); break; } }); @@ -420,7 +420,7 @@ --num; ent.setMetadata(PlayerID, "allied", true); let range = 1.5 * cc.footprintRadius(); - ent.moveToRange(cc.position()[0], cc.position()[1], range, range); + ent.moveToRange(cc.position()[0], cc.position()[1], range, range + 5); break; } }); Index: binaries/data/mods/public/simulation/ai/petra/transportPlan.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/transportPlan.js +++ binaries/data/mods/public/simulation/ai/petra/transportPlan.js @@ -393,7 +393,7 @@ continue; } if (this.nTry[ent.id()] > 1) - ent.moveToRange(newPos[0], newPos[1], 30, 30); + ent.moveToRange(newPos[0], newPos[1], 30, 35); ent.garrison(ship, true); } else if (API3.SquareVectorDistance(this.boardingPos[shipId], newPos) > 225) @@ -599,9 +599,9 @@ let goal = ent.getMetadata(PlayerID, "endPos"); let dist = goal ? API3.VectorDistance(pos, goal) : 0; if (dist > 30) - ent.moveToRange(goal[0], goal[1], dist-20, dist-20); + ent.moveToRange(goal[0], goal[1], dist-25, dist-20); else - ent.moveToRange(pos[0], pos[1], 20, 20); + ent.moveToRange(pos[0], pos[1], 20, 25); ent.setMetadata(PlayerID, "transport", undefined); ent.setMetadata(PlayerID, "onBoard", undefined); ent.setMetadata(PlayerID, "endPos", undefined); Index: source/simulation2/components/CCmpUnitMotion.cpp =================================================================== --- source/simulation2/components/CCmpUnitMotion.cpp +++ source/simulation2/components/CCmpUnitMotion.cpp @@ -1501,6 +1501,9 @@ { PROFILE("MoveTo"); + if (request.m_MinRange == request.m_MaxRange && !request.m_MinRange.IsZero()) + LOGWARNING("MaxRange must be larger than MinRange; See CCmpUnitMotion.cpp for more information"); + CmpPtr cmpPosition(GetEntityHandle()); if (!cmpPosition || !cmpPosition->IsInWorld()) return false;