いくつかの建物が襲撃によって倒されたときにのみ発生するように見えるので、破壊されたタイルに関連していると思います
超高速に配置すると、街並みは信じられないほど遅いように見えます
再生できないところまで
添付の保存を見つけてください
ミッションの建設車両などの敵対的な車両も影響を与えるようです
セーブゲームの後半からのさらなる例
save_SuperHuman 1.zip
車両も動けなくなっているようです
スタックした車両を見つけました
メガフライヤーの上にあります。
save_SuperHuman 1.zip
スタックした車両(建設車両31)をデバッグしています。
セーブゲーム時のミッションは次のとおりです。
W 7613175674 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): CLICKED VEHICLE Construction Vehicle 31 at {42.7708,63.5,7.5}
W 7613244067 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission GotoLocation {43,63,2}
W 7613263414 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission RecoverVehicle
W 7613286861 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission GotoBuilding BUILDING_WAREHOUSE_THREE
ただし、宛先(43,63,2)はadjustTargetToClosestFlyingによって(43,63,7)に書き換えられます。
その時点以降、車両はsetPathToを呼び出すたびに、(43、63、7)とランダムな近くのターゲットに移動しようとする間で振動します。
After setPathTo: Vehicle [Construction Vehicle 31] path: (41,63,7) -> (41,63,7) -> (42,63,7) -> (43,63,7)
After setPathTo: Vehicle [Construction Vehicle 31] path: (43,63,7) -> (43,63,7) -> (42,64,6) -> (41,63,5) -> (41,62,4)
After setPathTo: Vehicle [Construction Vehicle 31] path: (41,62,4) -> (41,62,4) -> (41,62,5) -> (41,62,6) -> (42,63,7) -> (43,63,7)
After setPathTo: Vehicle [Construction Vehicle 31] path: (43,63,7) -> (43,63,7) -> (43,62,7) -> (42,61,6)
After setPathTo: Vehicle [Construction Vehicle 31] path: (42,61,6) -> (42,61,6) -> (43,62,7) -> (43,63,7)
After setPathTo: Vehicle [Construction Vehicle 31] path: (43,63,7) -> (43,63,7) -> (44,64,6) -> (45,65,5) -> (45,65,4)
...
この@ashenomo <3を調べてくれてありがとう
あなたが解決策を見つけることができれば私は大いに感謝するでしょう
理想的には、車両がループでスタックしていることを認識し、ループを強制する適切な目的地であるランダムなターゲットのチェックが不足していると思われるため、適切で明確な最終目的地への新しいミッションを生成する必要があります
車両がこれらのループでスタックすると、ランディングチューブタイルまたはメガフライヤーファクトリーにあることがよくあります。
どこかに悪いタイルタイプがない限り、メガフライヤーファクトリーが特にそのような問題を引き起こす理由はわかりませんか?
これは、目的地が別の車両によって占有されているときにトリガーすることを目的とした「サイドステッピング」ロジックのように見えます。 ターゲットは一時的に近くの空のタイルに変更されます。 車両がそのタイルに到達すると、元のターゲットに再び移動しようとします。
しかし、この場合、どういうわけかサイドステッピングを引き起こしている車両はCV31です。つまり、それはそれ自体と衝突しようとしていると考えています。 コード
これを示すために追加した追加のログ:
W 14531114914 void OpenApoc::VehicleMission::setPathTo(OpenApoc::GameState &, OpenApoc::Vehicle &, Vec3<int>, int, bool, bool): ** setPathTo for [Construction Vehicle 31] to (43,63,2), maxIter:450, cV:Y, giveUp:N, currentPath n:0
W 14531141711 void OpenApoc::VehicleMission::setPathTo(OpenApoc::GameState &, OpenApoc::Vehicle &, Vec3<int>, int, bool, bool): *** adjustTargetToClosestFlying: [Construction Vehicle 31] (43, 63, 2), piNe: N
W 14531234219 static bool OpenApoc::VehicleMission::adjustTargetToClosestFlying(OpenApoc::GameState &, OpenApoc::Vehicle &, Vec3<int> &, bool, bool, bool &): Target (43,63,7) contains vehicle [Construction Vehicle 31]. This will trigger a target adjustment.
車両が自分自身を避けようとしないことを確認するために追加のチェックを追加することは良い考えのように聞こえます。
とはいえ、サイドステッピングでこれが解決しない理由はわかりません。
さらにいくつかのデバッグノート:
W 417133364405 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission GotoLocation {43,63,2}
W 417133397242 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission RecoverVehicle
W 417133421554 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission GotoBuilding BUILDING_WAREHOUSE_THREE
pickNearest
は、このGotoLocationミッションではfalseです。したがって、車両が正確な場所に到達するまで完了しません。 それは不可能です。この以前のセーブゲームを見てください:
いくつかの建物が襲撃によって倒されたときにのみ発生するように見えるので、破壊されたタイルに関連していると思います
超高速に配置すると、街並みは信じられないほど遅いように見えます
再生できないところまで添付の保存を見つけてください
Blazer Turbo Bike 49(破壊されたHadesブロックの近く)は、破壊された道路タイルである(86,78,2)に到達しようとしています。 しかし、スタックした建設車両と同様に、この車両のすべてのティックでsetPathToが呼び出されているのがわかります。これは、おそらく速度低下の一因となっています。
修正のPRは次のとおりです(手動でのみ確認済み)。
https://github.com/OpenApoc/OpenApoc/pull/563
最も参考になるコメント
修正のPRは次のとおりです(手動でのみ確認済み)。
https://github.com/OpenApoc/OpenApoc/pull/563