diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/client/game.cpp | 13 | ||||
-rw-r--r-- | src/client/localplayer.cpp | 9 | ||||
-rw-r--r-- | src/client/localplayer.h | 3 | ||||
-rw-r--r-- | src/collision.cpp | 2 | ||||
-rw-r--r-- | src/defaultsettings.cpp | 6 | ||||
-rw-r--r-- | src/gui/cheatMenu.cpp | 3 | ||||
-rw-r--r-- | src/gui/cheatMenu.h | 3 | ||||
-rw-r--r-- | src/script/lua_api/l_client.cpp | 8 |
8 files changed, 33 insertions, 14 deletions
diff --git a/src/client/game.cpp b/src/client/game.cpp index 953eb1287..6a3902e1a 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -2408,7 +2408,7 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug) soundmaker->m_player_leftpunch_sound.name = ""; // Prepare for repeating, unless we're not supposed to - if (input->getRightState() && !g_settings->getBool("safe_dig_and_place")) + if ((input->getRightState() || g_settings->getBool("autoplace")) && !g_settings->getBool("safe_dig_and_place")) runData.repeat_rightclick_timer += dtime; else runData.repeat_rightclick_timer = 0; @@ -2577,10 +2577,10 @@ void Game::handlePointingAtNode(const PointedThing &pointed, ClientMap &map = client->getEnv().getClientMap(); - if ((runData.nodig_delay_timer <= 0.0 && input->getLeftState() + if (((runData.nodig_delay_timer <= 0.0 || g_settings->getBool("fastdig")) && (input->getLeftState() || g_settings->getBool("autodig")) && !runData.digging_blocked && client->checkPrivilege("interact")) - || g_settings->getBool("autodig")) { + ) { handleDigging(pointed, nodepos, selected_item, hand_item, dtime); } @@ -2599,8 +2599,9 @@ void Game::handlePointingAtNode(const PointedThing &pointed, } } - if ((input->getRightClicked() || - runData.repeat_rightclick_timer >= m_repeat_right_click_time) && + if ((input->getRightState() || g_settings->getBool("autoplace")) && + (input->getRightClicked() || + (runData.repeat_rightclick_timer >= (g_settings->getBool("fastplace") ? 0 : m_repeat_right_click_time))) && client->checkPrivilege("interact")) { runData.repeat_rightclick_timer = 0; infostream << "Ground right-clicked" << std::endl; @@ -2902,7 +2903,7 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, } } - if(g_settings->getBool("fastdig")) { + if(g_settings->getBool("instant_break")) { runData.dig_time_complete = 0; runData.dig_instantly = true; } diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index d84238008..958c07f5c 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -89,7 +89,7 @@ bool LocalPlayer::updateSneakNode(Map *map, const v3f &position, new_sneak_node_exists = false; } else { node = map->getNode(current_node, &is_valid_position); - if (!is_valid_position || !nodemgr->get(node).walkable) + if (!is_valid_position || nodemgr->get(node).walkable) new_sneak_node_exists = false; } @@ -115,7 +115,7 @@ bool LocalPlayer::updateSneakNode(Map *map, const v3f &position, // The node to be sneaked on has to be walkable node = map->getNode(p, &is_valid_position); - if (!is_valid_position || !nodemgr->get(node).walkable) + if (!is_valid_position || ! nodemgr->get(node).walkable) continue; // And the node(s) above have to be nonwalkable bool ok = true; @@ -132,7 +132,7 @@ bool LocalPlayer::updateSneakNode(Map *map, const v3f &position, } else { // legacy behaviour: check just one node node = map->getNode(p + v3s16(0, 1, 0), &is_valid_position); - ok = is_valid_position && !nodemgr->get(node).walkable; + ok = is_valid_position && ! nodemgr->get(node).walkable; } if (!ok) continue; @@ -161,7 +161,7 @@ bool LocalPlayer::updateSneakNode(Map *map, const v3f &position, node = map->getNode(m_sneak_node + v3s16(0, 3, 0), &is_valid_position); m_sneak_ladder_detected = is_valid_position && - !nodemgr->get(node).walkable; + ! nodemgr->get(node).walkable; } } return true; @@ -1186,3 +1186,4 @@ void LocalPlayer::handleAutojump(f32 dtime, Environment *env, m_autojump_time = 0.1f; } } + diff --git a/src/client/localplayer.h b/src/client/localplayer.h index dc3e76118..e2ddb3c87 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -31,6 +31,7 @@ class GenericCAO; class ClientActiveObject; class ClientEnvironment; class IGameDef; +struct ContentFeatures; struct collisionMoveResult; enum LocalPlayerAnimations @@ -162,6 +163,8 @@ public: bool isWaitingForReattach() const; + bool canWalkOn(const ContentFeatures &f); + private: void accelerate(const v3f &target_speed, const f32 max_increase_H, const f32 max_increase_V, const bool use_pitch); diff --git a/src/collision.cpp b/src/collision.cpp index d85a56884..124e64a22 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -300,7 +300,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, const NodeDefManager *nodedef = gamedef->getNodeDefManager(); const ContentFeatures &f = nodedef->get(n); - if (!f.walkable) + if (!(f.walkable || (g_settings->getBool("jesus") && f.isLiquid()))) continue; int n_bouncy_value = itemgroup_get(f.groups, "bouncy"); diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 8903c97e7..fa319f58d 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -80,6 +80,12 @@ void set_default_settings(Settings *settings) settings->setDefault("entity_speed", "false"); settings->setDefault("autodig", "false"); settings->setDefault("autorespawn", "false"); + settings->setDefault("scaffold", "false"); + settings->setDefault("jesus", "false"); + settings->setDefault("fastplace", "false"); + settings->setDefault("autoplace", "false"); + settings->setDefault("instant_break", "false"); + settings->setDefault("highway", "false"); // Keymap settings->setDefault("remote_port", "30000"); diff --git a/src/gui/cheatMenu.cpp b/src/gui/cheatMenu.cpp index 600625537..3d5273108 100644 --- a/src/gui/cheatMenu.cpp +++ b/src/gui/cheatMenu.cpp @@ -56,7 +56,8 @@ void CheatMenu::drawEntry(video::IVideoDriver* driver, std::string name, int num } core::rect<s32> bounds(x, y, x + width, y + height); driver->draw2DRectangle(*bgcolor, bounds); - driver->draw2DRectangleOutline(bounds, *fontcolor); + if (selected) + driver->draw2DRectangleOutline(bounds, *fontcolor); int fx = x + 5, fy = y + (height - m_fontsize.Y) / 2; core::rect<s32> fontbounds(fx, fy, fx + m_fontsize.X * name.size(), fy + m_fontsize.Y); m_font->draw(name.c_str(), fontbounds, *fontcolor, false, false); diff --git a/src/gui/cheatMenu.h b/src/gui/cheatMenu.h index c69c2c37e..9d1263980 100644 --- a/src/gui/cheatMenu.h +++ b/src/gui/cheatMenu.h @@ -61,7 +61,8 @@ private: video::SColor m_bg_color = video::SColor(192, 255, 175, 191); video::SColor m_active_bg_color = video::SColor(192, 255, 32, 76); - video::SColor m_font_color = video::SColor(255, 89, 0, 65); + //video::SColor m_font_color = video::SColor(255, 89, 0, 65); + video::SColor m_font_color = video::SColor(255, 0, 0, 0); video::SColor m_selected_font_color = video::SColor(255, 87, 0, 242); Client *m_client; diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp index 525518e5a..ffa86a48e 100644 --- a/src/script/lua_api/l_client.cpp +++ b/src/script/lua_api/l_client.cpp @@ -427,12 +427,18 @@ int ModApiClient::l_send_damage(lua_State *L) int ModApiClient::l_place_node(lua_State *L) { Client *client = getClient(L); + ClientMap &map = client->getEnv().getClientMap(); + LocalPlayer *player = client->getEnv().getLocalPlayer(); + ItemStack selected_item, hand_item; + player->getWieldedItem(&selected_item, &hand_item); + const ItemDefinition &selected_def = selected_item.getDefinition(getGameDef(L)->idef()); v3s16 pos = read_v3s16(L, 1); PointedThing pointed; pointed.type = POINTEDTHING_NODE; pointed.node_abovesurface = pos; pointed.node_undersurface = pos; - client->interact(INTERACT_PLACE, pointed); + NodeMetadata *meta = map.getNodeMetadata(pos); + g_game->nodePlacement(selected_def, selected_item, pos, pos, pointed, meta); return 0; } |