/* * The ManaPlus Client * Copyright (C) 2009 The Mana World Development Team * Copyright (C) 2009-2010 Andrei Karas * Copyright (C) 2011-2020 The ManaPlus Developers * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "gui/widgets/tabs/setup_misc.h" #include "configuration.h" #include "const/resources/map/map.h" #include "gui/models/namesmodel.h" #include "gui/widgets/containerplacer.h" #include "gui/widgets/layouthelper.h" #include "gui/widgets/setupbuttonitem.h" #include "gui/widgets/scrollarea.h" #include "listeners/uploadlistener.h" #include "net/net.h" #include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" static const int shortcutsListSize = 3; static const char *const shortcutsList[] = { // TRANSLATORS: show buttons at top right corner type N_("Always show"), // TRANSLATORS: show buttons at top right corner type N_("Auto hide in small resolution"), // TRANSLATORS: show buttons at top right corner type N_("Always auto hide") }; static const int proxyTypeListSize = 8; static const char *const proxyTypeList[] = { // TRANSLATORS: Proxy type selection N_("System proxy"), // TRANSLATORS: Proxy type selection N_("Direct connection"), "HTTP", "HTTP 1.0", "SOCKS4", "SOCKS4A", "SOCKS5", // TRANSLATORS: Proxy type selection N_("SOCKS5 hostname") }; static const int densityListSize = 7; static const char *const densityList[] = { // TRANSLATORS: screen density type N_("default"), // TRANSLATORS: screen density type N_("low"), // TRANSLATORS: screen density type N_("medium"), // TRANSLATORS: screen density type N_("tv"), // TRANSLATORS: screen density type N_("high"), // TRANSLATORS: screen density type N_("xhigh"), // TRANSLATORS: screen density type N_("xxhigh") }; #ifdef USE_SDL2 static const int sdlLogListSize = 7; static const char *const sdlLogList[] = { // TRANSLATORS: sdl2 log level N_("default"), // TRANSLATORS: sdl2 log level N_("verbose"), // TRANSLATORS: sdl2 log level N_("debug"), // TRANSLATORS: sdl2 log level N_("info"), // TRANSLATORS: sdl2 log level N_("warn"), // TRANSLATORS: sdl2 log level N_("error"), // TRANSLATORS: sdl2 log level N_("critical") }; #endif // USE_SDL2 Setup_Misc::Setup_Misc(const Widget2 *const widget) : SetupTabScroll(widget), mProxyTypeList(new NamesModel), mShortcutsList(new NamesModel), #ifdef USE_SDL2 mSdlLogList(new NamesModel), #endif // USE_SDL2 mDensityList(new NamesModel) { // TRANSLATORS: misc tab in settings setName(_("Misc")); LayoutHelper h(this); ContainerPlacer place = h.getPlacer(0, 0); place(0, 0, mScroll, 10, 10); // TRANSLATORS: settings option new SetupItemLabel(_("Monsters"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show damage inflicted to monsters"), "", "showMonstersTakedDamage", this, "showMonstersTakedDamageEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Auto target only reachable monsters"), "", "targetOnlyReachable", this, "targetOnlyReachableEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Select auto target for attack skills"), "", "skillAutotarget", this, "skillAutotargetEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Highlight monster attack range"), "", "highlightMonsterAttackRange", this, "highlightMonsterAttackRangeEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show monster hp bar"), "", "showMobHP", this, "showMobHPEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Cycle monster targets"), "", "cycleMonsters", this, "cycleMonstersEvent", MainConfig_true); // TRANSLATORS: settings group new SetupItemLabel(_("Map"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show warps particles"), "", "warpParticle", this, "warpParticleEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Highlight map portals"), "", "highlightMapPortals", this, "highlightMapPortalsEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Highlight floor items"), "", "floorItemsHighlight", this, "floorItemsHighlightEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Highlight player attack range"), "", "highlightAttackRange", this, "highlightAttackRangeEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show extended minimaps"), "", "showExtMinimaps", this, "showExtMinimapsEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Draw path"), "", "drawPath", this, "drawPathEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Draw hotkeys on map"), "", "drawHotKeys", this, "drawHotKeysEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable lazy scrolling"), "", "enableLazyScrolling", this, "enableLazyScrollingEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemIntTextField(_("Scroll laziness"), "", "ScrollLaziness", this, "ScrollLazinessEvent", 1, 160, MainConfig_true); // TRANSLATORS: settings option new SetupItemIntTextField(_("Scroll radius"), "", "ScrollRadius", this, "ScrollRadiusEvent", 0, mapTileSize, MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Auto resize minimaps"), "", "autoresizeminimaps", this, "autoresizeminimapsEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Play map animations"), "", "playMapAnimations", this, "playMapAnimationsEvent", MainConfig_true); // TRANSLATORS: settings group new SetupItemLabel(_("Moving"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Auto fix position"), "", "autofixPos", this, "autofixPosEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show server side position"), "", "showserverpos", this, "showserverposEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Attack while moving"), "", "attackMoving", this, "attackMovingEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Attack next target"), "", "attackNext", this, "attackNextEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Sync player move"), "", "syncPlayerMove", this, "syncPlayerMoveEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemIntTextField(_("Sync player move distance"), "", "syncPlayerMoveDistance", this, "syncPlayerMoveDistanceEvent", 1, 30, MainConfig_true); // TRANSLATORS: settings option new SetupItemIntTextField(_("Sync player move distance on legacy servers"), "", "syncPlayerMoveDistanceLegacy", this, "syncPlayerMoveDistanceLegacyEvent", 1, 30, MainConfig_true); // TRANSLATORS: settings option new SetupItemIntTextField(_("Increase your effective Walk Delay"), // TRANSLATORS: settings description _("Walk slower than your maximum allowed speed.\n" "This can decrease desync when autonav is used over " "long distances, and makes it easier for others to " "autofollow you.\n" "0 is off, 15~20 is recommended for evol2 servers."), "playerSpeedAdjustment", this, "playerSpeedAdjustmentEvent", 0, 30, MainConfig_false); // TRANSLATORS: settings option new SetupItemTextField(_("Crazy move A program"), "", "crazyMoveProgram", this, "crazyMoveProgramEvent", MainConfig_true, UseBase64_false); // TRANSLATORS: settings option new SetupItemCheckBox(_("Mouse relative moves " "(good for touch interfaces)"), "", "mouseDirectionMove", this, "mouseDirectionMoveEvent", MainConfig_true); // TRANSLATORS: settings group new SetupItemLabel(_("Player"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show own hp bar"), "", "showOwnHP", this, "showOwnHPEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable quick stats"), "", "quickStats", this, "quickStatsEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Cycle player targets"), "", "cyclePlayers", this, "cyclePlayersEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show job exp messages"), "", "showJobExp", this, "showJobExpEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show players popups"), "", "showBeingPopup", this, "showBeingPopupEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemTextField(_("Afk message"), "", "afkMessage", this, "afkMessageEvent", MainConfig_false, UseBase64_false); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show job"), "", "showJob", this, "showJobEvent", MainConfig_false); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable attack filter"), "", "enableAttackFilter", this, "enableAttackFilterEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable pickup filter"), "", "enablePickupFilter", this, "enablePickupFilterEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable advert protocol"), "", "enableAdvert", this, "enableAdvertEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enabled pets support"), "", "usepets", this, "usepetsEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable weight notifications"), "", "weightMsg", this, "weightMsgEvent", MainConfig_true); // TRANSLATORS: settings group new SetupItemLabel(_("Shop"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Accept sell/buy requests"), "", "autoShop", this, "autoShopEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable shop mode"), "", "tradebot", this, "tradebotEvent", MainConfig_true); // TRANSLATORS: settings group new SetupItemLabel(_("NPC"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Cycle npc targets"), "", "cycleNPC", this, "cycleNPCEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Log NPC dialogue"), "", "logNpcInGui", this, "logNpcInGuiEvent", MainConfig_true); // TRANSLATORS: settings group new SetupItemLabel(_("Bots support"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable guild bot support and disable native " "guild support"), "", "enableGuildBot", this, "enableGuildBotEvent", "0", MainConfig_false); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable manamarket bot support"), "", "enableManaMarketBot", this, "enableManaMarketBotEvent", "0", MainConfig_false); // TRANSLATORS: settings group new SetupItemLabel(_("Keyboard"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemIntTextField(_("Repeat delay"), "", "repeateDelay", this, "repeateDelayEvent", 0, 10000, MainConfig_true); // TRANSLATORS: settings option new SetupItemIntTextField(_("Repeat interval"), "", "repeateInterval", this, "repeateIntervalEvent", 0, 10000, MainConfig_true); // TRANSLATORS: settings option new SetupItemIntTextField(_("Custom repeat interval"), "", "repeateInterval2", this, "repeateInterval2Event", 0, 10000, MainConfig_true); #ifdef USE_SDL2 // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable alt-tab workaround"), "", "blockAltTab", this, "blockAltTabEvent", MainConfig_true); #endif // USE_SDL2 // TRANSLATORS: settings group new SetupItemLabel(_("Windows"), "", this, Separator_true); mShortcutsList->fillFromArray(&shortcutsList[0], shortcutsListSize); // TRANSLATORS: settings option new SetupItemDropDown(_("Shortcut buttons"), "", "autohideButtons", this, "autohideButtonsEvent", mShortcutsList, 200, MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show icons on shortcut buttons"), "", "showButtonIcons", this, "showButtonIconsEvent", MainConfig_true); // TRANSLATORS: settings group new SetupItemLabel(_("Proxy server"), "", this, Separator_true); mProxyTypeList->fillFromArray(&proxyTypeList[0], proxyTypeListSize); // TRANSLATORS: settings option new SetupItemDropDown(_("Proxy type"), "", "downloadProxyType", this, "downloadProxyTypeEvent", mProxyTypeList, 200, MainConfig_true); // TRANSLATORS: settings option new SetupItemTextField(_("Proxy address:port"), "", "downloadProxy", this, "downloadProxyEvent", MainConfig_true, UseBase64_false); // TRANSLATORS: settings option new SetupItemCheckBox(_("Tunnel through HTTP proxy"), "", "downloadProxyTunnel", this, "downloadProxyTunnelEvent", MainConfig_true); // TRANSLATORS: settings group new SetupItemLabel(_("Logging"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable OpenGL version check " "(do not disable)"), "", "checkOpenGLVersion", this, "checkOpenGLVersionEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable debug log"), "", "debugLog", this, "debugLogEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemTextField(_("Ignore logging packets"), "", "ignorelogpackets", this, "ignorelogpacketsEvent", MainConfig_true, UseBase64_false); // TRANSLATORS: settings option new SetupItemCheckBox(_("Log unimplemented packets"), "", "unimplimentedLog", this, "unimplimentedLogEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable OpenGL log"), "", "debugOpenGL", this, "debugOpenGLEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable input log"), "", "logInput", this, "logInputEvent", MainConfig_true); #ifdef USE_SDL2 mSdlLogList->fillFromArray(&sdlLogList[0], sdlLogListSize); // TRANSLATORS: settings option new SetupItemDropDown(_("SDL logging level"), "", "sdlLogLevel", this, "sdlLogLevelEvent", mSdlLogList, 100, MainConfig_true); #endif // USE_SDL2 // TRANSLATORS: settings option new SetupButtonItem(_("Upload log file"), "", "upload", this, "uploadLog", &uploadListener); // TRANSLATORS: settings group new SetupItemLabel(_("Other"), "", this, Separator_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable server side attack"), "", "serverAttack", this, "serverAttackEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Hide support page link on error"), "", "hidesupport", this, "hidesupportEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable double clicks"), "", "doubleClick", this, "doubleClickEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable bot checker"), "", "enableBotCheker", this, "enableBotChekerEvent", MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable packet limiter " "(do not disable)"), "", "enableBuggyServers", this, "enableBuggyServersEvent", MainConfig_false); // TRANSLATORS: settings option new SetupItemCheckBox(_("Low traffic mode"), "", "lowTraffic", this, "lowTrafficEvent", MainConfig_true); #ifndef ANDROID // TRANSLATORS: settings option new SetupItemCheckBox(_("Use FBO for screenshots (only for opengl)"), "", "usefbo", this, "usefboEvent", MainConfig_true); #endif // ANDROID #ifndef WIN32 // TRANSLATORS: settings option new SetupItemTextField(_("Screenshot directory"), "", "screenshotDirectory3", this, "screenshotDirectory3Event", MainConfig_true, UseBase64_true); #endif // WIN32 // TRANSLATORS: settings option new SetupItemIntTextField(_("Network delay between sub servers"), "", "networksleep", this, "networksleepEvent", 0, 10000, MainConfig_true); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show background"), "", "showBackground", this, "showBackgroundEvent", MainConfig_true); mDensityList->fillFromArray(&densityList[0], densityListSize); // TRANSLATORS: settings option new SetupItemDropDown(_("Screen density override"), "", "screenDensity", this, "screenDensityEvent", mDensityList, 100, MainConfig_true); setDimension(Rect(0, 0, 550, 350)); } Setup_Misc::~Setup_Misc() { delete2(mProxyTypeList) delete2(mShortcutsList) delete2(mDensityList) #ifdef USE_SDL2 delete2(mSdlLogList) #endif // USE_SDL2 } void Setup_Misc::apply() { SetupTabScroll::apply(); logger->setDebugLog(config.getBoolValue("debugLog")); logger->setReportUnimplemented(config.getBoolValue("unimplimentedLog")); Net::loadIgnorePackets(); } void Setup_Misc::externalUpdated() { reread("showJob"); reread("enableGuildBot"); reread("enableManaMarketBot"); reread("enableBuggyServers"); reread("afkMessage"); }