Page 1 of 1

[Dominik][0.17.15] Alert "cannot construct due to mixing" by player (+crash)

Posted: Tue Mar 19, 2019 6:44 am
by boskid
What i did:
1/ Placed blueprint

Code: Select all

0eNqdks1qwzAQhN9lzxIolhODXqWUItsbd0F/SHKoMX73ysolpSU0Pu6uNN8MzAq9mTFEchnUCjR4l0C9rZBoctrsu7wEBAWU0QIDp+0+6ZTQ9obcxK0ePskhb2BjQG7EL1Cn7Z0BukyZ8K5Xh+XDzbbHWB48V2IQfCqfvdsdFEHBYAHFZUFEHKg6Qhvywoc4j8g9Gd7rGNEUF79ozYs0LitOFNpIhXc/XQ6x5aGk4jHolYzhAXP0BmfLJ52e8NoXeX9GbQ5FPR+KKn+i23+gS7lqHdVDexncMKYq0UlxOrdNJzq5bd9QtPi/
2/ Hand placed outer 4 assemblers (crude oil unbarrel)
3/ Tried to hand place inner 1 assembler (petrol barrel)

What i expected:
- There should be error sound and flying text over cursor saying "cannot place assembler due to fluid mixing"

What happend:
- There is alert "1 object can't be constructed due to fluid mixing"
alert-on-player-mixing.png
alert-on-player-mixing.png (63.72 KiB) Viewed 2412 times
I consider this to be bug as it spreads information around UI: i expected alert under cursor (as this is player interaction directly, not by robots)

---
minor related bug: when copying settings from one assember to other already placed, there is no alert saying "cannot paste recipe due to fluid mixing" (edit: there is, but it did not show up to me couple of times, and sometimes it is possible to paste recipe that mixes fluids)

---
related crash: fluid mixing check can fail here and let build inner assembler, then crash after saving.

What i did:
1/ new sandbox map with replay
2/ tried to reproduce above issue with alerts
3/ managed to place inner assembler
4/ supprised of result, saved game (
mixing-on-player-placement.zip
(361.86 KiB) Downloaded 132 times
)
5/ when leaving "save" screen, game crashed (
factorio-previous.log
(23.79 KiB) Downloaded 147 times
)

Code: Select all

c:\cygwin64\tmp\factorio-build-z2hre9\src\fluid\fluidbox.cpp (106): FluidBox::PipeConnection::calculateFlowSpeed
c:\cygwin64\tmp\factorio-build-z2hre9\src\fluid\fluidsystem.cpp (63): FluidSystem::update
c:\program files (x86)\microsoft visual studio\2017\buildtools\vc\tools\msvc\14.15.26726\include\ppl.h (2196): Concurrency::_Parallel_chunk_helper<unsigned __int64,unsigned __int64,<lambda_1254a2f84a60b69af2cf9a2bc5bc42ff>,Concurrency::auto_partitioner,0>::operator()
f:\dd\vctools\crt\crtw32\concrt\taskcollection.cpp (370): Concurrency::details::_StructuredTaskCollection::_RunAndWait
c:\program files (x86)\microsoft visual studio\2017\buildtools\vc\tools\msvc\14.15.26726\include\ppl.h (2455): Concurrency::_Parallel_chunk_impl<Concurrency::_Parallel_chunk_helper<unsigned __int64,unsigned __int64,<lambda_1254a2f84a60b69af2cf9a2bc5bc42ff>,Concurrency::auto_partitioner,0>,unsigned __int64,unsigned __int64,<lambda_1254a2f84a60b69af2cf9a2bc5bc42ff>,Concurrency::auto_partitioner const &>
c:\cygwin64\tmp\factorio-build-z2hre9\src\map\map.cpp (1474): Map::updateEntities
c:\cygwin64\tmp\factorio-build-z2hre9\src\game.cpp (191): Game::update
c:\cygwin64\tmp\factorio-build-z2hre9\src\scenario\scenario.cpp (1156): Scenario::update
c:\cygwin64\tmp\factorio-build-z2hre9\src\mainloop.cpp (1104): MainLoop::gameUpdateStep
c:\cygwin64\tmp\factorio-build-z2hre9\src\mainloop.cpp (970): MainLoop::gameUpdateLoop
c:\cygwin64\tmp\factorio-build-z2hre9\src\util\workerthread.cpp (42): WorkerThread::loop
c:\program files (x86)\microsoft visual studio\2017\buildtools\vc\tools\msvc\14.15.26726\include\thr\xthread (230): std::_LaunchPad<std::unique_ptr<std::tuple<void (__cdecl RouterBase::*)(void),ClientRouter *>,std::default_delete<std::tuple<void (__cdecl RouterBase::*)(void),ClientRouter *> > > >::_Go
c:\program files (x86)\microsoft visual studio\2017\buildtools\vc\tools\msvc\14.15.26726\include\thr\xthread (209): std::_Pad::_Call_func

