Skip to content
Permalink
Browse files

Fix instant digging (#5785)

Use runData.dig_time_complete instead of params.time to find out whether it's instant digging.
runData.dig_time_complete is set to something very big if the node can't be dug, whereas param.time is 0 when digging is impossible or it's instant digging. So not using param.time fixes #5728.
  • Loading branch information...
HybridDog authored and nerzhul committed May 20, 2017
1 parent a2bb776 commit 358074b2960b369dfd248bd31e08db93e114a4aa
Showing with 10 additions and 10 deletions.
  1. +10 −10 src/game.cpp
@@ -3903,16 +3903,6 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos,
params = getDigParams(nodedef_manager->get(n).groups, tp);
}

if (!runData.digging) {
infostream << "Started digging" << std::endl;
runData.dig_instantly = params.time == 0;
if (client->moddingEnabled() && client->getScript()->on_punchnode(nodepos, n))
return;
client->interact(0, pointed);
runData.digging = true;
runData.ldown_for_dig = true;
}

if (!params.diggable) {
// I guess nobody will wait for this long
runData.dig_time_complete = 10000000.0;
@@ -3927,6 +3917,16 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos,
}
}

if (!runData.digging) {
infostream << "Started digging" << std::endl;
runData.dig_instantly = runData.dig_time_complete == 0;
if (client->moddingEnabled() && client->getScript()->on_punchnode(nodepos, n))
return;
client->interact(0, pointed);
runData.digging = true;
runData.ldown_for_dig = true;
}

if (!runData.dig_instantly) {
runData.dig_index = (float)crack_animation_length
* runData.dig_time

0 comments on commit 358074b

Please sign in to comment.
You can’t perform that action at this time.