Re: [0.17.15] Alert "cannot construct due to mixing" by player (+crash)

Posted: Tue Mar 19, 2019 7:17 am
by boskid
Crash part expanded:

Sandbox with replay, "all in one"
1/ after building first set:
- part when pasting recipe fails with "can't mix fluids" [good]
2/ after copying full setup:
- it is possible to place inner assembler in left setup (only inner assembler was pasted with blueprint) [bad: fluid mixing]
- there is alert when placing assembler in right setup [bad: alert, not flying text]
3/ saved, but when leaving save screen, crash

Crash cannot be reproduced by simply loading above save file. you need to remove and build inner assembler with recipe that causes mixing

In this one there is different stack trace:

Code: Select all

c:\cygwin64\tmp\factorio-build-z2hre9\src\fluid\fluidbox.cpp (83): FluidBox::PipeConnection::calculateFlowSpeed
c:\cygwin64\tmp\factorio-build-z2hre9\src\fluid\fluidsystem.cpp (63): FluidSystem::update
c:\program files (x86)\microsoft visual studio\2017\buildtools\vc\tools\msvc\14.15.26726\include\ppl.h (2196): Concurrency::_Parallel_chunk_helper<unsigned __int64,unsigned __int64,<lambda_1254a2f84a60b69af2cf9a2bc5bc42ff>,Concurrency::auto_partitioner,0>::operator()
f:\dd\vctools\crt\crtw32\concrt\chores.cpp (149): Concurrency::details::_UnrealizedChore::_StructuredChoreWrapper
f:\dd\vctools\crt\crtw32\concrt\internalcontextbase.cpp (1606): Concurrency::details::InternalContextBase::ExecuteChoreInline
f:\dd\vctools\crt\crtw32\concrt\internalcontextbase.cpp (1721): Concurrency::details::InternalContextBase::Dispatch
f:\dd\vctools\crt\crtw32\concrt\freethreadproxy.cpp (203): Concurrency::details::FreeThreadProxy::Dispatch
f:\dd\vctools\crt\crtw32\concrt\threadproxy.cpp (177): Concurrency::details::ThreadProxy::ThreadProxyMain
-- edit:
related minor issue: i want to barrel oil from pipe directly below assembler, but directly above assembler there is pipe with water. I cannot set recipe because default input pipe for assembler goes from top. I cannot rotate assembler as it has no "fluid-recipe" - this is deadlock. Solution of course is to place assembler somewhere else, setup recipe and rotate-paste settings, or to temporary cut top pipe.

-- edit:
using `/editor`, it is possible to copy-paste building that should not be allowed because of fluid mixing. Using above setup, prepare inner assembler outside of setup and then copy and place it in center - instant fluid mixing, you can then save map. Crash will happen after single tick (using `/editor` time control)

Re: [Dominik][0.17.15] Alert "cannot construct due to mixing" by player (+crash)

Posted: Tue Mar 19, 2019 11:37 am
by Dominik
Hi, thanks for the report. It is an error I made with a fix in the last version. I think that all the issues were from that and are now fixed. I have also split the alerts for the ghost reviving.