From d36cb0eb4b7bba79b2b654c0e5f91f16726bdc68 Mon Sep 17 00:00:00 2001 From: jak1 Date: Fri, 16 Feb 2024 14:50:14 -0300 Subject: Rename the program from ManaPlus to ManaVerse. --- .gitignore | 16 +- .gitlab-ci.yml | 58 +- .travis.yml | 28 +- Android.mk | 8 +- CMakeLists.txt | 16 +- Makefile.am | 8 +- build/makegprof | 4 +- build/update-creator.sh | 4 +- configure.ac | 22 +- data/graphics/sprites/CMakeLists.txt | 6 +- data/graphics/sprites/Makefile.am | 6 +- data/graphics/sprites/manaplus_emote.xml | 12 - data/graphics/sprites/manaplus_emotes.xml | 36 - data/graphics/sprites/manaplus_emotions.png | Bin 38357 -> 0 bytes data/graphics/sprites/manaverse_emote.xml | 12 + data/graphics/sprites/manaverse_emotes.xml | 36 + data/graphics/sprites/manaverse_emotions.png | Bin 0 -> 38357 bytes data/graphics/sprites/test.xml | 2 +- data/icons/CMakeLists.txt | 4 +- data/icons/Makefile.am | 16 +- data/icons/manaplus.hqx | 603 -- data/icons/manaplus.icns | Bin 27744 -> 0 bytes data/icons/manaplus.ico | Bin 533366 -> 0 bytes data/icons/manaplus.png | Bin 4544 -> 0 bytes data/icons/manaplus.svg | 89 - data/icons/manaplus.xpm | 38 - data/icons/manaverse.hqx | 603 ++ data/icons/manaverse.icns | Bin 0 -> 27744 bytes data/icons/manaverse.ico | Bin 0 -> 533366 bytes data/icons/manaverse.png | Bin 0 -> 4544 bytes data/icons/manaverse.svg | 89 + data/icons/manaverse.xpm | 38 + data/tmw/Makefile.am | 4 +- data/tmw/tmw.desktop.in | 2 +- data/tmw/tmw.in | 2 +- data/tmw/tmw.mana | 18 + data/tmw/tmw.manaplus | 18 - docs/Makefile.am | 4 +- docs/example.mana | 24 + docs/example.manaplus | 24 - docs/manaplus.6 | 107 - docs/manaverse.6 | 107 + manaplus.desktop | 25 - manaplus.menu | 4 - manaplus.metainfo.xml | 32 - manaplus.spec.in | 105 - manaverse.desktop | 25 + manaverse.menu | 4 + manaverse.metainfo.xml | 30 + manaverse.spec.in | 101 + nightly/buildlinux.sh | 6 +- nightly/run tests.sh | 2 +- nightly/runme.sh | 2 +- packaging/debian/control | 16 +- packaging/debian/copyright | 4 +- packaging/debian/manaplus-data.install | 16 +- packaging/debian/manaplus-data.links | 22 +- packaging/debian/manaplus.install | 8 +- packaging/debian/manaplus.lintian-overrides | 6 +- packaging/debian/manaplus.manpages | 2 +- packaging/debian/manaplus.menu | 10 +- packaging/debian/rules | 6 +- packaging/debian/source.lintian-overrides | 4 +- packaging/nacl/ports/manaplus/build.sh | 6 +- packaging/nacl/ports/manaplus/pkg_info | 4 +- packaging/openSUSE Build Service/manaplus.spec | 14 +- packaging/switch/CMakeLists.txt.switch | 12 +- packaging/windows/make-translations.sh | 2 +- packaging/windows/setup.nsi | 87 +- po/CMakeLists.txt | 10 +- po/Makevars | 4 +- po/POTFILES.in | 14 +- po/manaplus.pot | 11437 --------------------- po/manaverse.pot | 11437 +++++++++++++++++++++ run.sh | 2 +- src/CMakeLists.txt | 44 +- src/Makefile.am | 100 +- src/client.h | 7 +- src/commandline.cpp | 7 +- src/defaults.cpp | 4 +- src/dirs.cpp | 35 +- src/fs/files.cpp | 5 +- src/fs/paths.cpp | 7 +- src/game.cpp | 7 +- src/gui/viewport.h | 7 +- src/gui/windowmanager.cpp | 5 +- src/gui/windows/updaterwindow.cpp | 2 +- src/gui/windows/updaterwindow.h | 3 +- src/logger.cpp | 11 +- src/main.h | 9 +- src/manaplus.rc | 25 - src/manaverse.rc | 24 + src/progs/dyecmd/client.cpp | 5 +- src/progs/manaplus/actions/actions.cpp | 2047 ---- src/progs/manaplus/actions/chat.cpp | 839 -- src/progs/manaplus/actions/commands.cpp | 2224 ---- src/progs/manaplus/actions/move.cpp | 280 - src/progs/manaplus/actions/pets.cpp | 249 - src/progs/manaplus/actions/statusbar.cpp | 204 - src/progs/manaplus/actions/tabs.cpp | 106 - src/progs/manaplus/actions/target.cpp | 90 - src/progs/manaplus/actions/windows.cpp | 392 - src/progs/manaplus/client.cpp | 2089 ---- src/progs/manaplus/client.h | 171 - src/progs/manaplus/gui/viewport.cpp | 1152 --- src/progs/manaplus/gui/viewport.h | 249 - src/progs/manaverse/actions/actions.cpp | 2048 ++++ src/progs/manaverse/actions/chat.cpp | 840 ++ src/progs/manaverse/actions/commands.cpp | 2225 ++++ src/progs/manaverse/actions/move.cpp | 281 + src/progs/manaverse/actions/pets.cpp | 250 + src/progs/manaverse/actions/statusbar.cpp | 205 + src/progs/manaverse/actions/tabs.cpp | 107 + src/progs/manaverse/actions/target.cpp | 91 + src/progs/manaverse/actions/windows.cpp | 393 + src/progs/manaverse/client.cpp | 2090 ++++ src/progs/manaverse/client.h | 172 + src/progs/manaverse/gui/viewport.cpp | 1153 +++ src/progs/manaverse/gui/viewport.h | 250 + src/render/mobileopengl2graphics.cpp | 5 +- src/render/modernopenglgraphics.cpp | 5 +- src/resources/db/emotedb.cpp | 9 +- src/test/testlauncher.cpp | 7 +- src/test/testmain.cpp | 3 +- src/unittests/utils/xmlutils.cc | 5 +- src/utils/gettexthelper.cpp | 11 +- src/utils/translation/translationmanager.cpp | 5 +- tools/ci/branches/.gitlab-ci_header.yml | 2 +- tools/ci/branches/ci_checks/.gitlab-ci.yml | 4 +- tools/ci/branches/ci_clang4_5/.gitlab-ci.yml | 4 +- tools/ci/branches/ci_clang6/.gitlab-ci.yml | 8 +- tools/ci/branches/ci_clang7/.gitlab-ci.yml | 8 +- tools/ci/branches/ci_fedora/.gitlab-ci.yml | 12 +- tools/ci/branches/ci_gcc-snapshot/.gitlab-ci.yml | 4 +- tools/ci/branches/ci_gcc10/.gitlab-ci.yml | 4 +- tools/ci/branches/ci_gcc10_tests/.gitlab-ci.yml | 52 +- tools/ci/branches/ci_gcc3/.gitlab-ci.yml | 8 +- tools/ci/branches/ci_gcc49/.gitlab-ci.yml | 8 +- tools/ci/branches/ci_gcc4x/.gitlab-ci.yml | 8 +- tools/ci/branches/ci_gcc5/.gitlab-ci.yml | 22 +- tools/ci/branches/ci_gcc6/.gitlab-ci.yml | 4 +- tools/ci/branches/ci_gcc6_tests/.gitlab-ci.yml | 32 +- tools/ci/branches/ci_gcc7/.gitlab-ci.yml | 4 +- tools/ci/branches/ci_gcc7_tests/.gitlab-ci.yml | 46 +- tools/ci/branches/ci_gcc8/.gitlab-ci.yml | 4 +- tools/ci/branches/ci_gcc8_tests/.gitlab-ci.yml | 52 +- tools/ci/branches/ci_gcc9/.gitlab-ci.yml | 4 +- tools/ci/branches/ci_gcc9_tests/.gitlab-ci.yml | 52 +- tools/ci/branches/ci_glibcdebug/.gitlab-ci.yml | 10 +- tools/ci/branches/ci_main1/.gitlab-ci.yml | 8 +- tools/ci/branches/ci_malloc/.gitlab-ci.yml | 16 +- tools/ci/branches/ci_mse/.gitlab-ci.yml | 6 +- tools/ci/branches/ci_mxe/.gitlab-ci.yml | 12 +- tools/ci/branches/ci_site/.gitlab-ci.yml | 30 +- tools/ci/branches/ci_xmllibs/.gitlab-ci.yml | 8 +- tools/ci/branches/master/.gitlab-ci.yml | 30 +- tools/ci/jobs/gitstatsh.sh | 2 +- tools/ci/jobs/xcode.sh | 2 +- tools/ci/scripts/azure/mxetest.sh | 2 +- tools/ci/scripts/circleci/gcc6_sanitize_tests.sh | 4 +- tools/ci/scripts/circleci/gcc6_tests.sh | 8 +- tools/ci/scripts/circleci/gcc7_sanitize_tests.sh | 4 +- tools/ci/scripts/circleci/gcc7_tests.sh | 8 +- tools/ci/scripts/clonesrc.sh | 6 +- tools/ci/scripts/init.sh | 2 +- tools/ci/scripts/rundyecmd.sh | 4 +- tools/ci/scripts/runtest.sh | 30 +- tools/ci/scripts/runtests.sh | 16 +- tools/doxygen/doxygen.conf | 4 +- 169 files changed, 23310 insertions(+), 23321 deletions(-) delete mode 100644 data/graphics/sprites/manaplus_emote.xml delete mode 100644 data/graphics/sprites/manaplus_emotes.xml delete mode 100644 data/graphics/sprites/manaplus_emotions.png create mode 100644 data/graphics/sprites/manaverse_emote.xml create mode 100644 data/graphics/sprites/manaverse_emotes.xml create mode 100644 data/graphics/sprites/manaverse_emotions.png delete mode 100644 data/icons/manaplus.hqx delete mode 100644 data/icons/manaplus.icns delete mode 100644 data/icons/manaplus.ico delete mode 100644 data/icons/manaplus.png delete mode 100644 data/icons/manaplus.svg delete mode 100644 data/icons/manaplus.xpm create mode 100644 data/icons/manaverse.hqx create mode 100644 data/icons/manaverse.icns create mode 100644 data/icons/manaverse.ico create mode 100644 data/icons/manaverse.png create mode 100644 data/icons/manaverse.svg create mode 100644 data/icons/manaverse.xpm create mode 100644 data/tmw/tmw.mana delete mode 100644 data/tmw/tmw.manaplus create mode 100644 docs/example.mana delete mode 100644 docs/example.manaplus delete mode 100644 docs/manaplus.6 create mode 100644 docs/manaverse.6 delete mode 100644 manaplus.desktop delete mode 100644 manaplus.menu delete mode 100644 manaplus.metainfo.xml delete mode 100644 manaplus.spec.in create mode 100644 manaverse.desktop create mode 100644 manaverse.menu create mode 100644 manaverse.metainfo.xml create mode 100644 manaverse.spec.in delete mode 100644 po/manaplus.pot create mode 100644 po/manaverse.pot delete mode 100644 src/manaplus.rc create mode 100644 src/manaverse.rc delete mode 100644 src/progs/manaplus/actions/actions.cpp delete mode 100644 src/progs/manaplus/actions/chat.cpp delete mode 100644 src/progs/manaplus/actions/commands.cpp delete mode 100644 src/progs/manaplus/actions/move.cpp delete mode 100644 src/progs/manaplus/actions/pets.cpp delete mode 100644 src/progs/manaplus/actions/statusbar.cpp delete mode 100644 src/progs/manaplus/actions/tabs.cpp delete mode 100644 src/progs/manaplus/actions/target.cpp delete mode 100644 src/progs/manaplus/actions/windows.cpp delete mode 100644 src/progs/manaplus/client.cpp delete mode 100644 src/progs/manaplus/client.h delete mode 100644 src/progs/manaplus/gui/viewport.cpp delete mode 100644 src/progs/manaplus/gui/viewport.h create mode 100644 src/progs/manaverse/actions/actions.cpp create mode 100644 src/progs/manaverse/actions/chat.cpp create mode 100644 src/progs/manaverse/actions/commands.cpp create mode 100644 src/progs/manaverse/actions/move.cpp create mode 100644 src/progs/manaverse/actions/pets.cpp create mode 100644 src/progs/manaverse/actions/statusbar.cpp create mode 100644 src/progs/manaverse/actions/tabs.cpp create mode 100644 src/progs/manaverse/actions/target.cpp create mode 100644 src/progs/manaverse/actions/windows.cpp create mode 100644 src/progs/manaverse/client.cpp create mode 100644 src/progs/manaverse/client.h create mode 100644 src/progs/manaverse/gui/viewport.cpp create mode 100644 src/progs/manaverse/gui/viewport.h diff --git a/.gitignore b/.gitignore index 475678e7a..8d6650329 100644 --- a/.gitignore +++ b/.gitignore @@ -57,7 +57,7 @@ install_manifest.txt *.gcno .dirstamp po/stamp-po -src/manaplus +src/manaverse src/manaplustests src/manaplustests.log src/manaplustests.trs @@ -128,9 +128,9 @@ GSYMS GTAGS # tarballs generated by make dist -manaplus-*.tar.gz -manaplus-*.tar.bz2 -manaplus-*.tar.xz +manaverse-*.tar.gz +manaverse-*.tar.bz2 +manaverse-*.tar.xz # generated for nsis build translations/* @@ -155,8 +155,8 @@ gmon.out .DS_Store /Xcode -/manaplus.depend -/manaplus.layout +/manaverse.depend +/manaverse.layout #english po /po/en.po @@ -169,8 +169,8 @@ cmake-build-* .vscode # Nintendo Switch port -src/manaplus.nacp -src/manaplus.nro +src/manaverse.nacp +src/manaverse.nro src/resources/image/image.h.gch # linters diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7837a7650..5485c1ac6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -227,36 +227,6 @@ gcc-10_default: tags: - docker -mxe_gcc6_shared_32: - only: - - branches@manaplus/manaplus - stage: prebuild - script: - - ls /mxe - - ./tools/ci/jobs/mxe_gcc6.sh - <<: *job-push - image: registry.gitlab.com/manaplus/mxe:gcc6_shared_32 - variables: - PACKAGES: bash - CROSS: i686-w64-mingw32.shared - tags: - - docker - -mxe_gcc6_shared_64: - only: - - branches@manaplus/manaplus - stage: prebuild - script: - - ls /mxe - - ./tools/ci/jobs/mxe_gcc6.sh - <<: *job-push - image: registry.gitlab.com/manaplus/mxe:gcc6_shared_64 - variables: - PACKAGES: bash - CROSS: x86_64-w64-mingw32.shared - tags: - - docker - gcc-5_sdl2: stage: prebuild script: @@ -296,7 +266,7 @@ gcc-10_dyecmd_only: stage: prebuild script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10.sh --without-manaplusgame + - ./tools/ci/jobs/gcc10.sh --without-manaversegame - ./tools/ci/scripts/rundyecmd.sh <<: *job-push variables: @@ -311,7 +281,7 @@ gcc-8_unittestsbin: stage: prebuild script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin --without-manaversegame --without-dyecmd image: debian:buster <<: *job-push variables: @@ -393,7 +363,7 @@ gcc-5_h_all: script: - mkdir -p coverage/ - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests_gcov.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests_gcov.sh --without-dyecmd --without-manaversegame variables: PACKAGES: gcc-7 g++-7 make autoconf automake autopoint gettext @@ -466,7 +436,7 @@ triggers: - echo /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvz} - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.4 - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaversegame --without-dyecmd - export LD_PRELOAD - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" @@ -492,7 +462,7 @@ triggers: script: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.4 - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaversegame --without-dyecmd - export LD_PRELOAD - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" @@ -519,7 +489,7 @@ triggers: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - echo /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvz} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaversegame --without-dyecmd - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -541,7 +511,7 @@ triggers: stage: build script: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaversegame --without-dyecmd - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -566,7 +536,7 @@ triggers: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - echo /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvz} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaversegame --without-dyecmd - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -590,7 +560,7 @@ triggers: stage: build script: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaversegame --without-dyecmd - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -616,7 +586,7 @@ triggers: - ./tools/ci/scripts/patchsdl1.sh - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ./tools/ci/jobs/gcc10.sh - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ./tools/ci/scripts/checkldd.sh src/manaplus + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ./tools/ci/scripts/checkldd.sh src/manaverse - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ./tools/ci/scripts/runtests.sh <<: *job-push variables: @@ -639,7 +609,7 @@ triggers: - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize.sh - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/runtests.sh - - ldd ./src/manaplus | grep "libasan" + - ldd ./src/manaverse | grep "libasan" <<: *job-push variables: LIBNAME: SDL @@ -661,7 +631,7 @@ triggers: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize.sh --with-sdl2 - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/runtests.sh - - ldd ./src/manaplus | grep "libasan" + - ldd ./src/manaverse | grep "libasan" <<: *job-push variables: LIBNAME: SDL @@ -686,7 +656,7 @@ triggers: - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize.sh - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/runtests.sh - - ldd ./src/manaplus | grep "libasan" + - ldd ./src/manaverse | grep "libasan" <<: *job-push variables: LIBNAME: SDL @@ -710,7 +680,7 @@ triggers: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize.sh --with-sdl2 - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/runtests.sh - - ldd ./src/manaplus | grep "libasan" + - ldd ./src/manaverse | grep "libasan" <<: *job-push variables: LIBNAME: SDL diff --git a/.travis.yml b/.travis.yml index 2caece97a..87b87c0db 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,22 +41,22 @@ env: PACKAGES="gcc-10 g++-10 ${LIBS_PACKAGES} ${SDL1}" - IMAGE=ubuntu:xenial - COMMAND="./tools/ci/jobs/gcc5_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame" + COMMAND="./tools/ci/jobs/gcc5_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame" PACKAGES="gcc-5 g++-5 ${LIBS_PACKAGES} ${SDL1} valgrind" - IMAGE=debian:stretch - COMMAND="./tools/ci/jobs/gcc6_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame" + COMMAND="./tools/ci/jobs/gcc6_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame" PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL1} valgrind" - IMAGE=debian:unstable - COMMAND="./tools/ci/jobs/gcc10_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame" + COMMAND="./tools/ci/jobs/gcc10_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame" PACKAGES="gcc-10 g++-10 ${LIBS_PACKAGES} ${SDL1} valgrind" - IMAGE=ubuntu:xenial - COMMAND="./tools/ci/jobs/gcc5_sanitize_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame" + COMMAND="./tools/ci/jobs/gcc5_sanitize_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame" PACKAGES="gcc-5 g++-5 ${LIBS_PACKAGES} ${SDL1} valgrind" @@ -75,17 +75,17 @@ env: PACKAGES="gcc-10 g++-10 ${LIBS_PACKAGES} ${SDL1}" - IMAGE=i386/ubuntu:xenial - COMMAND="./tools/ci/jobs/gcc5_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame" + COMMAND="./tools/ci/jobs/gcc5_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame" PACKAGES="gcc-5 g++-5 ${LIBS_PACKAGES} ${SDL1} valgrind" - IMAGE=i386/debian:stretch - COMMAND="./tools/ci/jobs/gcc6_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame" + COMMAND="./tools/ci/jobs/gcc6_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame" PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL1} valgrind" - IMAGE=i386/debian:unstable - COMMAND="./tools/ci/jobs/gcc10_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame" + COMMAND="./tools/ci/jobs/gcc10_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame" PACKAGES="gcc-10 g++-10 ${LIBS_PACKAGES} ${SDL1} valgrind" @@ -104,22 +104,22 @@ env: PACKAGES="gcc-10 g++-10 ${LIBS_PACKAGES} ${SDL2}" - IMAGE=ubuntu:xenial - COMMAND="./tools/ci/jobs/gcc5_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame --with-sdl2" + COMMAND="./tools/ci/jobs/gcc5_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame --with-sdl2" PACKAGES="gcc-5 g++-5 ${LIBS_PACKAGES} ${SDL2} valgrind" - IMAGE=debian:stretch - COMMAND="./tools/ci/jobs/gcc6_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame --with-sdl2" + COMMAND="./tools/ci/jobs/gcc6_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame --with-sdl2" PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL2} valgrind" - IMAGE=debian:unstable - COMMAND="./tools/ci/jobs/gcc10_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame --with-sdl2" + COMMAND="./tools/ci/jobs/gcc10_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame --with-sdl2" PACKAGES="gcc-10 g++-10 ${LIBS_PACKAGES} ${SDL2} valgrind" - IMAGE=ubuntu:xenial - COMMAND="./tools/ci/jobs/gcc5_sanitize_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame --with-sdl2" + COMMAND="./tools/ci/jobs/gcc5_sanitize_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame --with-sdl2" PACKAGES="gcc-5 g++-5 ${LIBS_PACKAGES} ${SDL2} valgrind" @@ -138,17 +138,17 @@ env: PACKAGES="gcc-10 g++-10 ${LIBS_PACKAGES} ${SDL2}" - IMAGE=i386/ubuntu:xenial - COMMAND="./tools/ci/jobs/gcc5_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame --with-sdl2" + COMMAND="./tools/ci/jobs/gcc5_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame --with-sdl2" PACKAGES="gcc-5 g++-5 ${LIBS_PACKAGES} ${SDL2} valgrind" - IMAGE=i386/debian:stretch - COMMAND="./tools/ci/jobs/gcc6_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame --with-sdl2" + COMMAND="./tools/ci/jobs/gcc6_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame --with-sdl2" PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL2} valgrind" - IMAGE=i386/debian:unstable - COMMAND="./tools/ci/jobs/gcc10_tests.sh --disable-tmwa --without-dyecmd --without-manaplusgame --with-sdl2" + COMMAND="./tools/ci/jobs/gcc10_tests.sh --disable-tmwa --without-dyecmd --without-manaversegame --with-sdl2" PACKAGES="gcc-10 g++-10 ${LIBS_PACKAGES} ${SDL2} valgrind" diff --git a/Android.mk b/Android.mk index c069363f6..e687621fa 100644 --- a/Android.mk +++ b/Android.mk @@ -2,7 +2,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_MODULE := manaplus +LOCAL_MODULE := manaverse ROOT_PATH := $(LOCAL_PATH)/.. SDL_PATH := ../SDL @@ -48,9 +48,9 @@ LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \ $(wildcard $(LOCAL_PATH)/src/const/gui/*.cpp) \ $(wildcard $(LOCAL_PATH)/src/const/net/*.cpp) \ $(wildcard $(LOCAL_PATH)/src/progs/*.cpp) \ - $(wildcard $(LOCAL_PATH)/src/progs/manaplus/*.cpp) \ - $(wildcard $(LOCAL_PATH)/src/progs/manaplus/gui/*.cpp) \ - $(wildcard $(LOCAL_PATH)/src/progs/manaplus/actions/*.cpp) \ + $(wildcard $(LOCAL_PATH)/src/progs/manaverse/*.cpp) \ + $(wildcard $(LOCAL_PATH)/src/progs/manaverse/gui/*.cpp) \ + $(wildcard $(LOCAL_PATH)/src/progs/manaverse/actions/*.cpp) \ $(wildcard $(LOCAL_PATH)/src/resources/*.cpp) \ $(wildcard $(LOCAL_PATH)/src/resources/image/*.cpp) \ $(wildcard $(LOCAL_PATH)/src/resources/animation/*.cpp) \ diff --git a/CMakeLists.txt b/CMakeLists.txt index c5dd2987d..616c38d4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) CMAKE_POLICY(VERSION 2.8.12) -PROJECT(MANAPLUS) +PROJECT(MANAVERSE) IF (NOT VERSION) SET(VERSION 1.0.0) @@ -42,7 +42,7 @@ ELSE (WIN32) IF (NOT OSX AND NOT BEOS) OPTION(USE_X11 "Use X11 Clipboard functionality" ON) ENDIF () - SET(PKG_DATADIR ${CMAKE_INSTALL_PREFIX}/share/manaplus) + SET(PKG_DATADIR ${CMAKE_INSTALL_PREFIX}/share/manaverse) SET(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale) SET(PKG_BINDIR ${CMAKE_INSTALL_PREFIX}/bin) ENDIF (WIN32) @@ -55,24 +55,24 @@ IF (GETTEXT_FOUND AND ENABLE_NLS) ENDIF() If(UNIX) - INSTALL(FILES manaplus.desktop DESTINATION share/applications) + INSTALL(FILES manaverse.desktop DESTINATION share/applications) INSTALL(FILES manaplustest.desktop DESTINATION share/applications) - INSTALL(FILES manaplus.appdata.xml DESTINATION share/appdata) + INSTALL(FILES manaverse.appdata.xml DESTINATION share/appdata) ENDIF() -SET(CPACK_PACKAGE_NAME "manaplus") +SET(CPACK_PACKAGE_NAME "manaverse") SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "ManaVerse") SET(CPACK_PACKAGE_VENDOR "ManaVerse Development Team") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") -SET(CPACK_PACKAGE_INSTALL_DIRECTORY "ManaPlus") +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "ManaVerse") SET(CPACK_PACKAGE_VERSION_MAJOR ${VER_MAJOR}) SET(CPACK_PACKAGE_VERSION_MINOR ${VER_MINOR}) SET(CPACK_PACKAGE_VERSION_PATCH ${VER_RELEASE}) IF(WIN32) - SET(CPACK_NSIS_DISPLAY_NAME "ManaPlus") - SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/data/icons/manaplus.ico") + SET(CPACK_NSIS_DISPLAY_NAME "ManaVerse") + SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/data/icons/manaverse.ico") SET(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/packaging/windows/setup_welcome.bmp") SET(CPACK_NSIS_URL_INFO_ABOUT "https://manaverse.germantmw.de") ENDIF() diff --git a/Makefile.am b/Makefile.am index 70c6981be..edc2ef1f1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,12 +3,12 @@ SUBDIRS = data docs po src desktopdir = $(datarootdir)/applications -desktop_DATA = manaplus.desktop \ +desktop_DATA = manaverse.desktop \ manaplustest.desktop appdatadir = $(datarootdir)/metainfo -appdata_DATA = manaplus.metainfo.xml +appdata_DATA = manaverse.metainfo.xml # Extra files to include EXTRA_DIST = $(desktop_DATA) \ @@ -19,8 +19,8 @@ EXTRA_DIST = $(desktop_DATA) \ CMake/Modules/FindLibIntl.cmake \ CMake/Modules/FindSDL_gfx.cmake \ Android.mk \ - manaplus.menu \ - manaplus.spec \ + manaverse.menu \ + manaverse.spec \ AUTHORS \ ChangeLog \ INSTALL \ diff --git a/build/makegprof b/build/makegprof index 967238b8e..b04a33a46 100755 --- a/build/makegprof +++ b/build/makegprof @@ -1,7 +1,7 @@ #!/bin/sh mv ../run/gmon.out . -gprof ../run/bin/manaplus >gprof.txt -gprof --inline-file-names ../run/bin/manaplus >gprofi.txt +gprof ../run/bin/manaverse >gprof.txt +gprof --inline-file-names ../run/bin/manaverse >gprofi.txt gprof2dot.py gprof.dot dot -Tpng -o gprof.png manaplus.files + -o -name \*.mana \ + | sort > manaverse.files diff --git a/configure.ac b/configure.ac index f4e2e1599..25e57e123 100755 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ(2.60) -AC_INIT([ManaPlus], [1.0], [akaras@inbox.ru], [manaplus]) +AC_INIT([ManaVerse], [1.0], [jak1@themanaworld.org], [manaverse]) AM_INIT_AUTOMAKE([1.9]) AC_LANG_CPLUSPLUS @@ -188,14 +188,14 @@ fi AM_CONDITIONAL(ENABLE_DYECMD, test x$with_dyecmd = xyes) -# Option to enable ManaPlus game -AC_ARG_WITH(manaplusgame,[ --without-manaplusgame don't build ManaPlus game ] ) -if test "x$with_manaplusgame" == "xno"; then - with_manaplusgame=no +# Option to enable ManaVerse game +AC_ARG_WITH(manaversegame,[ --without-manaversegame don't build ManaVerse game client ] ) +if test "x$with_manaversegame" == "xno"; then + with_manaversegame=no else - with_manaplusgame=yes + with_manaversegame=yes fi -AM_CONDITIONAL(ENABLE_MANAPLUSGAME, test x$with_manaplusgame = xyes) +AM_CONDITIONAL(ENABLE_MANAVERSEGAME, test x$with_manaversegame = xyes) # Enable nacl build AC_ARG_ENABLE(naclbuild, @@ -379,7 +379,7 @@ if test "x$with_internalsdlgfx" == "xno"; then AC_CHECK_HEADERS(SDL2_rotozoom.h, ,) else with_internalsdlgfx=yes - AC_DEFINE(USE_INTERNALSDLGFX, 1, [Defines if ManaPlus should use internal sdlgfx2]) + AC_DEFINE(USE_INTERNALSDLGFX, 1, [Defines if ManaVerse should use internal sdlgfx2]) fi AM_CONDITIONAL(USE_INTERNALSDLGFX, test x$with_internalsdlgfx = xyes) @@ -888,7 +888,7 @@ AC_CHECK_HEADERS([execinfo.h], AM_CONDITIONAL(HAVE_EXECINFO, test x$have_execinfo = xyes) AC_CONFIG_FILES([ -manaplus.spec +manaverse.spec Makefile PKGBUILD src/Makefile @@ -940,8 +940,8 @@ AC_CONFIG_FILES([data/tmw/tmw], [chmod +x data/tmw/tmw]) AC_OUTPUT echo -if test "$with_manaplusgame" == "yes"; then - echo "Enabled building manaplus game." +if test "$with_manaversegame" == "yes"; then + echo "Enabled building manaverse game client." fi if test "$with_dyecmd" == "yes"; then echo "Enabled building dyecmd tool." diff --git a/data/graphics/sprites/CMakeLists.txt b/data/graphics/sprites/CMakeLists.txt index bc5d7d70c..4fb08d5cb 100644 --- a/data/graphics/sprites/CMakeLists.txt +++ b/data/graphics/sprites/CMakeLists.txt @@ -6,9 +6,9 @@ SET(FILES chatemotes.png error.png error.xml - manaplus_emotions.png - manaplus_emote.xml - manaplus_emotes.xml + manaverse_emotions.png + manaverse_emote.xml + manaverse_emotes.xml test.xml ) diff --git a/data/graphics/sprites/Makefile.am b/data/graphics/sprites/Makefile.am index 8001e7016..3c3ad7887 100644 --- a/data/graphics/sprites/Makefile.am +++ b/data/graphics/sprites/Makefile.am @@ -8,9 +8,9 @@ sprites_DATA = \ chatemotes.png \ error.png \ error.xml \ - manaplus_emotions.png\ - manaplus_emote.xml \ - manaplus_emotes.xml \ + manaverse_emotions.png\ + manaverse_emote.xml \ + manaverse_emotes.xml \ test.xml EXTRA_DIST = \ diff --git a/data/graphics/sprites/manaplus_emote.xml b/data/graphics/sprites/manaplus_emote.xml deleted file mode 100644 index 7c5c48046..000000000 --- a/data/graphics/sprites/manaplus_emote.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - diff --git a/data/graphics/sprites/manaplus_emotes.xml b/data/graphics/sprites/manaplus_emotes.xml deleted file mode 100644 index 8daf57630..000000000 --- a/data/graphics/sprites/manaplus_emotes.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - manaplus_emote.xml - diff --git a/data/graphics/sprites/manaplus_emotions.png b/data/graphics/sprites/manaplus_emotions.png deleted file mode 100644 index c93262ba4..000000000 Binary files a/data/graphics/sprites/manaplus_emotions.png and /dev/null differ diff --git a/data/graphics/sprites/manaverse_emote.xml b/data/graphics/sprites/manaverse_emote.xml new file mode 100644 index 000000000..857436201 --- /dev/null +++ b/data/graphics/sprites/manaverse_emote.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/data/graphics/sprites/manaverse_emotes.xml b/data/graphics/sprites/manaverse_emotes.xml new file mode 100644 index 000000000..e951379d5 --- /dev/null +++ b/data/graphics/sprites/manaverse_emotes.xml @@ -0,0 +1,36 @@ + + + + + + + + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + manaverse_emote.xml + diff --git a/data/graphics/sprites/manaverse_emotions.png b/data/graphics/sprites/manaverse_emotions.png new file mode 100644 index 000000000..c93262ba4 Binary files /dev/null and b/data/graphics/sprites/manaverse_emotions.png differ diff --git a/data/graphics/sprites/test.xml b/data/graphics/sprites/test.xml index 7243254af..54944216e 100644 --- a/data/graphics/sprites/test.xml +++ b/data/graphics/sprites/test.xml @@ -1,6 +1,6 @@ - + diff --git a/data/icons/CMakeLists.txt b/data/icons/CMakeLists.txt index 2d5a0a899..0106dc8ef 100644 --- a/data/icons/CMakeLists.txt +++ b/data/icons/CMakeLists.txt @@ -1,7 +1,7 @@ SET(FILES - manaplus.svg + manaverse.svg ) INSTALL(FILES ${FILES} DESTINATION ${DATA_DIR}/icons) -INSTALL(FILES "manaplus.svg" DESTINATION share/icons/hicolor/scalable/apps) +INSTALL(FILES "manaverse.svg" DESTINATION share/icons/hicolor/scalable/apps) diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index 37eb702fd..dab4f85c0 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -1,19 +1,19 @@ iconsdir = $(pkgdatadir)/data/icons -icons_DATA = manaplus.png \ - manaplus.svg \ - manaplus.icns \ - manaplus.ico \ - manaplus.hqx \ - manaplus.xpm +icons_DATA = manaverse.png \ + manaverse.svg \ + manaverse.icns \ + manaverse.ico \ + manaverse.hqx \ + manaverse.xpm install-data-local: $(mkinstalldirs) $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps - $(INSTALL) $(srcdir)/manaplus.svg $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/manaplus.svg + $(INSTALL) $(srcdir)/manaverse.svg $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/manaverse.svg uninstall-local: - rm -f $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/manaplus.svg + rm -f $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/manaverse.svg EXTRA_DIST = \ $(icons_DATA) \ diff --git a/data/icons/manaplus.hqx b/data/icons/manaplus.hqx deleted file mode 100644 index 77b9e3b98..000000000 --- a/data/icons/manaplus.hqx +++ /dev/null @@ -1,603 +0,0 @@ -(This file must be converted with BinHex 4.0) -:#'eKEQ&`E(9c"&4&@&4dG(Kd"!!!!!,3!!"YPU$i5'ph)(4[)(9cC5"dD'Pc)'P -MEfik#JT6G'9`)$%k)%0[F(NJG'KP)'PMEfiJG'mJG'KP)'0XDA"LEf&bC!TK+5" -$E'PMDb"[EL"dD'Pc)'CTE'8JCR*[E5"dD'8J4QPZC'9b#Q)T)%0SEfpcC5!R4f9 -d)%PZCQmR)'CbEfdJG'KP)#G'D@aP*b"YC@je,JTM+5"*EL"dD'8JD@jQEb"hD@j -NEhFJG'KKG#"`Eh"c)(9`,#"ME'PMDb"[EL"dD'8JD@0[EJTN+5"$D'p[Ff8J*d0 -[F(NR)'CbEfdJG'KP)#G&C'Pd*b"YC@je,JTP+5"$E'pcC5"dD'8JD@jQEb"hD@j -NEhF+#P0dCA!J-MSJ8'&cG'8JG'KP)'PMEfiJG'mJG'KP)'4PFfPbC@3JDA4PE3T -K+5"(Eb"dEb"dD'8JDA4PE5"TEL"dD'8J4QPZC'9b)(4SBA3JH@pe)(GKER3JB5" -MGA0dEfdJD@0[EJTL+5"$E'PMDb"dD'8JDA4PE5!SCQPXC5`JCQpXC'9b,#"NDA0 -V,#"PG'-T)!TL+5"$D'p[Ff8J*dGPG#"*EQC[*b"QFQpY)(4SC5!R4QPXC5FJE@9 -ZG5i+BbNJ5@iJG'KP)'PZCQmJGfPZC'ph)(4SBA3JF'p`Fb"eF#`JBfaTBfXJEfi -JG'KP)'PMEfi+C#NJ3fK[Eh0P)#G3BA0dC5FJCR*[E5"dD'8J*d9NDA3R)'ePER8 -Z#Q8T)%0XEh0P)(4SC5"TEQC[)(GTEQ4[G`S+8h4PF#!c1L!+4@jUEhNJH@peFL" -ZCAGXH5"MGA0dEfeTHQ9N)'PMEfiK#JT'Eh)JE@pbC5"dD'pbEh9RD#"NDA*PBh4 -TEfjc,#"cC@8J3A"`E'8RFb"hC@*cDA4P)'&d1JTSG(4`1Lm[GhGh,Q&`F'aP,Q0 -[E5pcGA"`Eh*d,feKBc%`-5pMGA0dEfeTHQ8[0Lm+dk`!!!%!!!"YC!!!E'3!!!! -b!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!"XB'PMER-!!'aJDA-c-J!!!C1#!)Ar!3$rJ3##ri!!J[m"!!#"ri-!JIm!!)$ -rKJ#!r`!!Q[m%!!$rr`#!r`!!J2m!!)$r"!!!rrm!J2m!!)$r!!#!r`3!!2rr!)$ -r!!#!r`!!J2m%!!$rr`#!r`!!J2m!!)$r!3!!Jrm!!)$r!!#(r`!!J2m"!!#!r`3 -!r`$rri8!"Irr!2rr!)$rJ`#$r`%!!)(r!3!!K2q#!)ErJ!##!!GaE'ecG(&[F)- -!"(efFh0lJ!!+SRq"C@)!!(YdG@'$!!GHC@9Q!(acFiB!If*PB`"dF!"ZGAGdJ)" -iGAeQBe9aF(*`E@jZE@YYEQj`I3!!DA!!FQY[!'pUF!"aE(F!!'Cc!("XFJ"bE(! -!Ffaf!!"QFJ"aE(3!FQad!(0XG!!!CR%!FQeb!(4YG!"cE(3!!'aZ!(&`G!"dFR3 -!G'aZGRKcECGbI!"SHi!!!(0Y"A)!E`"eFB8!#(0Z!(GZ!'GkIB-!"AGYE'jbG)! -!#heiI!!!GA4XCQadBi)!#(&`FA&YD@GUE)!!r`$l!(-iE@X!!!%)!!!!!!"*UYc -(TATD$3!#!!!!!"l$ePd+!!!!!M%DLe!!!$IXM`B!!!!!!!!cT1LR!#2UK`!!!!! -!!!!!!'AFR3#q`3%D(M3r$JFj23m8I`a1rcNbr[r%rI$Sa2cY+!!!TYF!Brr'!+M -rc!#Nri3!!1DD!)MrL3#2rid!Lrq+!!$`H`#Vrf-!U2pQ!+ArDJ!!j(J!dImr!-c -r33$'rd8!!+50!IAm&`$ar"S!lIaSM(!db34%,`!$4$%!!%52@3#*!*3r!!!!!!! -!!!!YV3!GL`!'LLS!!!!!!!!2cHUFV!S!!!&`DKi!!!eAiIraH!-!!!!!!"*`RV[ -DeDPS$3!!!'PX-c)!!!34KJ#0riX!N!$rL3#6r`%!ri3!Krq&!)ArJJ#%riX!Jrq -"!)6rM!#%r`%!!)2rMJ#%r`%!!),rN!!!Jrm!!)2rJ3##ri!!J[q!!)$r!3!!Jrm -!!*!!r`!!J2m"!!##r`!!N[m"!2q!!),r!!#5ri)!J[m!!)2r!!#%r`!!Jrq#!), -r!!#$r`!!K2m!!)6rJ3##r`!!Jrm!!)6r!!#%ri%!JIm!!)2r!3!!Jrm"!!#$ri) -!JIm!!)2r!3!!Jrm"!!#$ri)!JIm!!)2r!3!!Jrm"!!#$ri)!JIm!!)2r!3!!Jrm -"!!#$ri)!JIm!!)2r!3!!Jrm"!!#$ri)!JIm!!)2r!3!!Jrm"!!#(r`!!JIm!!)2 -r!3!!Jrm"!!#(r`!!Krq!!),rJ!#(r`!!K[q"!)(rJ3#$r`!!J2m"!!#"rii!JIm -"!!#!r`%!!),rM3#"r`!!JIq!!),rL`#(ri%!J[q*!)IrJ`#%ri-!LIq&!*6rK`# -5riS!M[q%!)B!!fGRCQH$CJ*RCfD!CBX!!QPTCi9Q!fGRCQD!C3"QL3!#C@GRJ@B -'Cf4MCQCRCi&QJ@8"!''%!)4Q!QKQC)8!"fCPC'9PBQ4QJJ!!Ci*Q!'@,!!9N@f4 -MC9f"!!CNCQGQCQGYM!#!C!CQC@0H!!"SJQD1!!*NC@D"C3%!!)*QN!!!"MpIC@9 -LC!#$CS%!"'pTCfGSJ!!%9@GPBf1!!!CIC'3!!'TRJ'B#C!"PKQB!D)&Q!'@!CJF -!CQ4N!!"RCi"Q!J"NCBCQ!'H%CJ0NBJ"rJ!!!D)&Q!!#4CJ"PJJ!!Ci"Q!e)!C@@ -"CJ!!K'B!!)0QJJ#!CJ0PC3"PJQB!!)4Q!!#$CJ"NJ3#"CJ&P!)*Q!QF!F)0Q!3" -HJ@B"C9q"!)&Q!!#$CJ%!!)0Q!J!!CB*QJJ#!CJ&L!)*Q!fF!!'5#CJ)!!'@"CJ" -RJJ#"CJ!!JQB#C`!!JQB#C`!!JfD#!)&Q!!#$CJ)!!'H"CJ0R!!"PJ@B!CB)!J@B -!!)*Q!QF!!)0Q!3!!J@B"C@@#!)"Q!@)!JQB#D!!!JQB#C!!!J@B-CfCRCQCN!'G -QCQ3!Ci"Q!fGM!!##CJ*P!!#$CJPRCfCQ!'PRCQCSJQD!!)*QJ!#"CJKRCQCSCQB -!CfH!CS"P!'H"!!"RJ'@"!!CNC@9QCQ3!J'B"!!#!CJ"RMJ!!Bi"Q#`!!BfCR!!" -QCQ9QCSd!!'H!CJ3!EfGQD)!!"'9QCQ9*L`!*CfCQC@9RCQCPD)%!"'GQC@CaL3! -!Ci4Q!@GPJ`!#C@CRJ@D$!!"RKQB"CfL&!!"SJQB&BfCPCQCSKfB!D)F!!@9SJQB -!CB9Q"'GQCQGRLJ!&C@9RCfCPJfB%C@GSCQD%!2m!r`$r!2m!r`$r!2m!l`"X1'e -V!!!%#!!!!!!!!!!!!!)*)f@Se[,ikFkPF6%4"`%!!!!!!!!!!!!!!!!!!!%(,Bc -IpHlL`TTmF(+&SjT3&33!!!!!!!!!!!!!!!!#''[HqHZmCL3("33%"!8'%84R,`N -"!#)!!!!!!!!!!bZKq[5r8``#!3!!!!!!!!!!!J)V,!C'YKi!!!!!!!3i[[lPKaN -!!!!!!!!!!!!!!!!!!!%,"@R,%`!!!!!$0XEqh'X%!!!!!!!!!!!!!!!!!!!!1*@ -"Y-Bf'`!!!5LkrppL!!!!!!!!!!!!!!!!!!!!!!!`R,ldmGA"!!!8PIrYHJ!!!!! -!!!!!!!!!!!!!!!!!!!!%'-'+-8)!"echq+J+!!!!!!%($3X$!!!!!3J1#`)!!!! -BdPi!!!%Ld2lC0`!53NY'6@YlG&Xd'#P3ERae9#S'!"4h+`!!#((kpC8!#@,arrc -jrrlrrp'9[IErrrrq[$`&!!)!!!!CcrlL0J!GVIrrrp1,X[6rrrrrZiV(qIrrX"N -!!!!!!%cfqlS$!#E*rrrYF`!d`2rrrq*(!&,Grrrb+J!!!!!!N[VbI!%!,ZArrmd -j!!f4rrrrV#8!&F6rrrmp!3!!!!$&rHY'!3!kr2rrYa)!"BIrrrq'$3!)[rrrrd- -$!!!!!1Mrj5%!"&,rrrqQ!!!,M[rrrfX!!"($rrrp-`!!!!!!qIrG#`!,F2rrqBm -!!"HGrrrf@3!!*-VrrqXQ!!!!!!$irY8&!"1-rrrYGJ!!*Urrrpj)!!!le2rrc4m -!!!!!!12pe!8!'URrrq&G!!!f`rrrb$J!!&6Hrrq['3!!!!!!Zr[@"3!Karrre8- -!!%IBrrqb+!!!EqRrrj%5!!!!!!"qqGm3!#RMrrr*+`!!@Hlrrj`B!!#+p2rrF$e -fN!"f(3!cm1FX!$IrrrZN#3!!EIrrqA%$!!#SrrrXTlkHIk5J!!qTl'%"(RjqELd -!!!!jJApL(3!!!&GrIEl2DLJ521J!!clTU3)%$Ji+!!!!!!F2$`F!!!!!#JaJcQ! -+!!%ai3!!$BcG1!!!!!!!!!!!!!!!!!!!!!!!&VQP'J!!"C'F!!!"*EQM#3!!!!! -!!!!!!!!!!!!!!!"elRJ0!!Kfa$!!!!!%2-"h!3!!!!!!!!!!!!!!!!!!0X[r`&4 -9TY"0"3!!!!!&4,Pd"J!!!!!!!!!!!!!!!#ZeqrrjjqE56`J!!!!!!!!&0D#B*`) -"!!!!!!!!!JC0`rVrrrlmXMF'!!!!!!!!!!!#(@fkM$d5"`B("KT6UqImrrhkdQF -D!J!!!!!!!!!!!!!"#5Gb[G@mUl(,iqhfq[MaZQ3I"`%!!!!!!!!!!!!!!!!!!JN -@2ADK`0ACd,UAC5`3"`%!!!!!!!!!D@Jc-J!!"PZ0!)rrQ3#6rj8!Prm"!!#!rid -!R[q,!)IrM3#&riN!Krq4!)2rL!#'rj3!J[q(!)ErN!!!JIm!!),rK`#&rj!!!)R -rK3#%rj)!M2q"!)6rN`#-ri!!KIq8!)[rJ!#%rjN!Krm"!!#%riB!J[q$!)2rJ!# -#ri-!K2q!!*Ir!!##ri-!K2m"!!#Hri)!K2q!!*hrJ`#%ri!!RIq$!)2rJ3#&r`! -!L2m!!)ErK3#$ri!!K[m"!!#'ri!!KIq&!)2rJ!#&ri!!K[q!!)ArK3#$ri!!KIq -!!)ArJ3#&ri8!J[q"!)ArJ!#&ri%!KIq&!),rJ3#&ri!!KIq"!)ArK3##ri%!KIq -!!)ArJ3#&ri8!J[q"!)ArJ!#&ri%!KIq&!),rJ!#&ri%!KIq"!)ArK3##ri!!KIq -!!)ArJ3#&riB!J[q!!)ArJ!#&ri%!KIq'!),rJ!#&ri!!KIq"!)ArKJ##ri!!KIq -!!)ArJ3#-r`%!!),rJ!#&ri!!KIq"!)cr!3!!J[q!!)ArJ!#&ri%!M2m"!!#$r`! -!KIq"!)ArJ3#)r`!!J2q!!),r!3!!Jrq#!)2rJ`#'ri!!J2q!!),rQ3##ri%!J2q -"!),rP`##ri%!JIq"!),rP`#"ri)!JIq#!),rP3##ri%!J[q$!),rP!#$r`!!Jrq -&!),rNJ#,riB!J[q3!!#,riJ!Jrq-!)[rL`#%riJ!M2q0!*crN!!!Q2q6!*ArQ!# -3!2q,!)d!!@GQJ@@$CJ9RCQ9NCQDC!!&PC)pQ!@GQP3!"C'H(CJCPCf9QCf4PJ@B -(CfKP!!"9BPf0!)GQ$'GRCQ9RC@CRC'9PEfL!C`CPC!"MC@9HL`!!CiCQM3!(C@C -RCf4PC@+*!!&TCi4Q!'@4!!9QC@4QC@+)!!&XCi0Q!'H8!!4LCQ9N@iF!!@4RJfB -!C*!!!!PF@e8!!'4NC@99K`!!Ci0Q!&53!!!&BQ9PC'9NJ'8#Be9rK3#%CT)!!f4 -PCQD!C3"QJ'8$Bf9MBi%!!@GRJ@B!CC-!!@4NJQ8(CQCPCQ9PCQ5!!!&LCB*Q!%k -8!!4FBQ&NBiCPJ!##CJ&RD*N!$9TPCQ9KCQ4LCQ3!!'9PJ@B!CiB!"'4SC@GMJ`! -&C'CQC@CVJ!!%A@9QC@1$!)4QJ!!!CS"RKQB$C@4UCi9Q"QF!Af9QC9q$!)0Q!f8 -!!'@ACJ9RC'9PC&@#!!&VCi&Q!'H!!*PQ!f9QC@@$!)0Q!'H!!)CQ!@9PMQB$Bf0 -LA)-!JfD"!)9Q!3"RKfB"!'5%CJ"KK3!!D)&Q!'H!!!"NK@B#!!"SK@D!!)4Q!'H -&!!"PJ@B!CB!!!'@%CS!!K@B!C)!!JfB"CfH&!!"PJ@B!A)!!!'H%CS!!K@D"!)4 -Q!'@&!)*QJ3#%CJ"RJ!!"CfH#CJ"PJ3#&CS8!J@B!CB%!!'H%CS!!!@GRJQB!CB% -!K@D&!)*QJ3#%CJ"RJ!#&CS%!K'B!Ci8!J@B!CB%!K'B!DB!!!&f%CS%!JfB"C@1 -&!)*QJ!#&CS%!!'5$CJ"MJ3#$CJ&PAB8!J@B!Ci!!K@D!!!&RCi0QJ3!!D)4QKJ# -#CS!!!'H%CS!!!@9PJfD"!!"RK'D'!!"RJ@D!!!"PJfB!CB!!K'B!CB%!K'B!CiB -!!'H"CS!!K@D!!)9QJ3#&CJ"NJ@B%CfF!!'H"CS!!K'B!CB!!K@D"!)YQ!Q8!!)& -Q!'@!!)9QJ!!!C)4QJ3#$CJ"RK@B$!!"SCi"Q!f-!@f@"CJ&RCi%!!'5%CS%!!'@ -"CJCRCQCRCPJ!J'D!!)&Q!f8!!'#!B`&QDi)!!'D"B`"QJ`!!BB"M"'GQCQGSJ!! -#C@9QJ!!"C'@!CTN!!'@!CJ"SJ3#!CS%!J@B!D*F!JQD"!!0RCfCPJ3!!BB&QP`! -!Ci"QJJ!!CB"QJJ!!CB&QP3!!Bi&QJ3!!Ci&QJ`!"CfH!CT3!JfB"!'H"CJ"RK3# -#CT)!!'@+CSB!!'5"CT!!!!"RL'B"C@5)!!&SCi"Q!&b-!!"SL@B!CBX!JQB"Cf@ -)!!&MCBTQM3!"CQ@!CJ4PC@4MCi&Q!f4NCfH(CJ*PCQL3!!!"CQ@#CJ"RMQB"C@5 -6!!4HC@CRCiaQ!fGQC'HB!!PRCfPSCfGQC@GPJ@B%C@CQCfH,!2m!r`$r!2m!r`$ -r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$E!'JiE@X!!!N)!!!!!!!!!!!!!!!!!!! -!!!81)PqD`qIjqqrL`jeX0a-,!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -'&%bPjrMlrIchmZcTk1APiX&p14)&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!a& -5[26prr[`iX+AFNj!26C&AhbSajK%&!3!!!-I(J!!!!!!!!!!!!!!!!!!!!!)0k, -arrrij,9a,3B#!J%"!3%"!3)#&8Q0I6!*!@R4Z#-!!!!!!!!!!!!!!!!!!"*Ne[r -rqq+R5!J!!!!!!!!!!!!!!!!!!!!!,QG"'V,qib`!!!!!!!!!!!!!!!!"))harrr -[YdX)!!!!!!!!!!!!!!!!!!!!!!!!!!!b4m[rd4S!!!!!!!!!!!!!!!)USI[rrpk -!'J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-YlqZ`i!!!!!!!!!!!!!!5fXrrrpce- -'!!!!!!!!!!!!!!!!!!!!!!!!!"B1"J)!11[qS3B!!!!!!!!!!!!!*kErrrc#4!% -!!!!!!!!!!!!!!!!!!!!!!!!!3EfpSi9SL2EpM`N#!!!!!!!!!!!DQ[rrrm8q!!! -!!!!!!!!!!!!!!!!!!!!!!!!!A[Rrrrhlp[rqfUQ0Ee)N!!!!!!pkprrrddX!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!-lEHlIElr[rrr[rqr2@R!!!!"P$PrrrLC!%!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!"BR2&CffIlmbFrLlrLe!!!!*-(rrrH6$3!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4[rrC,aNV39Si!!!0IrhrrmFa!!!!!!! -!!!!!#aNI(!N!!!!!!!!%&#!H%`8!!!!HeIr%%J!!!!!!!!%cirrrkR%!!!!JBha -kF@Z)TV+hY+D&4J)$*@QBVlLfVjTR(3!`jIqV#!!!!!!!!!f-rIrr[aS!!"L*kI6 -clHVkrrrrrrrjdBq"[qRrrrrrrrlTVcY)m[k3!!-!!!!!!!%Vj2rrlRS!!!"+f[r -rrrrrrr$lrrrrrrrimIrrqI,rrrrrrrkfDrAiDJ!!!!!!!!P`qrrrcbB!!!"Pq2r -rrrrqL8&0`[[rrrrrrrrB9calj[rrrrrmGQeL&J!!!!!!!",$rIrkSJ!!!!"irrr -rrrr(,3!"3HVrrrrrrr10!3!4M[rrrrrrS"d!!!!!!!!!!$2`rrrUDJ!!!!U-rrr -rrrq"$`!!#F2mrrrrrpp'!!!!9Zcrrrrra#`!!!!!!!!!!'MirrrC-!!!!"UKrrr -rrrj1!!!!"D$jrrrrrmd2!!!!3G2rrrrrdM)!!!!!!!!!!*rkrrr#"3!!!#Zhrrr -rrp`h!!!!"*IirrrrqkX!!!!!1mcrrrrrcc%!!!!!!!!!!-EmrrQP!!!!!$[-rrr -rrldT!!!!"CljrrrrmSB!!!!!30,rrrrr`LX!!!!!!!!!!0lprr1)!!!!!%[Krrr -rrk3H!!!!"DrkrrrrkQ3!!!!!5GlrrrrrXb3!!!!!!!!!!2ArrqaX!!!!!&cfrrr -rriS5!!!!"XAprrrridF!!!!!9HhrrrrrQKN!!!!!!!!!!2IrrqC6!!!!!'hrrrr -rrh%(!!!!#Gcrrrrrh#N!!!!!B[hrrrrrJ!i!!!!!!!!!!1hqrq0(!!!!#S6rrrr -rreN!!!!!(qErrrrre!d!!!!!FrrrrrrrC`-!!!!!!!!!!0lprq0&!!!!'*[rrrr -rmNJ!!!!"21Vrrrrq`3!!!!!0LIrrrrrr83!!!!!!!!!!!,Vmrq4)!!!!*l(rrrr -rfc`!!!!"@ZlrrrriSJ!!!!!FS2rrrrrR3J!!!!!!!!!!!)[jrqC5!!!!0XRrrrr -r`bm!!!!#H[2rrrrcK!!!!!!VYrrrrrr20J!!!!!!!!!!!&6hrqYS!!!!40rrrrr -rUb)!!!!#Q2IrrrrYC`!!!!!jc[rrrrqf+!`Y3NFp(3)!!"lFrr+(!!!!8rErrrr -rMa-!!!!#Yr[rrrrR3J!!!!"*j[rrrrqE4R[0lr,TS5m!!!b5r2UR!!!!Crrrrrr -Q9`)!!!!)f2rrrrZi&J!!!!"ErrrrrqbPbZZpKR1@kUi!!!4#lrr)%!!$8,@`X+p -S%J!!!!!0QV'`X*il!3!!!!"&YE#`XlMTh(XF!3!&T[-!!!!4T2rJ53!!#KB@&K! -%!!!!!!!#%aB@&3X!!!!!!!!*&aB68Y6HAJS!!!!%L[B!!!!$2q[dM3!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!PVr*b#`!!!!!)YZ-!!!!!%)lrb#B!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!4iqDiN!!!!!!&'ijB!!!!!!5[#mS3!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!$R(rh!!!!!!!#Lkf68!!!!!!!91jp3r!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!$iMmr@%!!!!!,UMcE3J!!!!!!!!0F1U`*!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!6GlrrjFB!"jQ[ID+%J!!!!!!!!!!%(cTQ4X!!!! -!!!!!!!!!!!!!!!!!!!!!!!!`ZrrrrqZpVF(Rr*)E!3!!!!!!!!!!!"4pi*iP!!! -!!!!!!!!!!!!!!!!!!!!!!#b`qrrrrrrrrrrbIKX"!!!!!!!!!!!!!!!2CG'l5!3 -!!!!!!!!!!!!!!!!!!!!'4m,irrrrrrrrrpKM%3!!!!!!!!!!!!!!!!!!#%@afT) -`"!!!!!!!!!!!!!!!!bQ1h[hrrrrrrrriSMS)!!!!!!!!!!!!!!!!!!!!!!8GEml -GSedM"J)#!J)#""T@R0McrrrrrrrqqEjB'!-!!!!!!!!!!!!!!!!!!!!!!!!!#5K -dbqAIakf6P*DNb0rVprrrrrrpr1ke@"X'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!% -*(9+CfHr[mI2eqrhpr2VipqQkH684"J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!80&cGNNDUmbmR!XTGe5b%3#3)!!!!!!!!!!!!!!!!!!'Pd-c)!!")j!!!!!,) -!Q[rG!+$re`#Qrp)!Urr0!+rrb3#crm8!R[q%!)rr`J#Brj)!L[qq!*ErQJ#)rlX -!P2qK!)ErY`#6rkB!KIqe!*,rU`#$rl-!N!$rV`#%rkm!N!$rX`##rki!N!$rY3# -#rk`!Mrqj!)IrT!#2rlX!KrqK!)rr[`#'rjm!Mrr!!)ArR`#2rm%!KIqH!)lr``# -&rjd!M[r%!)ArR!#0rmB!KIqF!)cra`#&rjX!M2r)!)ArQJ#-rli!Jrq"!)ArQJ# --rld!NIqD!)[r[J#6rjF!Lrqr!*VrM`#-rlm!Qrq1!)[r`!#Fri`!Lrr#!*[rL`# -,rm8!QIq+!)crc!#5riS!Lrr1!)Ar!!#(riS!M2r1!)ArK3!"rrq,!)[rc`#&rj3 -!M2qA!)VrM`#*riS!KIq8!)[rL!#)r`!!NIq)!*(rKJ#&rj-!M2q(!+(rJJ#@ri- -!KIq6!)crK`$#ri%!KIq6!)[rK`$%ri!!KIq6!)[rKJ$'r`%!!)ArNJ#,riF!arm -!!)ArNJ#,riF!b2m!!)2rNJ#-riB!bIm"!!#"rj-!Lrq(!*6r!!#arjJ!M2q(!*( -rJ`#@ri)!N[qA!)[rL!#3!2q&!*6rK!#4rjF!Lrq)!*!!ri8!P2q&!*!!rjB!M2q -)!)rrK`#5riB!NIq9!)[rL3#2riF!N[q(!*!!rj8!Lrq)!*!!riJ!NIq(!*!!rj3 -!M2q)!)rrL3#3!2q)!*!!rj3!Lrq*!)rrL3#3!2q)!*!!rj3!Lrq*!)rrL3#3!2q -)!*!!rj3!Lrq*!)rrL3#3!2q)!*!!rj3!Lrq*!)rrL3#2riN!N!$rP!#+riS!Mrq -*!)rrL3#3!2q8!)VrL3#3!2q*!)rrL3#3!2q8!)VrL3#3!2q*!)rrL3#3!2q8!)V -rL3#2riS!Mrq*!*!!rj3!L[q*!)rrLJ#1riS!N!$rP!#+riN!Mrq+!)lrLJ#2rj8 -!L[q*!)rrLJ#1riS!Mrq9!)RrLJ#2riS!M[q+!)rrP3#*riN!N!$rL3#2riS!Mrq -9!)RrL3#3!2q*!)rrL3#3!2q9!)RrL3#2riS!Mrq*!*!!rj8!LIq*!)rrLJ#1riS -!N!$rP3#*riN!Mrq+!)lrLJ#2rjB!LIq*!)rrLJ#1riS!Mrq@!)RrL3#2riS!M[q -+!)rrPJ#*riJ!N!$rL3#2riS!Mrq@!)RrL!#3!2q*!)rrLJ#2rjB!LIq)!*!!riN -!Mrq*!*!!rjB!LIq)!)rrLJ#1riS!N!$rPJ#*riJ!Mrq+!)lrLJ#2rjF!LIq)!)r -rLJ#1riS!MrqA!)RrL!#2riS!M[q+!)rrP`#*riF!N!$rL3#2riS!MrqA!)RrK`# -3!2q*!)rrLJ#2ri-!KIq+!)RrKJ#3!2q*!)rrL3#3!2m"!!#-riF!LIq'!)rrLJ# -1riS!N!$r!!#1riB!LIq'!)rrLJ#1riS!Srq'!)MrKJ#2riS!M[q+!+6rK3#)riB -!Mrq+!)lrLJ#NriB!Krq&!)rrLJ#1riX!T2q'!)MrK!#1riX!MIq,!*MrK!#$riB -!L2q%!)hrM!#-ri`!PIq)!),rK`#(ri3!M2q0!)[rM3#8riN!J[q(!)Irc3#(riS -!J[q)!)Irc!#'riX!J[q)!)Irb`#'ri`!J[q*!)Irb3#'rid!J[q+!)Erb3#&rid -!Jrq+!)Ira`#&rii!Jrq,!)EraJ#'rid!K2q,!)Ira3#&rii!K2q-!)Era!#'rid -!K2q1!)Er``#'ri`!KIq1!)Er`J#'ri`!KIq3!!#'rm%!K[q,!)ErN3#'rlm!Krq -+!)ErN`#'rld!LIq'!)MrP!#'rld!L[q$!)RrPJ#'rlX!R2qB!)ErZ3#FrjS!K[q -h!*crR!#'rl8!R2qH!)ErX`#Frk!!K[qa!*crSJ#(rki!R2qN!)IrV!#ErkF!L2q -S!*crUJ#)rk3!RIqX!)RrS!#Hrkm!LIqF!*lrXJ#,rjB!S2qe!)crM`#LrlN!N[q -!!+Ir[!#mrm!!Z2r&!,,rbJ#Zrmm!U2r9!+(rh3#Crkd!XJ!&CfCPC'CRLfB!CB0 -Q!@4Nh3#!C3*QCQ@9CJ4PCQCPCpF!J'8"CQ@FCJ4PCQ9PCp)!!fTQC@@LCJ"PJ'B -!DFd!!Q4QCkPQ!QGQCXN!!'1aCJ"Ra3#BCJ9PCQCNCQb%!!*QCQL!CJ"RKfB!CF) -!P@B#Cf9ZNJ!#EfKPKfDq!!&NCj4QQJ!"C@H%CJ&PCEX!NQB"C@+K!)4Q!@KVY`# -3!'B#C@CSTJ!!DS4QY3!!CipQ!@9@U`#$CV-!N!"QV`!"C@@#CUm!!@TRMQDc!)& -Q!'HZ!!&RCieQ!&be!!4TD'GQCU`!M@B"CfDj!)"P"QC99@*NC'+N!!&RCieQZ`! -%BQ4PC'1"C3"NS3!#F'CPLQB"CfDr!!*PC'@"CJ&N2jm!!@PSM@E!!!*9C'@!CJ& -PC*m!!@0NLfB"C@6"!!*9C@@!CJ&PBTi!!'H-CJ"L``!"9@@"CJ&NB*d!!@CRLQB -"C@$%!!&FCB&Q!@4LR!!"CfH+CJ"PaJ!"B'5!CJ*PC@1F!!&NCiTQa`!!B)*Q!@4 -FQ`!"BQH+CXJ!!''"CJ*PC@DD!!"PLfDq!!4LBeKEEB)!!P9MCB"Q!@9NQJ!"B@@ -*CJ"P[3!"@Q1#CB"M!f4JAf@"CJ&PC*S!!'@+CVi!!@CPJfB&C@4PC'4PJ@B$C@* -UIjF!!'5+CVm!!@CPM@B+C@4PC'0NBf&RCP@2!!"SLQB!E,m!!@*PN@B"C@D"C3& -NBSi!LQB!CF!!!QCMCCCQ!Q9NB)`!LfE#!!&HC)&P!Q4PCC!!CJ&PBBX!!'@+CX8 -!#P9MCQ0LBf0NC'9PJ@B"C@@'CJ&NC)S!!*!!LfE-!!-r@@0PJ'B0C@4NC@4PC'9 -PCQCPC&q+!)TQ!'A1!!"YJQB-C@-!9@CMB'*MCQ4PBSS!LQB"CfI1!!&TCB&Q!@9 -MK3!"5%L,!)YQc`!"A@@!CJ*PCQ+8!!"RL@B"CfLA!!CVCQCPC@CQJ'F#C@0LM`! -$C'9QCi*Q!Q9PBSS!!@&PJ'B#C@9IP!!!CiPQ!'L)!!"NK@8%C(J!B'@1CJ"NL!! -#CfCRLQB$C@9RDBB!!@&PJ'B#C@4YN`!!CiPQ!@9LK`!!CjjQ!@9RJJ!#8Q9RN!" -Q!Q9PCS3!!@&PJ'B"C'@6!)TQ!@GRK`!!D+&Q!f*QCP'ACJ&PBi%!!MpMCB"Q!@9 -NN`#+CJ"SK`!!Ck0Q!@9NQ@B"C@@!!!&9Bi&Q!@9NN`!!CiKQ!@9QKJ!!Cm0Q!f9 -P!!#$CJ&PBj)!LfD(!-CQ#@8!A'9PCQCPC''5!!"PLQD(!!"Pa@B$D'd!BS&P!'+ -5!)TQ!@G[KJ$*CJ8!!'CQ@9@6!)PQ!@GRK`!!Cj&Q"'&T!'GRVQB!C*J!!@YRLQD -(!*!!CJ"RJ`#9CJ"NJJ!"CfH1CJ&PCCF!!'H+CSJ!N!"QK3#8CS3!N@DA!)TQ!'H -)!!"RMQB!CB8!NfB!Ci8!!'H1CJ"SPJ!!CiTQ!'5)!)pQK`#4CJ"PKJ!!CBjQ!@G -RP3!!CiTQL3!!CieQ!'@(!!"RN!"Q!'@(!!"PMQB!CC8!LfD)!!"RMQB!BBJ!MfB -"CfU(!*!!CT3!LfB!D)J!MQB!CiN!!'@2CSJ!!@GRMQD8!!"RLQD*!!&RCiaQ!'@ -*!*!!CSJ!!'H0CJ&PCC3!LfD*!)jQ!'@*!!"RMQB!CiJ!N!"QP!#,CSN!!'H0CJ" -TL3#2CJ"[L!!!CieQ!@9PP!!!CBPQ!'L*!)pQL3!!CijQL3!!D)pQP!!!CiPQLJ# -2CSN!!'H1CSN!!'@0CJ&RCj3!LQD*!!"TM@B"C@@*!!"PM@B!CBN!!'@2CT3!LQD -*!!"RM@B"C@5*!!"PMQD*!)jQ!@9PP!!!CBPQL3#1CJ"LLJ#2CSN!!'@0CJ&NC*3 -!!'@*CSN!!@GRM'B!CBS!MQD+!)jQ!@4MP!#*CJ"RL3!"CfH0CSS!!'H0CSS!MQB -!Bj8!L@B!-iN!MfD+!)eQ!'H+!)pQP3#*CSS!M@B"C@@+!)jQLJ#0CJ&PCC8!L@D -*!!"SM@B"CfH*!!"LMQD+!)eQ!@9PP3#)CJ"PL3!!CBeQ!@GRL3!!CieQ!'@*!!& -iCiaQ!@GRP3#*CSN!!@GRM'B!CiS!MQB!DiN!!@PRM'B"CfH9!)KQ!'H*!!"RMQD -+!)jQLJ#1CJ&RD*8!L@D*!)pQLJ#1CSS!!'@0CJ"LPJ#*CSN!!'H1CSS!!'H0CSS -!MfD@!)PQL3#0CJ&RCiS!M@B!CBS!MfD@!!"PL'D)!)jQ!@GRL3#2CSS!MfD@!)K -Q!'H)!!&RCieQ!'H*!)jQ!'H+!!"RMQD@!!"RKfB!CiJ!MQB"C&q*!)pQL3!"DQH --CJ&PC*B!!'H)CSJ!MQB!CBS!MQD+!)jQ!@4KPJ#)CJ"PL!#2CSS!!'@0CSS!!@9 -PM'B!CCF!!'@)CSJ!MfD+!)eQ!'H+!!&PCBYQ!@GRP`#)CJ"PL!!!CBjQLJ#1CSS -!MfDA!!"RL'D(!!&SCiaQ!@9PL3!!9)eQ!'@+!)pQP`!"B'@(CSF!!'@0CJ&RCiN -!!'L0CJ"PLJ#0CJ&RCi-!"haSCfGPCQCNLJ!!CBGQ!'5'!)pQ!'Q*!!"RM@B!D)N -!!@4PM@B&C3!!C'YSKQD!CBF!!@9PKQB!DBB!!@GRM@D+!!"RM@D+!!&PCBaQ!QG -T!)eQ!'1'!!&ICBCQ!'H'!)eQ!@9PLJ!!CBeQLJ!"CfH0CJ&UDBjQ!'@'!)KQKJ# -2CSS!!'@-CJ"RLJ!"CfH0CJ"RN@D&!)GQ!'H'!!"RM'B"CfL+!)eQ!'Q+!!&PCBa -Q!'H)CJ&PCB9QKJ!!CBCQK3!"C@@0CSS!!(10CSX!M'B!CBCQ#'GKCfCNC@GKCi* -QKJ!"CfH&CJ"RK!!"C@@+CJ&RCiX!!'5-CSX!!'58CJ*RC@H%!)0QKJ#)CS3!LfB -"C@@-!!"RLQB!Ci`!!@KRLQB!CB4Q!'b)!!"RJ@D(!!"RK@B!CB3!!@YTKfB#CfC -MM3#+CJ"RM3#+CJ"RKQD*!!"PJ@D(!!"LKQE0!!"TK'B"D'L+!)*QL!!!CBCQc!! -!Ci0Q!@9PL`!!C)&QL!!!F)CQb`#%CJ&RDB`!JQD*!!"RK@B!D-N!!'H$CJ&RCid -!JQD+!)CQb3#$CJ&RD)d!!'1#CSS!!'@&CJ"Ua`!!CB0Q!'H1!!"PJQD,!)CQaJ# -&CJ"PM3!!C)*Q!'H,!!"RK'B"Cfh&!)9QMJ#%CS`!!'@&CX3!!'H&CSd!!'H$CSi -!KQE$!!"RJfB"CfQ-!!"RK'D1!!&MCB0Q!'I#!!"RK'B!CB`!!'@$CJ"PN!!!!@9 -PJQB"C@A"!)CQL`!!Ci9QN3#%CJ&PC,m!!'H'CSS!!'@&CT-!K'B"C'1p!!"VL'D -'!!*QBQ@&CT3!!@GPJfB!D,d!L'B"CfQ$!!*PBQ5%CJ&PC*B!!'5&CVX!M'B$CfG -PCS"PK@B!CCJ!K@B!CEN!M@B%CfGPCQ@'CJ"PQJ!!BB0Q!@9RY`!!CjTQ!'@F!!" -XJfB"Cf@e!!*TD'HBCJ"PRJ!!Di0Q!@9QX`#ECJ"PS!!"C@@%CV%!!@*PQ@B!C+) -!!@9PJfB"C@+Z!!&RCCPQ!(5N!!&RCi0Q!@9QV!!!CCTQT`!"@f@&CJ"NU!#ECJ" -PUJ#&CJ*PC@5N!!&PCjTQ!'qX!!"NKQB"C@5J!!&pCjTQ!@9PV`!!Ci9Q!Q9QD*` -!!'5ECJ&PCE)!!@4PL@D@!!&HCCYQ!QGRD,8!L@B#C@CPM`!#AQ9RR@B"C@5j!)Y -Q"Q9PCQ9MB9U!!!D#E@PPCf9RRfB!C,`!!(QjCJ&RCX!!!e*QC@@cCJ"Na3!#C@C -RVfE+!!"UJ@B!Ck*Q!Q9QCB"Qc`!#CQCRRfB!Ci"P!@CKe3!&CfGQC@9RP'B'CfC -PC@CRC0d!!@CRJQB&C@CPC@GPJ'H!CJKPCfCPCQCRCQ1Y!2m!r`$r!2m!r`$r!2m -!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m -!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m -!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m -!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m -!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!)% -!G$KYD`!!3!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!-+%"BeBSDPa0IQmrrrrI6TfmL`QAP9-4N4$!B"!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!mD2AL -ai26iqI[mrIlqrrrrr[lpr2[kqIIfiEQ0A#XA$J8!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#$L"+P0Iir2hqrrrrrrrrrrrrrrrrrrr -rrrrrrrrqrIckp-U48b89"`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!%'6Z&d[[qrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr[lmjDC -H+K3%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')e@Ulrrrrrrrrrr -rrrrrrrrrrrrrrrrrrrrrrrrqr2hrrrrrrrrrrrrrrrhLQ%mM#`!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!&+@'kqrrrrrrrrrrrrrrrrrrrrrrrrrrjl1,BcFA -"ZUqPU+k[XVc%bY(Fk26rrrrrpX*`-`i!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -"*@+rr2rrrrrrrrrrrrrrrrrrrrrrlp[)Y*4d@d%R%`B!!!!!!!!!!3iI-%YTL+H -re1Vlrrr@J6d2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'eL`q2rrrrrrrrrrrrrrrrr -rrrRLaD9i6LJ(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!K9"E*Dlh2Irfi8p#J!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!#8#ClrrrrrrrrrrrrrrrrrrrrZ5kM&`X"3!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!4T5Kl2KrY9q-!8!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#4fe2c -rrrrrrrrrrrrrrrrrmF@5A5-%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!'P@5c2I"CaB"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!K(Ur,rrrrrrrrrrrrrrrrrlE*c03S -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SjGVcPS$m -%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!GGYEprrrrrrrrrrrrrrrrl+0H*!)!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+Qql`fm1!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-k(Yrrrrrrr -rrrrrrrrrmUKC(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!5eaX*-R!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#9,$qIrrrrrrrrrrrrrrq,KG)3!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!- -hJ*T$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!"&Zh2rrrrrrrrrrrrrrrGef+J%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%56AC4!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!BLHMrrrrrrrrrrrr -rrrLH23`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!%*9*2!3a'AQ"'!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!)D2arrrrrrrrrrrrrrrHCK`"!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!"$M!pMqcfpYP(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!5HbprrrrrrrrrrrrrrqXcd*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"&VarrrrqRF%!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)Y[IRrrrrrrrrrrrrrp)) -L!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!$E2ErrrriB`!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!$,XAlrrrrrrrrrrrrrZ9Q%3%!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!D)qrrrrqe,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!bc -&qrrrrrrrrrrrrrl46JJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#D(rrrrrhc8!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)Ta2[rrrrrrrrrrrrq[MX#!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!@Z2rrrrr3(`!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!")Vrkrrrrrrrrrrrrr,Nf!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!#A0rrrrrVd5!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"QYq2r -rrrrrrrrrrrZc-3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0H(rrrrmSJX!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4QIArrrrrrrrrrrrmXLm!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!"*lIrrrrZ&"3!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!#Rl`rrrrrrrrrrrrr,Xf!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!X+4F1"`% -!!!!!!f6drrrrq'X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0Hj[rrrrr -rrrrrrrh(3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4HGVJd,LDI@4+-"dBKIVrrrr[9!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3GIrrrrrrrrrrrrre%m!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!$,@rrrrrrrrqr$Pem2Grrrrrq03$!)!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!#@kr[rrrrrrrrrrrq9Q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-YErrrrrrrr -rrrrrrrrrrrrrqmfZNhYH3#SE$`-!!!!!!!!!!!!!!!!!!!!!!!!2NrArrrrrrrr -rrrr`K3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XdIrrrrrrrrrrrrrrrrrrrrrrrrrrrIA -ZjG'iRP!!!!!!!!!!!!!!!!!!!!!!!'EPrrrrrrrrrrrrpk3B!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!q5qrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrq`b8!!!!!!!!!!!! -!!!!!!!!kb[rrrrrrrrrrrrh+,`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#0mT,h9jr$ -hrIrrrrrrrrrrrrrrrrrrrrrrrrrc83!!!!!!!!!!!!!!!!!!&Tcmrrrrrrrrrrr -rkP`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'%KiZ4Q5!QE6Gr[rrrrrprIrrrrr -rrrrrrr9H!!!!!!!!!!!!!!!!!!&SkIrrrrrrrrrrrrD6#J!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!%&)MjrrrrqD9`L+A#eqAar2rqULJ!!!!!!!!!!!! -!!!!!0F2rrrrrrrrrrrrmaL3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!(NIrrrrrP5!!$#K)G-8TNJSdj!!!!!!!!!!!!!!!!!!f(qrrrrrrrrrrrrr& -8!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"'TrrrrrpNT!!!!!!! -!!!!("`!!!!!!!!!!!!!!!!!!5YcrrrrrrrrrrrrlT`m!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!(X,rrrrqb"S!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!"ZGrrrrrrrrrrrrrZ8f!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#bP#@'0 -VEQCD6MJB!J!!!!!!!!!!!!!!!!!!!!!!!"8e6PKMDfpPANXd&!!!!!!!!!!!!!! -!!!!UfIrrrrf`%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!91crrrrrrrrrrrrkK3S -!!!!!!!!!!!!!!"-[0MBf0MBf-4m%!!j#Hkc,eplPk1VVkHALfp'qQ@)N!!!!!!! -!!!!!!!!C6iZkcpVLjHMUkqMQiGV3Y)!m#J!!!!!!!!!!!$cRrrrrqj8(!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!##RrrrrrrrrrrrrrYXP!3!!!!!!!!!!!!"'ZZ$Ji1$ -Ji1$HfXl!dH,`qrrrrrrrrrrrrrrrrrrhkYDA03%!!!!!!!)eMXrQmrlrrrrrrrr -rrrrrrrrmmH1jAa%!!!!!!!!#9ZrrrrrkH`!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -"9r6rrrrrrrrrrrrmH`S!!!!!!!!!!!!!6Frprrrrrrrrrrrrrrlrrrrrrrrrrrr -rrrrrrrrrrrrrr[ICH3i"!3)UNGhfr[rrrrrrrrrrrrrrrrrrrrrrrr[YZ$d'!!! -!!!4aq2rrrr*M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"qRrrrrrrrrrrrrrp`R!!! -!!!!!!!!!!$[$rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrl`U6` -ZJGIir[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrli9m-!!!!"SVrrrrrk%F!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!5[,rrrrrrrrrrrrpI3`!!!!!!!!!!!!GS2rrrrrrrrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrklqlfr[rrrrrrrrrrrrrrrrr -rrrrrrrrrrrrrrrrql@8+!!!2S[rrrrrH,J!!!!!!!!!!!!!!!!!!!!!!!!!!!"L -Drrrrrrrrrrrrrq-X!!!!!!!!!!!!!&$Trrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrk%N -%!!Z$rIrrrEiL!!!!!!!!!!!!!!!!!!!!!!!!!!!!11IrrrrrrrrrrrrrNa)!!!! -!!!!!!!!!DrrrrrrrrrrrrrrrrrrrrrrrrrrpqIVqrrrrrrrrrrrrrrrrrrrrrrr -rrrrrrrrrrrrrqrMlrrrrrrrrrrrrrrrrrrrrrrrpbKi"!#bV`Vq513!!!!!!!!! -!!!!!!!!!!!!!!!!!!!eirrrrrrrrrrrrrrG'!J!!!!!!!!!!!!U#rrrrrrrrrrr -rrrrrrrrrrrriiF+NUmhXr2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrqlGDaSEEFm[r -rrrrrrrrrrrrrrrrrrrriH`F!!"38&!B!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*-I -rrrrrrrrrrrrrZ4m!!!!!!!!!!!!!&jRrrrrrrrrrrrrrrrrrrrrrmk3k"3%!%Q$ -(qIrrrrrrrrrrrrrrrrrrrrrrrrrrrpT`'!)"!bD*irrrrrrrrrrrrrrrrrrrrrl -A'3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!01rIrrrrrrrrrrrrpU#3!!!!! -!!!!!!!!PX2rrrrrrrrrrrrrrrrrrrrkj%J!!!!!!!$@qrIrrrrrrrrrrrrrrrrr -rrrrrrrrjBJF!!!!!!!KJk2rrrrrrrrrrrrrrrrrrrr0@!`!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!%TArrrrrrrrrrrrrj63!!!!!!!!!!!!!!$6)rrrrrrrrrrr -rrrrrrrrrk@B!!!!!!!!!!%hDrrrrrrrrrrrrrrrrrrrrrrrrrm!Q!!!!!!!!!!j -qqrrrrrrrrrrrrrrrrrrrqCi'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!MfIr -rrrrrrrrrrrqR(3!!!!!!!!!!!!!!3Glrrrrrrrrrrrrrrrrrrrl%&`!!!!!!!!! -!!TVirrrrrrrrrrrrrrrrrrrrrrrrF3S!!!!!!!!!!#R2rrrrrrrrrrrrrrrrrrr -qd`i!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"%lprrrrrrrrrrrrrfS(!!!!!!! -!!!!!!!"2pIrrrrrrrrrrrrrrrrrrmB!!!!!!!!!!!!!!6q$rrrrrrrrrrrrrrrr -rrrrrrq3m!!!!!!!!!!!!$RrrrrrrrrrrrrrrrrrrrrrU+`%!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!2NIlrrrrrrrrrrrrQ2!!!!!!!!!!!!!!!!'(rrrrrrrrrrrr -rrrrrrrrK1!!!!!!!!!!!!!!5arrrrrrrrrrrrrrrrrrrrrrrUb%!!!!!!!!!!!! -!4[Errrrrrrrrrrrrrrrrrqp4!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"M0rrr -rrrrrrrrrrkiL!!!!!!!!!!!!!!!)H2rrrrrrrrrrrrrrrrrrrX8+!!!!!!!!!!! -!!!#Pq[rrrrrrrrrrrrrrrrrrrrpd#!!!!!!!!!!!!!!ZdIrrrrrrrrrrrrrrrrr -rmQJ#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"-I2rrrrrrrrrrrrrI3X!!!!!!!! -!!!!!!"54rrrrrrrrrrrrrrrrrrrdLJ!!!!!!!!!!!!!!!(M[rrrrrrrrrrrrrrr -rrrrrkdJ!!!!!!!!!!!!!!"kSrrrrrrrrrrrrrrrrrrrcG`)!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!GPqrrrrrrrrrrrrrYA!!!!!!!!!!!!!!!!)DVrrrrrrrrrrrr -rrrrrrqT2!!!!!!!!!!!!!!!!@qIrrrrrrrrrrrrrrrrrrrqr,3!!!!!!!!!!!!! -!&)lrrrrrrrrrrrrrrrrrrr@&!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$TRmrrr -rrrrrrrrrf6`!!!!!!!!!!!!!!!!Y`[rrrrrrrrrrrrrrrrrriKm!!!!!!!!!!!! -!!!"2j2rrrrrrrrrrrrrrrrrrrjNB!!!!!!!!!!!!!!!2Jrrrrrrrrrrrrrrrrrr -rpj!!!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%mEqrrrrrrrrrrrrVL3!!!!!!!! -!!!!!!!!jfrrrrrrrrrrrrrrrrrrpa`B!!!!!!!!!!!!!!!"%iIrrrrrrrrrrrrr -rrrrrrh8$!!!!!!!!!!!!!!!,H2rrrrrrrrrrrrrrrrrrpSi$!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!Hkrrrrrrrrrrrrrq'$3!!!!!!!!!!!!!!!%Adrrrrrrrrrrr -rrrrrrrLE!`!!!!!!!!!!!!!!!%(Jrrrrrrrrrrrrrrrrrrre9`!!!!!!!!!!!!! -!!!TfrrrrrrrrrrrrrrrrrrreK`-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%2frrr -rrrrrrrrrrfF!!!!!!!!!!!!!!!!!9[rrrrrrrrrrrrrrrrrrmh!#!!!!!!!!!!! -!!!!!5Z,rrrrrrrrrrrrrrrrrrpK"!!!!!!!!!!!!!!!!$Alrrrrrrrrrrrrrrrr -rrr4m!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!C[Mrrrrrrrrrrrr[8J!!!!!!!!! -!!!!!!!K[rrrrrrrrrrrrrrrrrrrZ6`%!!!!!!!!!!!!!!!"@jIrrrrrrrrrrrrr -rrrrr[#i!!!!!!!!!!!!!!!!5LIrrrrrrrrrrrrrrrrrrmQX#!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!#'qIrrrrrrrrrrrp3q!!!!!!!!!!!!!!!!%SVrrrrrrrrrrrr -rrrrrrqX`!3!!!!!!!!!!!!!!!',TrrrrrrrrrrrrrrrrrrqM(!!!!!!!!!!!!!! -!!"D8rrrrrrrrrrrrrrrrrrr[9!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+Elrrr -rrrrrrrrrZ#X!!!!!!!!!!!!!!!!FSrrrrrrrrrrrrrrrrrrrj4)!!!!!!!!!!!! -!!!!!EqcrrrrrrrrrrrrrrrrrriN,!!!!!!!!!!!!!!!!'k$rrrrrrrrrrrrrrrr -rrq`q!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`rcrrrrrrrrrrrqH'3!!!!!!!!! -!!!!!!#Hqrrrrrrrrrrrrrrrrrrh0#!!!!!!!!!!!!!!!!!#$mIrrrrrrrrrrrrr -rrrrrFJ!!!!!!!!!!!!!!!!!LX[rrrrrrrrrrrrrrrrrrk58"!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!$6rIrrrrrrrrrrriX-!!!!!!!!!!!!!!!!-GMrrrrrrrrrrrr -rrrrrqkm(!!!!!!!!!!!!!!!!!*Mhrrrrrrrrrrrrrrrrrr9I!!!!!!!!!!!!!!! -!!#V'rrrrrrrrrrrrrrrrrrrJ$3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1,qrrr -rrrrrrrrrH`%!!!!!!!!!!!!!!!!mmIrrrrrrrrrrrrrrrrriN38!!!!!!!!!!!! -!!!!!V2crrrrrrrrrrrrrrrrri%d!!!!!!!!!!!!!!!!!-GMrrrrrrrrrrrrrrrr -rrF-)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!m[lrrrrrrrrrrrpV!!!!!!!!!!! -!!!!!!%crrrrrrrrrrrrrrrrrrr9c"!!!!!!!!!!!!!!!!!#rrrrrrrrrrrrrrrr -rrrr02!!!!!!!!!!!!!!!!!!jkrrrrrrrrrrrrrrrrrrkT3B!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!$rrrrrrrrrrrrrpPm!!!!!!!!!!!!!!!!(Crrrrrrrrrrrrrr -rrrrrme3$!!!!!!!!!!!!!!!!$XVrrrrrrrrrrrrrrrrrrlJV!!!!!!!!!!!!!!! -!!%,qrrrrrrrrrrrrrrrrrrH'"3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2lrrrr -rrrrrrrrS9!!!!!!!!!!!!!!!!!q#rrrrrrrrrrrrrrrrrrr`03)!!!!!!!!!!!! -!!!!NdIrrrrrrrrrrrrrrrrrrSaN!!!!!!!!!!!!!!!!"8rrrrrrrrrrrrrrrrrr -rp'B%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!q2rrrrrrrrrrrpe+!!!!!!!!!!! -!!!!!'*lrrrrrrrrrrrrrrrrrrqXC!!!!!!!!!!!!!!!!!$hDrrrrrrrrrrrrrrr -rrrq2#!!!!!!!!!!!!!!!!!PYrrrrrrrrrrrrrrrrrrrb4`)!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!$ar[rrrrrrrrrrf%B!!!!!!!!!!!!!!!!KZIrrrrrrrrrrrrr -rrrrqe`d!!!!!!!!!!!!!!!!!9Z,rrrrrrrrrrrrrrrrrrhX!!!!!!!!!!!!!!!! -!%BMrrrrrrrrrrrrrrrrrrqmS!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1[qrrr -rrrrrrrr83`!!!!!!!!!!!!!!!#R8rrrrrrrrrrrrrrrrrrbi#`!!!!!!!!!!!!! -!!!"[krrrrrrrrrrrrrrrrrrdC`!!!!!!!!!!!!!!!!!CSIrrrrrrrrrrrrrrrrr -rj"%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!fIhrrrrrrrrrrmmq!!!!!!!!!!! -!!!!!-r$rrrrrrrrrrrrrrrrrqTN*!!!!!!!!!!!!!!!!!)Rdrrrrrrrrrrrrrrr -rrq*8!!!!!!!!!!!!!!!!!#'krrrrrrrrrrrrrrrrrrh($!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!$&r2rrrrrrrrrrbcX!!!!!!!!!!!!!!!"$rrrrrrrrrrrrrrr -rrrriH`F!!!!!!!!!!!!!!!!!Srcrrrrrrrrrrrrrrrrrcd%!!!!!!!!!!!!!!!! -!+G6rrrrrrrrrrrrrrrrrqkJ+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+rlrrr -rrrrrrrr&0J!!!!!!!!!!!!!!"PlrrrrrrrrrrrrrrrrrrrGF"3!!!!!!!!!!!!! -!!!'irrrrrrrrrrrrrrrrrrqp,J!!!!!!!!!!!!!!!!!blrrrrrrrrrrrrrrrrrr -jL!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!N[VrrrrrrrrrrmNk!!!!!!!!!!! -!!!!0Hrrrrrrrrrrrrrrrrrrrp6d#!!!!!!!!!!!!!!!!&mArrrrrrrrrrrrrrrr -rrkSE!!!!!!!!!!!!!!!!!%,rrrrrrrrrrrrrrrrrrrGT"3!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!"Xq2rrrrrrrrrrccm!!!!!!!!!!!!!!"5Brrrrrrrrrrrrrrr -rrrra)3%!!!!!!!!!!!!!!!!ad2rrrrrrrrrrrrrrrrrrP`F!!!!!!!!!!!!!!!! -'AIrrrrrrrrrrrrrrrrrrpNN$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%Efrrr -rrrrrrrr83`!!!!!!!!!!!!!!'l6rrrrrrrrrrrrrrrrrrYm6!!!!!!!!!!!!!!! -!!%cFrrrrrrrrrrrrrrrrrrq%!!!!!!!!!!!!!!!!!!elrrrrrrrrrrrrrrrrrrr -d+3%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*2$rrrrrrrrrrpT)!!!!!!!!!!! -!!!!LdIrrrrrrrrrrrrrrrrrp`!m!!!!!!!!!!!!!!!!!CZIrrrrrrrrrrrrrrrr -rp(!!!!!!!!!!!!!!!!!!&*MrrrrrrrrrrrrrrrrrrqB@!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!8brlrrrrrrrrrhN`!!!!!!!!!!!!!!#RZrrrrrrrrrrrrrrr -rrrbL$!!!!!!!!!!!!!!!!!#!m[rrrrrrrrrrrrrrrrrM@J!!!!!!!!!!!!!!!!! -EYIrrrrrrrrrrrrrrrrrqb4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!fAr2r -rrrrrrrrR8`!!!!!!!!!!!!!!1[hrrrrrrrrrrrrrrrrrqi-*!!!!!!!!!!!!!!! -!!*Vprrrrrrrrrrrrrrrrrp0&!!!!!!!!!!!!!!!!!#25rrrrrrrrrrrrrrrrrrb -U$3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"f,lrrrrrrrrrr9H!!!!!!!!!!! -!!!9ArrrrrrrrrrrrrrrrrrrkC!B!!!!!!!!!!!!!!!!#Vrrrrrrrrrrrrrrrrrr -r`M!!!!!!!!!!!!!!!!!!+ZrrrrrrrrrrrrrrrrrrqiS+!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!",rArrrrrrrrrrf`!!!!!!!!!!!!!#h6rrrrrrrrrrrrrrrr -rrrP'!`!!!!!!!!!!!!!!!"Lprrrrrrrrrrrrrrrrrrqa(!!!!!!!!!!!!!!!!!! -mr[rrrrrrrrrrrrrrrrrkE!F!!!!!!!!"$#Y$5N-S#3!!!!!!!!!!!!!!!!!A`[r -rrrrrrrrrI!%!!!!!!!!!!!!3NIrrrrrrrrrrrrrrrrrrq#J"!!!!!!!!!!!!!!! -!--Vrrrrrrrrrrrrrrrrrrk!(!!!!!!!!!!!!!!!!"PRrrrrrrrrrrrrrrrrrrrP --"!!!!3-FCDI8hq6Qj0r+M6!'!!!!!!!!!!!!!!aqr[rrrrrrrrq1$J!!!!!!!!! -!!"D`rrrrrrrrrrrrrrrrrrrN'J!!!!!!!!!!!!!!!!"*errrrrrrrrrrrrrrrrr -rM3!!!!!!!!!!!!!!!!!,Grrrrrrrrrrrrrrrrrrrq#d"!!BTMYR[qIrrrrrrrrl -eiB!9!!!!!!!!!!!!!McirrrrrrrrrkBI!!!!!!!!!!!!'mhrrrrrrrrrrrrrrrr -rrXF9!!!!!!!!!!!!!!!!!',Prrrrrrrrrrrrrrrrrr4h!!!!!!!!!!!!!!!!!"' -9rrrrrrrrrrrrrrrrrrrS'`)BIYlfrrrrrrrrrrrrrrrrp+-D!!!!!!!!!!!!(F6 -rrrrrrrrra$-!!!!!!!!!!!!Lk[rrrrrrrrrrrrrrrrrpP3i!!!!!!!!!!!!!!!! -!H[(rrrrrrrrrrrrrrrrrh&-!!!!!!!!!!!!!!!!!&l2rrrrrrrrrrrrrrrrrrVN -F3-,er[rrrrrlpI([m22lrrrrpii2!!!!!!!!!!!,F[lrrrrrrrrL5!!!!!!!!!! -!!$,lrrrrrrrrrrrrrrrrrq)i!J!!!!!!!!!!!!!!!!#6r[rrrrrrrrrrrrrrrrk -P&!!!!!!!!!!!!!!!!!!Fd[rrrrrrrrrrrrrrrrrbD@rPr2rrrrlej,0e6MNqCVR -`r[rrm%X!!!!!!!!!!!!`jIrrrrrrrreH!!!!!!!!!!!%6rcrrrrrrrrrrrrrrrr -[BJN!!!!!!!!!!!!!!!!!!kMrrrrrrrrrrrrrrrrqa$J!!!!!!!!!!!!!!!!!!#6 -ZrrrrrrrrrrrrrrrrpU'Fm2rrrrriei8Z"J3#!J)$$(VTrrrlY!!!!!!!!!!!!"@ -@rrrrrrrrri%+!!!!!!!!!!PZrIrrrrrrrrrrrrrrl(N3!!!!!!!!!!!!!!!!!!! -EZ2rrrrrrrrrrrrrrr-Y0!!!!!!!!!!!!!!!!!!!"1Icrrrrrrrrrrrrrrr'hX[2 -rrrrpjTXZ!3%!!!!!!!!!"Clirrre!!!!!!!!!!!!!8McrrrrrrrrVb3!!!!!!!! -!#R$EhGhGhGhGhGhGhG*S$3!!!!!!!!!!!!!!!!!!!#@SiGhGhGhGhGhGhGbe2`! -!!!!!!!!!!!!!!!!!!!4'fphGhGhGhGhGhGhARl$crrrrr0&N"3!!!!!!!!!!!!! -!5H,rrrm!!!!!!!!!!!!!(+ArrrrrrrrI2`!!!!!!!!!#'Mdq2Miq2Miq2Mir)!3 -!!!!!!!!!!!!!!!!!!!!!#5ir2Miq2Miq2Miq0a-!!!!!!!!!!!!!!!!!!!!!!4) -p2Miq2Miq2Miq26Z4m2rrrrZk1`%!!!!!!!!!!!!!!!!CeIrrr`!!!!!!!!!!!!! -#8I2rrrrrrrpK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'FZRrrrr -kXLF"!!!!!!!!!!!!!!!!!!V4rrrr!!!!!!!!!!!!!!!IUIrrrrrrrjJB!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&2FrrrrrE-P!3!!!!!!!!!!!!!!!!! -!'GArrrm!!!!!!!!!!!!!!!*@lrrrrrrrfcF!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!ba2rrrrl)-J)!!!!!!!!!!!!!!!!!!!!lh[rrr`!!!!!!!!!!!!! -!!"ZHrrrrrrrrC`B!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%jRjrrrrjNd -&!!!!!!!!!!!!!!!!!!!!!(AZrrlT!!!!!!!!!!!!!!!!!%MGrrrrrrq`)!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"Qj[rrrrf$$J!!!!!!!!!!!!!!!!!!!!! -,Y2hrqkX!!!!!!!!!!!!!!!!!%)Mrrrrrrr",!J!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!--$rrrrrbLJ!!!!!!!!!!!!!!!!!!!!!!%rJrrrh9`!!!!!!!!!!!!! -!!!!!0F6rrrrrrjmB!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Z%q2rrrrpU#3! -!!!!!!!!!!!!!!!!!!!!3U[[rrXmF!!!!!!!!!!!!!!!!!!!$CqRrrrrrl8%"!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4YErrrrreLd!!!!!!!!!!!!!!!!!!!!!!'V -SrrrlE!J!!!!!!!!!!!!!!!!!!!!@QrrrrrrrRK8!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!"+4rrrrrrq9&J!!!!!!!!!!!!!!!!!!!!!mbrrrrmSK!!!!!!!!!!!!!!! -!!!!!!!!jb2rrrrr`8!8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4phrrrrrrf%&!!! -!!!!!!!!!!!!!!!!!*Uhlrrrf@3B!!!!!!!!!!!!!!!!!!!!!!!*Pirrrrrr!'`! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!"53!2rrrrrrrdB!!!!!!!!!!!!!!!!!!!!GQrE -rrrqG&J!!!!!!!!!!!!!!!!!!!!!!!!!-M26rrrriH!S!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!%MMrrrrrrrq3!!!!!!!!!!!!!!!!!!!(jRerrrrcM)"!!!!!!!!!!!!!!! -!!!!!!!!!!!!FVrlrrrrP4!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!DQ[rrrrrrrrp2!!! -!!!!!!!!!!!!!!#qTp[rrrqa6"3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!fbIrrrrh -'(J%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!P6Zrrrrrrrrri84!!!!!!!!!!!!!3K3b[Rrrrr -hF`d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)e[rrrrLH$`!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!V`2rrrrrrrrrrh6X#!!!!!!!!!JBTP1VprrrrqiB@!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!0Gi2rrrr&p#J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&)IqrrrrrrrrrrrqaMi -0"`B(#4!aLpcjrrrrrrbD(`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4bjrr -rrqYQ#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!KHmIrrrrrrrrrrrrrmlDGdB'b+`Zljr[rrrrrmRb- -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Gjk2lrrq4D#!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -%4q,rrrrrrrrrrrrrrrrrr2VjqI[prrrrrrrrqD%P!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!Ckk2lrrq0H#3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!cR0rrrrrrrrrrrrrrrrrrr -rrrrrrrrrrrrrrr5A(`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!C -iirlrrq0R%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!-kb[lrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrXL"B!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9Qf[lrrqZ$'3!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'3-[ -qrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrphR80!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!92cIlrrr5J,JB!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$PMCr[rrrrrrrrrrrrrrrrrrrrr -rrrrrrrrrqFGA!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!3lY[Errrh&9a)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!#0fkrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr+U1J!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%KPHErrrrNL6))!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!P#U2Irrrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrcCIaX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!3EFrrrrrmaQ`M!`!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)YGYIprrrrrrrrrrrrrrrrrrrrrrrrrrr -rrrrfXe%$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!(3+2VrrrrmE&Q*33!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!%QDV[errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrpd(iQ!3!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'@r,r2rrrqf -dF6F'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!F`FV6[rrrrrrrrrrr -rrrrrrrrrrrrrrrrrrrrrk*e'"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#$U-i2rrrrrbaT0C*`)!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!aj@MF,arrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmUY -F&`%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!"*-S1crrrrrrZ#mPQFm&`!!!!!!!!!!!!!!!!!!!!!!!!%--Q+ -2Yq$mrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrp,9N)J-!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!F9+, -[rrrrrrrpk-khQhPG3LXF$3-!!!!##aBQ29CaPE()jI[rrrrrrrrrrrrrrrrrrrr -rrrrrrrrrrrrrlkeI*`8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"(%kFk2lrrrrrrrrmm1,9bF+ -lY,'aXE5j[mI5hZcmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrijP6)38!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!4NmIXlmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrrfa(Bk'!-!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!2+9@Eh[lrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -rrrV3KdJN$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""8U@*M8q[lqrrr -rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr[lpm,Yp4#-3!J!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'%KmmG+MApI[mrIlqrrrrrrrrrrrrrrr -rrrrrrrrqrIclqZUpLPJV'3d#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!)+%KN`9hfK`q(bp[Ihq2MjqIRjq2MhprEcj-QXL'%k(a80"J! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!) -'#Ji5&Kid6&eQG(f%JACdE&e12#3@%a!,"`)!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!"YC!!!E'3!!!!b!!!!!!! -!!!!!(!!b!!"TBfjc!!!!#Vqjrrm!!!!!!!!!!&R!: diff --git a/data/icons/manaplus.icns b/data/icons/manaplus.icns deleted file mode 100644 index 6556fccb1..000000000 Binary files a/data/icons/manaplus.icns and /dev/null differ diff --git a/data/icons/manaplus.ico b/data/icons/manaplus.ico deleted file mode 100644 index bb2dea3b8..000000000 Binary files a/data/icons/manaplus.ico and /dev/null differ diff --git a/data/icons/manaplus.png b/data/icons/manaplus.png deleted file mode 100644 index 423d1c6c2..000000000 Binary files a/data/icons/manaplus.png and /dev/null differ diff --git a/data/icons/manaplus.svg b/data/icons/manaplus.svg deleted file mode 100644 index ea9564037..000000000 --- a/data/icons/manaplus.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/data/icons/manaplus.xpm b/data/icons/manaplus.xpm deleted file mode 100644 index c8480d214..000000000 --- a/data/icons/manaplus.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char * manaplus_xpm[] = { -"32 32 3 1", -" c None", -". c #001FC6", -"+ c #001EC3", -" ........ ", -" ........ .... ", -" ..... ", -" .... ", -" .... ", -" .... ", -" .... ", -" .... ", -" ... ", -" ... ", -" ... ", -" ... ++ + ", -" ... + + +++ + ", -".... ++ ++ ++ + ", -"... +++ ++ ++ + ", -"... ++++ +++ ++ + ", -"... + ++ + ++ ++ + ", -"... + +++ + ++ ", -"... + ++ ++ ++ ", -"... ++ + ++ ", -" .. ", -" .. .....", -" .. . .", -" .. . .", -" .. .. .", -" .. .. . ", -" .. ... .. ", -" . ....... ", -" .. ....... ", -" .. ........ ", -" .... .......... ", -" .......... "}; diff --git a/data/icons/manaverse.hqx b/data/icons/manaverse.hqx new file mode 100644 index 000000000..77b9e3b98 --- /dev/null +++ b/data/icons/manaverse.hqx @@ -0,0 +1,603 @@ +(This file must be converted with BinHex 4.0) +:#'eKEQ&`E(9c"&4&@&4dG(Kd"!!!!!,3!!"YPU$i5'ph)(4[)(9cC5"dD'Pc)'P +MEfik#JT6G'9`)$%k)%0[F(NJG'KP)'PMEfiJG'mJG'KP)'0XDA"LEf&bC!TK+5" +$E'PMDb"[EL"dD'Pc)'CTE'8JCR*[E5"dD'8J4QPZC'9b#Q)T)%0SEfpcC5!R4f9 +d)%PZCQmR)'CbEfdJG'KP)#G'D@aP*b"YC@je,JTM+5"*EL"dD'8JD@jQEb"hD@j +NEhFJG'KKG#"`Eh"c)(9`,#"ME'PMDb"[EL"dD'8JD@0[EJTN+5"$D'p[Ff8J*d0 +[F(NR)'CbEfdJG'KP)#G&C'Pd*b"YC@je,JTP+5"$E'pcC5"dD'8JD@jQEb"hD@j +NEhF+#P0dCA!J-MSJ8'&cG'8JG'KP)'PMEfiJG'mJG'KP)'4PFfPbC@3JDA4PE3T +K+5"(Eb"dEb"dD'8JDA4PE5"TEL"dD'8J4QPZC'9b)(4SBA3JH@pe)(GKER3JB5" +MGA0dEfdJD@0[EJTL+5"$E'PMDb"dD'8JDA4PE5!SCQPXC5`JCQpXC'9b,#"NDA0 +V,#"PG'-T)!TL+5"$D'p[Ff8J*dGPG#"*EQC[*b"QFQpY)(4SC5!R4QPXC5FJE@9 +ZG5i+BbNJ5@iJG'KP)'PZCQmJGfPZC'ph)(4SBA3JF'p`Fb"eF#`JBfaTBfXJEfi +JG'KP)'PMEfi+C#NJ3fK[Eh0P)#G3BA0dC5FJCR*[E5"dD'8J*d9NDA3R)'ePER8 +Z#Q8T)%0XEh0P)(4SC5"TEQC[)(GTEQ4[G`S+8h4PF#!c1L!+4@jUEhNJH@peFL" +ZCAGXH5"MGA0dEfeTHQ9N)'PMEfiK#JT'Eh)JE@pbC5"dD'pbEh9RD#"NDA*PBh4 +TEfjc,#"cC@8J3A"`E'8RFb"hC@*cDA4P)'&d1JTSG(4`1Lm[GhGh,Q&`F'aP,Q0 +[E5pcGA"`Eh*d,feKBc%`-5pMGA0dEfeTHQ8[0Lm+dk`!!!%!!!"YC!!!E'3!!!! +b!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!"XB'PMER-!!'aJDA-c-J!!!C1#!)Ar!3$rJ3##ri!!J[m"!!#"ri-!JIm!!)$ +rKJ#!r`!!Q[m%!!$rr`#!r`!!J2m!!)$r"!!!rrm!J2m!!)$r!!#!r`3!!2rr!)$ +r!!#!r`!!J2m%!!$rr`#!r`!!J2m!!)$r!3!!Jrm!!)$r!!#(r`!!J2m"!!#!r`3 +!r`$rri8!"Irr!2rr!)$rJ`#$r`%!!)(r!3!!K2q#!)ErJ!##!!GaE'ecG(&[F)- +!"(efFh0lJ!!+SRq"C@)!!(YdG@'$!!GHC@9Q!(acFiB!If*PB`"dF!"ZGAGdJ)" +iGAeQBe9aF(*`E@jZE@YYEQj`I3!!DA!!FQY[!'pUF!"aE(F!!'Cc!("XFJ"bE(! +!Ffaf!!"QFJ"aE(3!FQad!(0XG!!!CR%!FQeb!(4YG!"cE(3!!'aZ!(&`G!"dFR3 +!G'aZGRKcECGbI!"SHi!!!(0Y"A)!E`"eFB8!#(0Z!(GZ!'GkIB-!"AGYE'jbG)! +!#heiI!!!GA4XCQadBi)!#(&`FA&YD@GUE)!!r`$l!(-iE@X!!!%)!!!!!!"*UYc +(TATD$3!#!!!!!"l$ePd+!!!!!M%DLe!!!$IXM`B!!!!!!!!cT1LR!#2UK`!!!!! +!!!!!!'AFR3#q`3%D(M3r$JFj23m8I`a1rcNbr[r%rI$Sa2cY+!!!TYF!Brr'!+M +rc!#Nri3!!1DD!)MrL3#2rid!Lrq+!!$`H`#Vrf-!U2pQ!+ArDJ!!j(J!dImr!-c +r33$'rd8!!+50!IAm&`$ar"S!lIaSM(!db34%,`!$4$%!!%52@3#*!*3r!!!!!!! +!!!!YV3!GL`!'LLS!!!!!!!!2cHUFV!S!!!&`DKi!!!eAiIraH!-!!!!!!"*`RV[ +DeDPS$3!!!'PX-c)!!!34KJ#0riX!N!$rL3#6r`%!ri3!Krq&!)ArJJ#%riX!Jrq +"!)6rM!#%r`%!!)2rMJ#%r`%!!),rN!!!Jrm!!)2rJ3##ri!!J[q!!)$r!3!!Jrm +!!*!!r`!!J2m"!!##r`!!N[m"!2q!!),r!!#5ri)!J[m!!)2r!!#%r`!!Jrq#!), +r!!#$r`!!K2m!!)6rJ3##r`!!Jrm!!)6r!!#%ri%!JIm!!)2r!3!!Jrm"!!#$ri) +!JIm!!)2r!3!!Jrm"!!#$ri)!JIm!!)2r!3!!Jrm"!!#$ri)!JIm!!)2r!3!!Jrm +"!!#$ri)!JIm!!)2r!3!!Jrm"!!#$ri)!JIm!!)2r!3!!Jrm"!!#(r`!!JIm!!)2 +r!3!!Jrm"!!#(r`!!Krq!!),rJ!#(r`!!K[q"!)(rJ3#$r`!!J2m"!!#"rii!JIm +"!!#!r`%!!),rM3#"r`!!JIq!!),rL`#(ri%!J[q*!)IrJ`#%ri-!LIq&!*6rK`# +5riS!M[q%!)B!!fGRCQH$CJ*RCfD!CBX!!QPTCi9Q!fGRCQD!C3"QL3!#C@GRJ@B +'Cf4MCQCRCi&QJ@8"!''%!)4Q!QKQC)8!"fCPC'9PBQ4QJJ!!Ci*Q!'@,!!9N@f4 +MC9f"!!CNCQGQCQGYM!#!C!CQC@0H!!"SJQD1!!*NC@D"C3%!!)*QN!!!"MpIC@9 +LC!#$CS%!"'pTCfGSJ!!%9@GPBf1!!!CIC'3!!'TRJ'B#C!"PKQB!D)&Q!'@!CJF +!CQ4N!!"RCi"Q!J"NCBCQ!'H%CJ0NBJ"rJ!!!D)&Q!!#4CJ"PJJ!!Ci"Q!e)!C@@ +"CJ!!K'B!!)0QJJ#!CJ0PC3"PJQB!!)4Q!!#$CJ"NJ3#"CJ&P!)*Q!QF!F)0Q!3" +HJ@B"C9q"!)&Q!!#$CJ%!!)0Q!J!!CB*QJJ#!CJ&L!)*Q!fF!!'5#CJ)!!'@"CJ" +RJJ#"CJ!!JQB#C`!!JQB#C`!!JfD#!)&Q!!#$CJ)!!'H"CJ0R!!"PJ@B!CB)!J@B +!!)*Q!QF!!)0Q!3!!J@B"C@@#!)"Q!@)!JQB#D!!!JQB#C!!!J@B-CfCRCQCN!'G +QCQ3!Ci"Q!fGM!!##CJ*P!!#$CJPRCfCQ!'PRCQCSJQD!!)*QJ!#"CJKRCQCSCQB +!CfH!CS"P!'H"!!"RJ'@"!!CNC@9QCQ3!J'B"!!#!CJ"RMJ!!Bi"Q#`!!BfCR!!" +QCQ9QCSd!!'H!CJ3!EfGQD)!!"'9QCQ9*L`!*CfCQC@9RCQCPD)%!"'GQC@CaL3! +!Ci4Q!@GPJ`!#C@CRJ@D$!!"RKQB"CfL&!!"SJQB&BfCPCQCSKfB!D)F!!@9SJQB +!CB9Q"'GQCQGRLJ!&C@9RCfCPJfB%C@GSCQD%!2m!r`$r!2m!r`$r!2m!l`"X1'e +V!!!%#!!!!!!!!!!!!!)*)f@Se[,ikFkPF6%4"`%!!!!!!!!!!!!!!!!!!!%(,Bc +IpHlL`TTmF(+&SjT3&33!!!!!!!!!!!!!!!!#''[HqHZmCL3("33%"!8'%84R,`N +"!#)!!!!!!!!!!bZKq[5r8``#!3!!!!!!!!!!!J)V,!C'YKi!!!!!!!3i[[lPKaN +!!!!!!!!!!!!!!!!!!!%,"@R,%`!!!!!$0XEqh'X%!!!!!!!!!!!!!!!!!!!!1*@ +"Y-Bf'`!!!5LkrppL!!!!!!!!!!!!!!!!!!!!!!!`R,ldmGA"!!!8PIrYHJ!!!!! +!!!!!!!!!!!!!!!!!!!!%'-'+-8)!"echq+J+!!!!!!%($3X$!!!!!3J1#`)!!!! +BdPi!!!%Ld2lC0`!53NY'6@YlG&Xd'#P3ERae9#S'!"4h+`!!#((kpC8!#@,arrc +jrrlrrp'9[IErrrrq[$`&!!)!!!!CcrlL0J!GVIrrrp1,X[6rrrrrZiV(qIrrX"N +!!!!!!%cfqlS$!#E*rrrYF`!d`2rrrq*(!&,Grrrb+J!!!!!!N[VbI!%!,ZArrmd +j!!f4rrrrV#8!&F6rrrmp!3!!!!$&rHY'!3!kr2rrYa)!"BIrrrq'$3!)[rrrrd- +$!!!!!1Mrj5%!"&,rrrqQ!!!,M[rrrfX!!"($rrrp-`!!!!!!qIrG#`!,F2rrqBm +!!"HGrrrf@3!!*-VrrqXQ!!!!!!$irY8&!"1-rrrYGJ!!*Urrrpj)!!!le2rrc4m +!!!!!!12pe!8!'URrrq&G!!!f`rrrb$J!!&6Hrrq['3!!!!!!Zr[@"3!Karrre8- +!!%IBrrqb+!!!EqRrrj%5!!!!!!"qqGm3!#RMrrr*+`!!@Hlrrj`B!!#+p2rrF$e +fN!"f(3!cm1FX!$IrrrZN#3!!EIrrqA%$!!#SrrrXTlkHIk5J!!qTl'%"(RjqELd +!!!!jJApL(3!!!&GrIEl2DLJ521J!!clTU3)%$Ji+!!!!!!F2$`F!!!!!#JaJcQ! ++!!%ai3!!$BcG1!!!!!!!!!!!!!!!!!!!!!!!&VQP'J!!"C'F!!!"*EQM#3!!!!! +!!!!!!!!!!!!!!!"elRJ0!!Kfa$!!!!!%2-"h!3!!!!!!!!!!!!!!!!!!0X[r`&4 +9TY"0"3!!!!!&4,Pd"J!!!!!!!!!!!!!!!#ZeqrrjjqE56`J!!!!!!!!&0D#B*`) +"!!!!!!!!!JC0`rVrrrlmXMF'!!!!!!!!!!!#(@fkM$d5"`B("KT6UqImrrhkdQF +D!J!!!!!!!!!!!!!"#5Gb[G@mUl(,iqhfq[MaZQ3I"`%!!!!!!!!!!!!!!!!!!JN +@2ADK`0ACd,UAC5`3"`%!!!!!!!!!D@Jc-J!!"PZ0!)rrQ3#6rj8!Prm"!!#!rid +!R[q,!)IrM3#&riN!Krq4!)2rL!#'rj3!J[q(!)ErN!!!JIm!!),rK`#&rj!!!)R +rK3#%rj)!M2q"!)6rN`#-ri!!KIq8!)[rJ!#%rjN!Krm"!!#%riB!J[q$!)2rJ!# +#ri-!K2q!!*Ir!!##ri-!K2m"!!#Hri)!K2q!!*hrJ`#%ri!!RIq$!)2rJ3#&r`! +!L2m!!)ErK3#$ri!!K[m"!!#'ri!!KIq&!)2rJ!#&ri!!K[q!!)ArK3#$ri!!KIq +!!)ArJ3#&ri8!J[q"!)ArJ!#&ri%!KIq&!),rJ3#&ri!!KIq"!)ArK3##ri%!KIq +!!)ArJ3#&ri8!J[q"!)ArJ!#&ri%!KIq&!),rJ!#&ri%!KIq"!)ArK3##ri!!KIq +!!)ArJ3#&riB!J[q!!)ArJ!#&ri%!KIq'!),rJ!#&ri!!KIq"!)ArKJ##ri!!KIq +!!)ArJ3#-r`%!!),rJ!#&ri!!KIq"!)cr!3!!J[q!!)ArJ!#&ri%!M2m"!!#$r`! +!KIq"!)ArJ3#)r`!!J2q!!),r!3!!Jrq#!)2rJ`#'ri!!J2q!!),rQ3##ri%!J2q +"!),rP`##ri%!JIq"!),rP`#"ri)!JIq#!),rP3##ri%!J[q$!),rP!#$r`!!Jrq +&!),rNJ#,riB!J[q3!!#,riJ!Jrq-!)[rL`#%riJ!M2q0!*crN!!!Q2q6!*ArQ!# +3!2q,!)d!!@GQJ@@$CJ9RCQ9NCQDC!!&PC)pQ!@GQP3!"C'H(CJCPCf9QCf4PJ@B +(CfKP!!"9BPf0!)GQ$'GRCQ9RC@CRC'9PEfL!C`CPC!"MC@9HL`!!CiCQM3!(C@C +RCf4PC@+*!!&TCi4Q!'@4!!9QC@4QC@+)!!&XCi0Q!'H8!!4LCQ9N@iF!!@4RJfB +!C*!!!!PF@e8!!'4NC@99K`!!Ci0Q!&53!!!&BQ9PC'9NJ'8#Be9rK3#%CT)!!f4 +PCQD!C3"QJ'8$Bf9MBi%!!@GRJ@B!CC-!!@4NJQ8(CQCPCQ9PCQ5!!!&LCB*Q!%k +8!!4FBQ&NBiCPJ!##CJ&RD*N!$9TPCQ9KCQ4LCQ3!!'9PJ@B!CiB!"'4SC@GMJ`! +&C'CQC@CVJ!!%A@9QC@1$!)4QJ!!!CS"RKQB$C@4UCi9Q"QF!Af9QC9q$!)0Q!f8 +!!'@ACJ9RC'9PC&@#!!&VCi&Q!'H!!*PQ!f9QC@@$!)0Q!'H!!)CQ!@9PMQB$Bf0 +LA)-!JfD"!)9Q!3"RKfB"!'5%CJ"KK3!!D)&Q!'H!!!"NK@B#!!"SK@D!!)4Q!'H +&!!"PJ@B!CB!!!'@%CS!!K@B!C)!!JfB"CfH&!!"PJ@B!A)!!!'H%CS!!K@D"!)4 +Q!'@&!)*QJ3#%CJ"RJ!!"CfH#CJ"PJ3#&CS8!J@B!CB%!!'H%CS!!!@GRJQB!CB% +!K@D&!)*QJ3#%CJ"RJ!#&CS%!K'B!Ci8!J@B!CB%!K'B!DB!!!&f%CS%!JfB"C@1 +&!)*QJ!#&CS%!!'5$CJ"MJ3#$CJ&PAB8!J@B!Ci!!K@D!!!&RCi0QJ3!!D)4QKJ# +#CS!!!'H%CS!!!@9PJfD"!!"RK'D'!!"RJ@D!!!"PJfB!CB!!K'B!CB%!K'B!CiB +!!'H"CS!!K@D!!)9QJ3#&CJ"NJ@B%CfF!!'H"CS!!K'B!CB!!K@D"!)YQ!Q8!!)& +Q!'@!!)9QJ!!!C)4QJ3#$CJ"RK@B$!!"SCi"Q!f-!@f@"CJ&RCi%!!'5%CS%!!'@ +"CJCRCQCRCPJ!J'D!!)&Q!f8!!'#!B`&QDi)!!'D"B`"QJ`!!BB"M"'GQCQGSJ!! +#C@9QJ!!"C'@!CTN!!'@!CJ"SJ3#!CS%!J@B!D*F!JQD"!!0RCfCPJ3!!BB&QP`! +!Ci"QJJ!!CB"QJJ!!CB&QP3!!Bi&QJ3!!Ci&QJ`!"CfH!CT3!JfB"!'H"CJ"RK3# +#CT)!!'@+CSB!!'5"CT!!!!"RL'B"C@5)!!&SCi"Q!&b-!!"SL@B!CBX!JQB"Cf@ +)!!&MCBTQM3!"CQ@!CJ4PC@4MCi&Q!f4NCfH(CJ*PCQL3!!!"CQ@#CJ"RMQB"C@5 +6!!4HC@CRCiaQ!fGQC'HB!!PRCfPSCfGQC@GPJ@B%C@CQCfH,!2m!r`$r!2m!r`$ +r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$E!'JiE@X!!!N)!!!!!!!!!!!!!!!!!!! +!!!81)PqD`qIjqqrL`jeX0a-,!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +'&%bPjrMlrIchmZcTk1APiX&p14)&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!a& +5[26prr[`iX+AFNj!26C&AhbSajK%&!3!!!-I(J!!!!!!!!!!!!!!!!!!!!!)0k, +arrrij,9a,3B#!J%"!3%"!3)#&8Q0I6!*!@R4Z#-!!!!!!!!!!!!!!!!!!"*Ne[r +rqq+R5!J!!!!!!!!!!!!!!!!!!!!!,QG"'V,qib`!!!!!!!!!!!!!!!!"))harrr +[YdX)!!!!!!!!!!!!!!!!!!!!!!!!!!!b4m[rd4S!!!!!!!!!!!!!!!)USI[rrpk +!'J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-YlqZ`i!!!!!!!!!!!!!!5fXrrrpce- +'!!!!!!!!!!!!!!!!!!!!!!!!!"B1"J)!11[qS3B!!!!!!!!!!!!!*kErrrc#4!% +!!!!!!!!!!!!!!!!!!!!!!!!!3EfpSi9SL2EpM`N#!!!!!!!!!!!DQ[rrrm8q!!! +!!!!!!!!!!!!!!!!!!!!!!!!!A[Rrrrhlp[rqfUQ0Ee)N!!!!!!pkprrrddX!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!-lEHlIElr[rrr[rqr2@R!!!!"P$PrrrLC!%!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!"BR2&CffIlmbFrLlrLe!!!!*-(rrrH6$3!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4[rrC,aNV39Si!!!0IrhrrmFa!!!!!!! +!!!!!#aNI(!N!!!!!!!!%&#!H%`8!!!!HeIr%%J!!!!!!!!%cirrrkR%!!!!JBha +kF@Z)TV+hY+D&4J)$*@QBVlLfVjTR(3!`jIqV#!!!!!!!!!f-rIrr[aS!!"L*kI6 +clHVkrrrrrrrjdBq"[qRrrrrrrrlTVcY)m[k3!!-!!!!!!!%Vj2rrlRS!!!"+f[r +rrrrrrr$lrrrrrrrimIrrqI,rrrrrrrkfDrAiDJ!!!!!!!!P`qrrrcbB!!!"Pq2r +rrrrqL8&0`[[rrrrrrrrB9calj[rrrrrmGQeL&J!!!!!!!",$rIrkSJ!!!!"irrr +rrrr(,3!"3HVrrrrrrr10!3!4M[rrrrrrS"d!!!!!!!!!!$2`rrrUDJ!!!!U-rrr +rrrq"$`!!#F2mrrrrrpp'!!!!9Zcrrrrra#`!!!!!!!!!!'MirrrC-!!!!"UKrrr +rrrj1!!!!"D$jrrrrrmd2!!!!3G2rrrrrdM)!!!!!!!!!!*rkrrr#"3!!!#Zhrrr +rrp`h!!!!"*IirrrrqkX!!!!!1mcrrrrrcc%!!!!!!!!!!-EmrrQP!!!!!$[-rrr +rrldT!!!!"CljrrrrmSB!!!!!30,rrrrr`LX!!!!!!!!!!0lprr1)!!!!!%[Krrr +rrk3H!!!!"DrkrrrrkQ3!!!!!5GlrrrrrXb3!!!!!!!!!!2ArrqaX!!!!!&cfrrr +rriS5!!!!"XAprrrridF!!!!!9HhrrrrrQKN!!!!!!!!!!2IrrqC6!!!!!'hrrrr +rrh%(!!!!#Gcrrrrrh#N!!!!!B[hrrrrrJ!i!!!!!!!!!!1hqrq0(!!!!#S6rrrr +rreN!!!!!(qErrrrre!d!!!!!FrrrrrrrC`-!!!!!!!!!!0lprq0&!!!!'*[rrrr +rmNJ!!!!"21Vrrrrq`3!!!!!0LIrrrrrr83!!!!!!!!!!!,Vmrq4)!!!!*l(rrrr +rfc`!!!!"@ZlrrrriSJ!!!!!FS2rrrrrR3J!!!!!!!!!!!)[jrqC5!!!!0XRrrrr +r`bm!!!!#H[2rrrrcK!!!!!!VYrrrrrr20J!!!!!!!!!!!&6hrqYS!!!!40rrrrr +rUb)!!!!#Q2IrrrrYC`!!!!!jc[rrrrqf+!`Y3NFp(3)!!"lFrr+(!!!!8rErrrr +rMa-!!!!#Yr[rrrrR3J!!!!"*j[rrrrqE4R[0lr,TS5m!!!b5r2UR!!!!Crrrrrr +Q9`)!!!!)f2rrrrZi&J!!!!"ErrrrrqbPbZZpKR1@kUi!!!4#lrr)%!!$8,@`X+p +S%J!!!!!0QV'`X*il!3!!!!"&YE#`XlMTh(XF!3!&T[-!!!!4T2rJ53!!#KB@&K! +%!!!!!!!#%aB@&3X!!!!!!!!*&aB68Y6HAJS!!!!%L[B!!!!$2q[dM3!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!PVr*b#`!!!!!)YZ-!!!!!%)lrb#B!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!4iqDiN!!!!!!&'ijB!!!!!!5[#mS3!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!$R(rh!!!!!!!#Lkf68!!!!!!!91jp3r!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!$iMmr@%!!!!!,UMcE3J!!!!!!!!0F1U`*!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!6GlrrjFB!"jQ[ID+%J!!!!!!!!!!%(cTQ4X!!!! +!!!!!!!!!!!!!!!!!!!!!!!!`ZrrrrqZpVF(Rr*)E!3!!!!!!!!!!!"4pi*iP!!! +!!!!!!!!!!!!!!!!!!!!!!#b`qrrrrrrrrrrbIKX"!!!!!!!!!!!!!!!2CG'l5!3 +!!!!!!!!!!!!!!!!!!!!'4m,irrrrrrrrrpKM%3!!!!!!!!!!!!!!!!!!#%@afT) +`"!!!!!!!!!!!!!!!!bQ1h[hrrrrrrrriSMS)!!!!!!!!!!!!!!!!!!!!!!8GEml +GSedM"J)#!J)#""T@R0McrrrrrrrqqEjB'!-!!!!!!!!!!!!!!!!!!!!!!!!!#5K +dbqAIakf6P*DNb0rVprrrrrrpr1ke@"X'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!% +*(9+CfHr[mI2eqrhpr2VipqQkH684"J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!80&cGNNDUmbmR!XTGe5b%3#3)!!!!!!!!!!!!!!!!!!'Pd-c)!!")j!!!!!,) +!Q[rG!+$re`#Qrp)!Urr0!+rrb3#crm8!R[q%!)rr`J#Brj)!L[qq!*ErQJ#)rlX +!P2qK!)ErY`#6rkB!KIqe!*,rU`#$rl-!N!$rV`#%rkm!N!$rX`##rki!N!$rY3# +#rk`!Mrqj!)IrT!#2rlX!KrqK!)rr[`#'rjm!Mrr!!)ArR`#2rm%!KIqH!)lr``# +&rjd!M[r%!)ArR!#0rmB!KIqF!)cra`#&rjX!M2r)!)ArQJ#-rli!Jrq"!)ArQJ# +-rld!NIqD!)[r[J#6rjF!Lrqr!*VrM`#-rlm!Qrq1!)[r`!#Fri`!Lrr#!*[rL`# +,rm8!QIq+!)crc!#5riS!Lrr1!)Ar!!#(riS!M2r1!)ArK3!"rrq,!)[rc`#&rj3 +!M2qA!)VrM`#*riS!KIq8!)[rL!#)r`!!NIq)!*(rKJ#&rj-!M2q(!+(rJJ#@ri- +!KIq6!)crK`$#ri%!KIq6!)[rK`$%ri!!KIq6!)[rKJ$'r`%!!)ArNJ#,riF!arm +!!)ArNJ#,riF!b2m!!)2rNJ#-riB!bIm"!!#"rj-!Lrq(!*6r!!#arjJ!M2q(!*( +rJ`#@ri)!N[qA!)[rL!#3!2q&!*6rK!#4rjF!Lrq)!*!!ri8!P2q&!*!!rjB!M2q +)!)rrK`#5riB!NIq9!)[rL3#2riF!N[q(!*!!rj8!Lrq)!*!!riJ!NIq(!*!!rj3 +!M2q)!)rrL3#3!2q)!*!!rj3!Lrq*!)rrL3#3!2q)!*!!rj3!Lrq*!)rrL3#3!2q +)!*!!rj3!Lrq*!)rrL3#3!2q)!*!!rj3!Lrq*!)rrL3#2riN!N!$rP!#+riS!Mrq +*!)rrL3#3!2q8!)VrL3#3!2q*!)rrL3#3!2q8!)VrL3#3!2q*!)rrL3#3!2q8!)V +rL3#2riS!Mrq*!*!!rj3!L[q*!)rrLJ#1riS!N!$rP!#+riN!Mrq+!)lrLJ#2rj8 +!L[q*!)rrLJ#1riS!Mrq9!)RrLJ#2riS!M[q+!)rrP3#*riN!N!$rL3#2riS!Mrq +9!)RrL3#3!2q*!)rrL3#3!2q9!)RrL3#2riS!Mrq*!*!!rj8!LIq*!)rrLJ#1riS +!N!$rP3#*riN!Mrq+!)lrLJ#2rjB!LIq*!)rrLJ#1riS!Mrq@!)RrL3#2riS!M[q ++!)rrPJ#*riJ!N!$rL3#2riS!Mrq@!)RrL!#3!2q*!)rrLJ#2rjB!LIq)!*!!riN +!Mrq*!*!!rjB!LIq)!)rrLJ#1riS!N!$rPJ#*riJ!Mrq+!)lrLJ#2rjF!LIq)!)r +rLJ#1riS!MrqA!)RrL!#2riS!M[q+!)rrP`#*riF!N!$rL3#2riS!MrqA!)RrK`# +3!2q*!)rrLJ#2ri-!KIq+!)RrKJ#3!2q*!)rrL3#3!2m"!!#-riF!LIq'!)rrLJ# +1riS!N!$r!!#1riB!LIq'!)rrLJ#1riS!Srq'!)MrKJ#2riS!M[q+!+6rK3#)riB +!Mrq+!)lrLJ#NriB!Krq&!)rrLJ#1riX!T2q'!)MrK!#1riX!MIq,!*MrK!#$riB +!L2q%!)hrM!#-ri`!PIq)!),rK`#(ri3!M2q0!)[rM3#8riN!J[q(!)Irc3#(riS +!J[q)!)Irc!#'riX!J[q)!)Irb`#'ri`!J[q*!)Irb3#'rid!J[q+!)Erb3#&rid +!Jrq+!)Ira`#&rii!Jrq,!)EraJ#'rid!K2q,!)Ira3#&rii!K2q-!)Era!#'rid +!K2q1!)Er``#'ri`!KIq1!)Er`J#'ri`!KIq3!!#'rm%!K[q,!)ErN3#'rlm!Krq ++!)ErN`#'rld!LIq'!)MrP!#'rld!L[q$!)RrPJ#'rlX!R2qB!)ErZ3#FrjS!K[q +h!*crR!#'rl8!R2qH!)ErX`#Frk!!K[qa!*crSJ#(rki!R2qN!)IrV!#ErkF!L2q +S!*crUJ#)rk3!RIqX!)RrS!#Hrkm!LIqF!*lrXJ#,rjB!S2qe!)crM`#LrlN!N[q +!!+Ir[!#mrm!!Z2r&!,,rbJ#Zrmm!U2r9!+(rh3#Crkd!XJ!&CfCPC'CRLfB!CB0 +Q!@4Nh3#!C3*QCQ@9CJ4PCQCPCpF!J'8"CQ@FCJ4PCQ9PCp)!!fTQC@@LCJ"PJ'B +!DFd!!Q4QCkPQ!QGQCXN!!'1aCJ"Ra3#BCJ9PCQCNCQb%!!*QCQL!CJ"RKfB!CF) +!P@B#Cf9ZNJ!#EfKPKfDq!!&NCj4QQJ!"C@H%CJ&PCEX!NQB"C@+K!)4Q!@KVY`# +3!'B#C@CSTJ!!DS4QY3!!CipQ!@9@U`#$CV-!N!"QV`!"C@@#CUm!!@TRMQDc!)& +Q!'HZ!!&RCieQ!&be!!4TD'GQCU`!M@B"CfDj!)"P"QC99@*NC'+N!!&RCieQZ`! +%BQ4PC'1"C3"NS3!#F'CPLQB"CfDr!!*PC'@"CJ&N2jm!!@PSM@E!!!*9C'@!CJ& +PC*m!!@0NLfB"C@6"!!*9C@@!CJ&PBTi!!'H-CJ"L``!"9@@"CJ&NB*d!!@CRLQB +"C@$%!!&FCB&Q!@4LR!!"CfH+CJ"PaJ!"B'5!CJ*PC@1F!!&NCiTQa`!!B)*Q!@4 +FQ`!"BQH+CXJ!!''"CJ*PC@DD!!"PLfDq!!4LBeKEEB)!!P9MCB"Q!@9NQJ!"B@@ +*CJ"P[3!"@Q1#CB"M!f4JAf@"CJ&PC*S!!'@+CVi!!@CPJfB&C@4PC'4PJ@B$C@* +UIjF!!'5+CVm!!@CPM@B+C@4PC'0NBf&RCP@2!!"SLQB!E,m!!@*PN@B"C@D"C3& +NBSi!LQB!CF!!!QCMCCCQ!Q9NB)`!LfE#!!&HC)&P!Q4PCC!!CJ&PBBX!!'@+CX8 +!#P9MCQ0LBf0NC'9PJ@B"C@@'CJ&NC)S!!*!!LfE-!!-r@@0PJ'B0C@4NC@4PC'9 +PCQCPC&q+!)TQ!'A1!!"YJQB-C@-!9@CMB'*MCQ4PBSS!LQB"CfI1!!&TCB&Q!@9 +MK3!"5%L,!)YQc`!"A@@!CJ*PCQ+8!!"RL@B"CfLA!!CVCQCPC@CQJ'F#C@0LM`! +$C'9QCi*Q!Q9PBSS!!@&PJ'B#C@9IP!!!CiPQ!'L)!!"NK@8%C(J!B'@1CJ"NL!! +#CfCRLQB$C@9RDBB!!@&PJ'B#C@4YN`!!CiPQ!@9LK`!!CjjQ!@9RJJ!#8Q9RN!" +Q!Q9PCS3!!@&PJ'B"C'@6!)TQ!@GRK`!!D+&Q!f*QCP'ACJ&PBi%!!MpMCB"Q!@9 +NN`#+CJ"SK`!!Ck0Q!@9NQ@B"C@@!!!&9Bi&Q!@9NN`!!CiKQ!@9QKJ!!Cm0Q!f9 +P!!#$CJ&PBj)!LfD(!-CQ#@8!A'9PCQCPC''5!!"PLQD(!!"Pa@B$D'd!BS&P!'+ +5!)TQ!@G[KJ$*CJ8!!'CQ@9@6!)PQ!@GRK`!!Cj&Q"'&T!'GRVQB!C*J!!@YRLQD +(!*!!CJ"RJ`#9CJ"NJJ!"CfH1CJ&PCCF!!'H+CSJ!N!"QK3#8CS3!N@DA!)TQ!'H +)!!"RMQB!CB8!NfB!Ci8!!'H1CJ"SPJ!!CiTQ!'5)!)pQK`#4CJ"PKJ!!CBjQ!@G +RP3!!CiTQL3!!CieQ!'@(!!"RN!"Q!'@(!!"PMQB!CC8!LfD)!!"RMQB!BBJ!MfB +"CfU(!*!!CT3!LfB!D)J!MQB!CiN!!'@2CSJ!!@GRMQD8!!"RLQD*!!&RCiaQ!'@ +*!*!!CSJ!!'H0CJ&PCC3!LfD*!)jQ!'@*!!"RMQB!CiJ!N!"QP!#,CSN!!'H0CJ" +TL3#2CJ"[L!!!CieQ!@9PP!!!CBPQ!'L*!)pQL3!!CijQL3!!D)pQP!!!CiPQLJ# +2CSN!!'H1CSN!!'@0CJ&RCj3!LQD*!!"TM@B"C@@*!!"PM@B!CBN!!'@2CT3!LQD +*!!"RM@B"C@5*!!"PMQD*!)jQ!@9PP!!!CBPQL3#1CJ"LLJ#2CSN!!'@0CJ&NC*3 +!!'@*CSN!!@GRM'B!CBS!MQD+!)jQ!@4MP!#*CJ"RL3!"CfH0CSS!!'H0CSS!MQB +!Bj8!L@B!-iN!MfD+!)eQ!'H+!)pQP3#*CSS!M@B"C@@+!)jQLJ#0CJ&PCC8!L@D +*!!"SM@B"CfH*!!"LMQD+!)eQ!@9PP3#)CJ"PL3!!CBeQ!@GRL3!!CieQ!'@*!!& +iCiaQ!@GRP3#*CSN!!@GRM'B!CiS!MQB!DiN!!@PRM'B"CfH9!)KQ!'H*!!"RMQD ++!)jQLJ#1CJ&RD*8!L@D*!)pQLJ#1CSS!!'@0CJ"LPJ#*CSN!!'H1CSS!!'H0CSS +!MfD@!)PQL3#0CJ&RCiS!M@B!CBS!MfD@!!"PL'D)!)jQ!@GRL3#2CSS!MfD@!)K +Q!'H)!!&RCieQ!'H*!)jQ!'H+!!"RMQD@!!"RKfB!CiJ!MQB"C&q*!)pQL3!"DQH +-CJ&PC*B!!'H)CSJ!MQB!CBS!MQD+!)jQ!@4KPJ#)CJ"PL!#2CSS!!'@0CSS!!@9 +PM'B!CCF!!'@)CSJ!MfD+!)eQ!'H+!!&PCBYQ!@GRP`#)CJ"PL!!!CBjQLJ#1CSS +!MfDA!!"RL'D(!!&SCiaQ!@9PL3!!9)eQ!'@+!)pQP`!"B'@(CSF!!'@0CJ&RCiN +!!'L0CJ"PLJ#0CJ&RCi-!"haSCfGPCQCNLJ!!CBGQ!'5'!)pQ!'Q*!!"RM@B!D)N +!!@4PM@B&C3!!C'YSKQD!CBF!!@9PKQB!DBB!!@GRM@D+!!"RM@D+!!&PCBaQ!QG +T!)eQ!'1'!!&ICBCQ!'H'!)eQ!@9PLJ!!CBeQLJ!"CfH0CJ&UDBjQ!'@'!)KQKJ# +2CSS!!'@-CJ"RLJ!"CfH0CJ"RN@D&!)GQ!'H'!!"RM'B"CfL+!)eQ!'Q+!!&PCBa +Q!'H)CJ&PCB9QKJ!!CBCQK3!"C@@0CSS!!(10CSX!M'B!CBCQ#'GKCfCNC@GKCi* +QKJ!"CfH&CJ"RK!!"C@@+CJ&RCiX!!'5-CSX!!'58CJ*RC@H%!)0QKJ#)CS3!LfB +"C@@-!!"RLQB!Ci`!!@KRLQB!CB4Q!'b)!!"RJ@D(!!"RK@B!CB3!!@YTKfB#CfC +MM3#+CJ"RM3#+CJ"RKQD*!!"PJ@D(!!"LKQE0!!"TK'B"D'L+!)*QL!!!CBCQc!! +!Ci0Q!@9PL`!!C)&QL!!!F)CQb`#%CJ&RDB`!JQD*!!"RK@B!D-N!!'H$CJ&RCid +!JQD+!)CQb3#$CJ&RD)d!!'1#CSS!!'@&CJ"Ua`!!CB0Q!'H1!!"PJQD,!)CQaJ# +&CJ"PM3!!C)*Q!'H,!!"RK'B"Cfh&!)9QMJ#%CS`!!'@&CX3!!'H&CSd!!'H$CSi +!KQE$!!"RJfB"CfQ-!!"RK'D1!!&MCB0Q!'I#!!"RK'B!CB`!!'@$CJ"PN!!!!@9 +PJQB"C@A"!)CQL`!!Ci9QN3#%CJ&PC,m!!'H'CSS!!'@&CT-!K'B"C'1p!!"VL'D +'!!*QBQ@&CT3!!@GPJfB!D,d!L'B"CfQ$!!*PBQ5%CJ&PC*B!!'5&CVX!M'B$CfG +PCS"PK@B!CCJ!K@B!CEN!M@B%CfGPCQ@'CJ"PQJ!!BB0Q!@9RY`!!CjTQ!'@F!!" +XJfB"Cf@e!!*TD'HBCJ"PRJ!!Di0Q!@9QX`#ECJ"PS!!"C@@%CV%!!@*PQ@B!C+) +!!@9PJfB"C@+Z!!&RCCPQ!(5N!!&RCi0Q!@9QV!!!CCTQT`!"@f@&CJ"NU!#ECJ" +PUJ#&CJ*PC@5N!!&PCjTQ!'qX!!"NKQB"C@5J!!&pCjTQ!@9PV`!!Ci9Q!Q9QD*` +!!'5ECJ&PCE)!!@4PL@D@!!&HCCYQ!QGRD,8!L@B#C@CPM`!#AQ9RR@B"C@5j!)Y +Q"Q9PCQ9MB9U!!!D#E@PPCf9RRfB!C,`!!(QjCJ&RCX!!!e*QC@@cCJ"Na3!#C@C +RVfE+!!"UJ@B!Ck*Q!Q9QCB"Qc`!#CQCRRfB!Ci"P!@CKe3!&CfGQC@9RP'B'CfC +PC@CRC0d!!@CRJQB&C@CPC@GPJ'H!CJKPCfCPCQCRCQ1Y!2m!r`$r!2m!r`$r!2m +!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m +!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m +!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m +!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m +!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!2m!r`$r!)% +!G$KYD`!!3!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!-+%"BeBSDPa0IQmrrrrI6TfmL`QAP9-4N4$!B"!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!mD2AL +ai26iqI[mrIlqrrrrr[lpr2[kqIIfiEQ0A#XA$J8!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#$L"+P0Iir2hqrrrrrrrrrrrrrrrrrrr +rrrrrrrrqrIckp-U48b89"`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!%'6Z&d[[qrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr[lmjDC +H+K3%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')e@Ulrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrqr2hrrrrrrrrrrrrrrrhLQ%mM#`!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!&+@'kqrrrrrrrrrrrrrrrrrrrrrrrrrrjl1,BcFA +"ZUqPU+k[XVc%bY(Fk26rrrrrpX*`-`i!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +"*@+rr2rrrrrrrrrrrrrrrrrrrrrrlp[)Y*4d@d%R%`B!!!!!!!!!!3iI-%YTL+H +re1Vlrrr@J6d2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'eL`q2rrrrrrrrrrrrrrrrr +rrrRLaD9i6LJ(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!K9"E*Dlh2Irfi8p#J!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!#8#ClrrrrrrrrrrrrrrrrrrrrZ5kM&`X"3!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!4T5Kl2KrY9q-!8!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#4fe2c +rrrrrrrrrrrrrrrrrmF@5A5-%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!'P@5c2I"CaB"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!K(Ur,rrrrrrrrrrrrrrrrrlE*c03S +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SjGVcPS$m +%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!GGYEprrrrrrrrrrrrrrrrl+0H*!)!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+Qql`fm1!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-k(Yrrrrrrr +rrrrrrrrrmUKC(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!5eaX*-R!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#9,$qIrrrrrrrrrrrrrrq,KG)3!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!- +hJ*T$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!"&Zh2rrrrrrrrrrrrrrrGef+J%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%56AC4!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!BLHMrrrrrrrrrrrr +rrrLH23`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!%*9*2!3a'AQ"'!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!)D2arrrrrrrrrrrrrrrHCK`"!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!"$M!pMqcfpYP(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!5HbprrrrrrrrrrrrrrqXcd*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"&VarrrrqRF%!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)Y[IRrrrrrrrrrrrrrp)) +L!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!$E2ErrrriB`!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!$,XAlrrrrrrrrrrrrrZ9Q%3%!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!D)qrrrrqe,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!bc +&qrrrrrrrrrrrrrl46JJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#D(rrrrrhc8!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)Ta2[rrrrrrrrrrrrq[MX#!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!@Z2rrrrr3(`!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!")Vrkrrrrrrrrrrrrr,Nf!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!#A0rrrrrVd5!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"QYq2r +rrrrrrrrrrrZc-3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0H(rrrrmSJX!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4QIArrrrrrrrrrrrmXLm!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!"*lIrrrrZ&"3!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!#Rl`rrrrrrrrrrrrr,Xf!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!X+4F1"`% +!!!!!!f6drrrrq'X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0Hj[rrrrr +rrrrrrrh(3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4HGVJd,LDI@4+-"dBKIVrrrr[9!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3GIrrrrrrrrrrrrre%m!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!$,@rrrrrrrrqr$Pem2Grrrrrq03$!)!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!#@kr[rrrrrrrrrrrq9Q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-YErrrrrrrr +rrrrrrrrrrrrrqmfZNhYH3#SE$`-!!!!!!!!!!!!!!!!!!!!!!!!2NrArrrrrrrr +rrrr`K3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XdIrrrrrrrrrrrrrrrrrrrrrrrrrrrIA +ZjG'iRP!!!!!!!!!!!!!!!!!!!!!!!'EPrrrrrrrrrrrrpk3B!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!q5qrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrq`b8!!!!!!!!!!!! +!!!!!!!!kb[rrrrrrrrrrrrh+,`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#0mT,h9jr$ +hrIrrrrrrrrrrrrrrrrrrrrrrrrrc83!!!!!!!!!!!!!!!!!!&Tcmrrrrrrrrrrr +rkP`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'%KiZ4Q5!QE6Gr[rrrrrprIrrrrr +rrrrrrr9H!!!!!!!!!!!!!!!!!!&SkIrrrrrrrrrrrrD6#J!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!%&)MjrrrrqD9`L+A#eqAar2rqULJ!!!!!!!!!!!! +!!!!!0F2rrrrrrrrrrrrmaL3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!(NIrrrrrP5!!$#K)G-8TNJSdj!!!!!!!!!!!!!!!!!!f(qrrrrrrrrrrrrr& +8!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"'TrrrrrpNT!!!!!!! +!!!!("`!!!!!!!!!!!!!!!!!!5YcrrrrrrrrrrrrlT`m!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!(X,rrrrqb"S!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!"ZGrrrrrrrrrrrrrZ8f!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#bP#@'0 +VEQCD6MJB!J!!!!!!!!!!!!!!!!!!!!!!!"8e6PKMDfpPANXd&!!!!!!!!!!!!!! +!!!!UfIrrrrf`%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!91crrrrrrrrrrrrkK3S +!!!!!!!!!!!!!!"-[0MBf0MBf-4m%!!j#Hkc,eplPk1VVkHALfp'qQ@)N!!!!!!! +!!!!!!!!C6iZkcpVLjHMUkqMQiGV3Y)!m#J!!!!!!!!!!!$cRrrrrqj8(!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!##RrrrrrrrrrrrrrYXP!3!!!!!!!!!!!!"'ZZ$Ji1$ +Ji1$HfXl!dH,`qrrrrrrrrrrrrrrrrrrhkYDA03%!!!!!!!)eMXrQmrlrrrrrrrr +rrrrrrrrmmH1jAa%!!!!!!!!#9ZrrrrrkH`!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +"9r6rrrrrrrrrrrrmH`S!!!!!!!!!!!!!6Frprrrrrrrrrrrrrrlrrrrrrrrrrrr +rrrrrrrrrrrrrr[ICH3i"!3)UNGhfr[rrrrrrrrrrrrrrrrrrrrrrrr[YZ$d'!!! +!!!4aq2rrrr*M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"qRrrrrrrrrrrrrrp`R!!! +!!!!!!!!!!$[$rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrl`U6` +ZJGIir[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrli9m-!!!!"SVrrrrrk%F!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!5[,rrrrrrrrrrrrpI3`!!!!!!!!!!!!GS2rrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrklqlfr[rrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrql@8+!!!2S[rrrrrH,J!!!!!!!!!!!!!!!!!!!!!!!!!!!"L +Drrrrrrrrrrrrrq-X!!!!!!!!!!!!!&$Trrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrk%N +%!!Z$rIrrrEiL!!!!!!!!!!!!!!!!!!!!!!!!!!!!11IrrrrrrrrrrrrrNa)!!!! +!!!!!!!!!DrrrrrrrrrrrrrrrrrrrrrrrrrrpqIVqrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrqrMlrrrrrrrrrrrrrrrrrrrrrrrpbKi"!#bV`Vq513!!!!!!!!! +!!!!!!!!!!!!!!!!!!!eirrrrrrrrrrrrrrG'!J!!!!!!!!!!!!U#rrrrrrrrrrr +rrrrrrrrrrrriiF+NUmhXr2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrqlGDaSEEFm[r +rrrrrrrrrrrrrrrrrrrriH`F!!"38&!B!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*-I +rrrrrrrrrrrrrZ4m!!!!!!!!!!!!!&jRrrrrrrrrrrrrrrrrrrrrrmk3k"3%!%Q$ +(qIrrrrrrrrrrrrrrrrrrrrrrrrrrrpT`'!)"!bD*irrrrrrrrrrrrrrrrrrrrrl +A'3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!01rIrrrrrrrrrrrrpU#3!!!!! +!!!!!!!!PX2rrrrrrrrrrrrrrrrrrrrkj%J!!!!!!!$@qrIrrrrrrrrrrrrrrrrr +rrrrrrrrjBJF!!!!!!!KJk2rrrrrrrrrrrrrrrrrrrr0@!`!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!%TArrrrrrrrrrrrrj63!!!!!!!!!!!!!!$6)rrrrrrrrrrr +rrrrrrrrrk@B!!!!!!!!!!%hDrrrrrrrrrrrrrrrrrrrrrrrrrm!Q!!!!!!!!!!j +qqrrrrrrrrrrrrrrrrrrrqCi'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!MfIr +rrrrrrrrrrrqR(3!!!!!!!!!!!!!!3Glrrrrrrrrrrrrrrrrrrrl%&`!!!!!!!!! +!!TVirrrrrrrrrrrrrrrrrrrrrrrrF3S!!!!!!!!!!#R2rrrrrrrrrrrrrrrrrrr +qd`i!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"%lprrrrrrrrrrrrrfS(!!!!!!! +!!!!!!!"2pIrrrrrrrrrrrrrrrrrrmB!!!!!!!!!!!!!!6q$rrrrrrrrrrrrrrrr +rrrrrrq3m!!!!!!!!!!!!$RrrrrrrrrrrrrrrrrrrrrrU+`%!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!2NIlrrrrrrrrrrrrQ2!!!!!!!!!!!!!!!!'(rrrrrrrrrrrr +rrrrrrrrK1!!!!!!!!!!!!!!5arrrrrrrrrrrrrrrrrrrrrrrUb%!!!!!!!!!!!! +!4[Errrrrrrrrrrrrrrrrrqp4!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"M0rrr +rrrrrrrrrrkiL!!!!!!!!!!!!!!!)H2rrrrrrrrrrrrrrrrrrrX8+!!!!!!!!!!! +!!!#Pq[rrrrrrrrrrrrrrrrrrrrpd#!!!!!!!!!!!!!!ZdIrrrrrrrrrrrrrrrrr +rmQJ#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"-I2rrrrrrrrrrrrrI3X!!!!!!!! +!!!!!!"54rrrrrrrrrrrrrrrrrrrdLJ!!!!!!!!!!!!!!!(M[rrrrrrrrrrrrrrr +rrrrrkdJ!!!!!!!!!!!!!!"kSrrrrrrrrrrrrrrrrrrrcG`)!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!GPqrrrrrrrrrrrrrYA!!!!!!!!!!!!!!!!)DVrrrrrrrrrrrr +rrrrrrqT2!!!!!!!!!!!!!!!!@qIrrrrrrrrrrrrrrrrrrrqr,3!!!!!!!!!!!!! +!&)lrrrrrrrrrrrrrrrrrrr@&!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$TRmrrr +rrrrrrrrrf6`!!!!!!!!!!!!!!!!Y`[rrrrrrrrrrrrrrrrrriKm!!!!!!!!!!!! +!!!"2j2rrrrrrrrrrrrrrrrrrrjNB!!!!!!!!!!!!!!!2Jrrrrrrrrrrrrrrrrrr +rpj!!!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%mEqrrrrrrrrrrrrVL3!!!!!!!! +!!!!!!!!jfrrrrrrrrrrrrrrrrrrpa`B!!!!!!!!!!!!!!!"%iIrrrrrrrrrrrrr +rrrrrrh8$!!!!!!!!!!!!!!!,H2rrrrrrrrrrrrrrrrrrpSi$!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!Hkrrrrrrrrrrrrrq'$3!!!!!!!!!!!!!!!%Adrrrrrrrrrrr +rrrrrrrLE!`!!!!!!!!!!!!!!!%(Jrrrrrrrrrrrrrrrrrrre9`!!!!!!!!!!!!! +!!!TfrrrrrrrrrrrrrrrrrrreK`-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%2frrr +rrrrrrrrrrfF!!!!!!!!!!!!!!!!!9[rrrrrrrrrrrrrrrrrrmh!#!!!!!!!!!!! +!!!!!5Z,rrrrrrrrrrrrrrrrrrpK"!!!!!!!!!!!!!!!!$Alrrrrrrrrrrrrrrrr +rrr4m!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!C[Mrrrrrrrrrrrr[8J!!!!!!!!! +!!!!!!!K[rrrrrrrrrrrrrrrrrrrZ6`%!!!!!!!!!!!!!!!"@jIrrrrrrrrrrrrr +rrrrr[#i!!!!!!!!!!!!!!!!5LIrrrrrrrrrrrrrrrrrrmQX#!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!#'qIrrrrrrrrrrrp3q!!!!!!!!!!!!!!!!%SVrrrrrrrrrrrr +rrrrrrqX`!3!!!!!!!!!!!!!!!',TrrrrrrrrrrrrrrrrrrqM(!!!!!!!!!!!!!! +!!"D8rrrrrrrrrrrrrrrrrrr[9!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+Elrrr +rrrrrrrrrZ#X!!!!!!!!!!!!!!!!FSrrrrrrrrrrrrrrrrrrrj4)!!!!!!!!!!!! +!!!!!EqcrrrrrrrrrrrrrrrrrriN,!!!!!!!!!!!!!!!!'k$rrrrrrrrrrrrrrrr +rrq`q!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`rcrrrrrrrrrrrqH'3!!!!!!!!! +!!!!!!#Hqrrrrrrrrrrrrrrrrrrh0#!!!!!!!!!!!!!!!!!#$mIrrrrrrrrrrrrr +rrrrrFJ!!!!!!!!!!!!!!!!!LX[rrrrrrrrrrrrrrrrrrk58"!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!$6rIrrrrrrrrrrriX-!!!!!!!!!!!!!!!!-GMrrrrrrrrrrrr +rrrrrqkm(!!!!!!!!!!!!!!!!!*Mhrrrrrrrrrrrrrrrrrr9I!!!!!!!!!!!!!!! +!!#V'rrrrrrrrrrrrrrrrrrrJ$3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1,qrrr +rrrrrrrrrH`%!!!!!!!!!!!!!!!!mmIrrrrrrrrrrrrrrrrriN38!!!!!!!!!!!! +!!!!!V2crrrrrrrrrrrrrrrrri%d!!!!!!!!!!!!!!!!!-GMrrrrrrrrrrrrrrrr +rrF-)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!m[lrrrrrrrrrrrpV!!!!!!!!!!! +!!!!!!%crrrrrrrrrrrrrrrrrrr9c"!!!!!!!!!!!!!!!!!#rrrrrrrrrrrrrrrr +rrrr02!!!!!!!!!!!!!!!!!!jkrrrrrrrrrrrrrrrrrrkT3B!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!$rrrrrrrrrrrrrpPm!!!!!!!!!!!!!!!!(Crrrrrrrrrrrrrr +rrrrrme3$!!!!!!!!!!!!!!!!$XVrrrrrrrrrrrrrrrrrrlJV!!!!!!!!!!!!!!! +!!%,qrrrrrrrrrrrrrrrrrrH'"3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2lrrrr +rrrrrrrrS9!!!!!!!!!!!!!!!!!q#rrrrrrrrrrrrrrrrrrr`03)!!!!!!!!!!!! +!!!!NdIrrrrrrrrrrrrrrrrrrSaN!!!!!!!!!!!!!!!!"8rrrrrrrrrrrrrrrrrr +rp'B%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!q2rrrrrrrrrrrpe+!!!!!!!!!!! +!!!!!'*lrrrrrrrrrrrrrrrrrrqXC!!!!!!!!!!!!!!!!!$hDrrrrrrrrrrrrrrr +rrrq2#!!!!!!!!!!!!!!!!!PYrrrrrrrrrrrrrrrrrrrb4`)!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!$ar[rrrrrrrrrrf%B!!!!!!!!!!!!!!!!KZIrrrrrrrrrrrrr +rrrrqe`d!!!!!!!!!!!!!!!!!9Z,rrrrrrrrrrrrrrrrrrhX!!!!!!!!!!!!!!!! +!%BMrrrrrrrrrrrrrrrrrrqmS!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1[qrrr +rrrrrrrr83`!!!!!!!!!!!!!!!#R8rrrrrrrrrrrrrrrrrrbi#`!!!!!!!!!!!!! +!!!"[krrrrrrrrrrrrrrrrrrdC`!!!!!!!!!!!!!!!!!CSIrrrrrrrrrrrrrrrrr +rj"%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!fIhrrrrrrrrrrmmq!!!!!!!!!!! +!!!!!-r$rrrrrrrrrrrrrrrrrqTN*!!!!!!!!!!!!!!!!!)Rdrrrrrrrrrrrrrrr +rrq*8!!!!!!!!!!!!!!!!!#'krrrrrrrrrrrrrrrrrrh($!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!$&r2rrrrrrrrrrbcX!!!!!!!!!!!!!!!"$rrrrrrrrrrrrrrr +rrrriH`F!!!!!!!!!!!!!!!!!Srcrrrrrrrrrrrrrrrrrcd%!!!!!!!!!!!!!!!! +!+G6rrrrrrrrrrrrrrrrrqkJ+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+rlrrr +rrrrrrrr&0J!!!!!!!!!!!!!!"PlrrrrrrrrrrrrrrrrrrrGF"3!!!!!!!!!!!!! +!!!'irrrrrrrrrrrrrrrrrrqp,J!!!!!!!!!!!!!!!!!blrrrrrrrrrrrrrrrrrr +jL!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!N[VrrrrrrrrrrmNk!!!!!!!!!!! +!!!!0Hrrrrrrrrrrrrrrrrrrrp6d#!!!!!!!!!!!!!!!!&mArrrrrrrrrrrrrrrr +rrkSE!!!!!!!!!!!!!!!!!%,rrrrrrrrrrrrrrrrrrrGT"3!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!"Xq2rrrrrrrrrrccm!!!!!!!!!!!!!!"5Brrrrrrrrrrrrrrr +rrrra)3%!!!!!!!!!!!!!!!!ad2rrrrrrrrrrrrrrrrrrP`F!!!!!!!!!!!!!!!! +'AIrrrrrrrrrrrrrrrrrrpNN$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%Efrrr +rrrrrrrr83`!!!!!!!!!!!!!!'l6rrrrrrrrrrrrrrrrrrYm6!!!!!!!!!!!!!!! +!!%cFrrrrrrrrrrrrrrrrrrq%!!!!!!!!!!!!!!!!!!elrrrrrrrrrrrrrrrrrrr +d+3%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*2$rrrrrrrrrrpT)!!!!!!!!!!! +!!!!LdIrrrrrrrrrrrrrrrrrp`!m!!!!!!!!!!!!!!!!!CZIrrrrrrrrrrrrrrrr +rp(!!!!!!!!!!!!!!!!!!&*MrrrrrrrrrrrrrrrrrrqB@!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!8brlrrrrrrrrrhN`!!!!!!!!!!!!!!#RZrrrrrrrrrrrrrrr +rrrbL$!!!!!!!!!!!!!!!!!#!m[rrrrrrrrrrrrrrrrrM@J!!!!!!!!!!!!!!!!! +EYIrrrrrrrrrrrrrrrrrqb4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!fAr2r +rrrrrrrrR8`!!!!!!!!!!!!!!1[hrrrrrrrrrrrrrrrrrqi-*!!!!!!!!!!!!!!! +!!*Vprrrrrrrrrrrrrrrrrp0&!!!!!!!!!!!!!!!!!#25rrrrrrrrrrrrrrrrrrb +U$3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"f,lrrrrrrrrrr9H!!!!!!!!!!! +!!!9ArrrrrrrrrrrrrrrrrrrkC!B!!!!!!!!!!!!!!!!#Vrrrrrrrrrrrrrrrrrr +r`M!!!!!!!!!!!!!!!!!!+ZrrrrrrrrrrrrrrrrrrqiS+!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!",rArrrrrrrrrrf`!!!!!!!!!!!!!#h6rrrrrrrrrrrrrrrr +rrrP'!`!!!!!!!!!!!!!!!"Lprrrrrrrrrrrrrrrrrrqa(!!!!!!!!!!!!!!!!!! +mr[rrrrrrrrrrrrrrrrrkE!F!!!!!!!!"$#Y$5N-S#3!!!!!!!!!!!!!!!!!A`[r +rrrrrrrrrI!%!!!!!!!!!!!!3NIrrrrrrrrrrrrrrrrrrq#J"!!!!!!!!!!!!!!! +!--Vrrrrrrrrrrrrrrrrrrk!(!!!!!!!!!!!!!!!!"PRrrrrrrrrrrrrrrrrrrrP +-"!!!!3-FCDI8hq6Qj0r+M6!'!!!!!!!!!!!!!!aqr[rrrrrrrrq1$J!!!!!!!!! +!!"D`rrrrrrrrrrrrrrrrrrrN'J!!!!!!!!!!!!!!!!"*errrrrrrrrrrrrrrrrr +rM3!!!!!!!!!!!!!!!!!,Grrrrrrrrrrrrrrrrrrrq#d"!!BTMYR[qIrrrrrrrrl +eiB!9!!!!!!!!!!!!!McirrrrrrrrrkBI!!!!!!!!!!!!'mhrrrrrrrrrrrrrrrr +rrXF9!!!!!!!!!!!!!!!!!',Prrrrrrrrrrrrrrrrrr4h!!!!!!!!!!!!!!!!!"' +9rrrrrrrrrrrrrrrrrrrS'`)BIYlfrrrrrrrrrrrrrrrrp+-D!!!!!!!!!!!!(F6 +rrrrrrrrra$-!!!!!!!!!!!!Lk[rrrrrrrrrrrrrrrrrpP3i!!!!!!!!!!!!!!!! +!H[(rrrrrrrrrrrrrrrrrh&-!!!!!!!!!!!!!!!!!&l2rrrrrrrrrrrrrrrrrrVN +F3-,er[rrrrrlpI([m22lrrrrpii2!!!!!!!!!!!,F[lrrrrrrrrL5!!!!!!!!!! +!!$,lrrrrrrrrrrrrrrrrrq)i!J!!!!!!!!!!!!!!!!#6r[rrrrrrrrrrrrrrrrk +P&!!!!!!!!!!!!!!!!!!Fd[rrrrrrrrrrrrrrrrrbD@rPr2rrrrlej,0e6MNqCVR +`r[rrm%X!!!!!!!!!!!!`jIrrrrrrrreH!!!!!!!!!!!%6rcrrrrrrrrrrrrrrrr +[BJN!!!!!!!!!!!!!!!!!!kMrrrrrrrrrrrrrrrrqa$J!!!!!!!!!!!!!!!!!!#6 +ZrrrrrrrrrrrrrrrrpU'Fm2rrrrriei8Z"J3#!J)$$(VTrrrlY!!!!!!!!!!!!"@ +@rrrrrrrrri%+!!!!!!!!!!PZrIrrrrrrrrrrrrrrl(N3!!!!!!!!!!!!!!!!!!! +EZ2rrrrrrrrrrrrrrr-Y0!!!!!!!!!!!!!!!!!!!"1Icrrrrrrrrrrrrrrr'hX[2 +rrrrpjTXZ!3%!!!!!!!!!"Clirrre!!!!!!!!!!!!!8McrrrrrrrrVb3!!!!!!!! +!#R$EhGhGhGhGhGhGhG*S$3!!!!!!!!!!!!!!!!!!!#@SiGhGhGhGhGhGhGbe2`! +!!!!!!!!!!!!!!!!!!!4'fphGhGhGhGhGhGhARl$crrrrr0&N"3!!!!!!!!!!!!! +!5H,rrrm!!!!!!!!!!!!!(+ArrrrrrrrI2`!!!!!!!!!#'Mdq2Miq2Miq2Mir)!3 +!!!!!!!!!!!!!!!!!!!!!#5ir2Miq2Miq2Miq0a-!!!!!!!!!!!!!!!!!!!!!!4) +p2Miq2Miq2Miq26Z4m2rrrrZk1`%!!!!!!!!!!!!!!!!CeIrrr`!!!!!!!!!!!!! +#8I2rrrrrrrpK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'FZRrrrr +kXLF"!!!!!!!!!!!!!!!!!!V4rrrr!!!!!!!!!!!!!!!IUIrrrrrrrjJB!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&2FrrrrrE-P!3!!!!!!!!!!!!!!!!! +!'GArrrm!!!!!!!!!!!!!!!*@lrrrrrrrfcF!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!ba2rrrrl)-J)!!!!!!!!!!!!!!!!!!!!lh[rrr`!!!!!!!!!!!!! +!!"ZHrrrrrrrrC`B!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%jRjrrrrjNd +&!!!!!!!!!!!!!!!!!!!!!(AZrrlT!!!!!!!!!!!!!!!!!%MGrrrrrrq`)!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"Qj[rrrrf$$J!!!!!!!!!!!!!!!!!!!!! +,Y2hrqkX!!!!!!!!!!!!!!!!!%)Mrrrrrrr",!J!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!--$rrrrrbLJ!!!!!!!!!!!!!!!!!!!!!!%rJrrrh9`!!!!!!!!!!!!! +!!!!!0F6rrrrrrjmB!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Z%q2rrrrpU#3! +!!!!!!!!!!!!!!!!!!!!3U[[rrXmF!!!!!!!!!!!!!!!!!!!$CqRrrrrrl8%"!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4YErrrrreLd!!!!!!!!!!!!!!!!!!!!!!'V +SrrrlE!J!!!!!!!!!!!!!!!!!!!!@QrrrrrrrRK8!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!"+4rrrrrrq9&J!!!!!!!!!!!!!!!!!!!!!mbrrrrmSK!!!!!!!!!!!!!!! +!!!!!!!!jb2rrrrr`8!8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4phrrrrrrf%&!!! +!!!!!!!!!!!!!!!!!*Uhlrrrf@3B!!!!!!!!!!!!!!!!!!!!!!!*Pirrrrrr!'`! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!"53!2rrrrrrrdB!!!!!!!!!!!!!!!!!!!!GQrE +rrrqG&J!!!!!!!!!!!!!!!!!!!!!!!!!-M26rrrriH!S!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!%MMrrrrrrrq3!!!!!!!!!!!!!!!!!!!(jRerrrrcM)"!!!!!!!!!!!!!!! +!!!!!!!!!!!!FVrlrrrrP4!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!DQ[rrrrrrrrp2!!! +!!!!!!!!!!!!!!#qTp[rrrqa6"3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!fbIrrrrh +'(J%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!P6Zrrrrrrrrri84!!!!!!!!!!!!!3K3b[Rrrrr +hF`d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*)e[rrrrLH$`!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!V`2rrrrrrrrrrh6X#!!!!!!!!!JBTP1VprrrrqiB@!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!0Gi2rrrr&p#J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&)IqrrrrrrrrrrrqaMi +0"`B(#4!aLpcjrrrrrrbD(`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4bjrr +rrqYQ#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!KHmIrrrrrrrrrrrrrmlDGdB'b+`Zljr[rrrrrmRb- +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Gjk2lrrq4D#!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +%4q,rrrrrrrrrrrrrrrrrr2VjqI[prrrrrrrrqD%P!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!Ckk2lrrq0H#3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!cR0rrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrr5A(`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!C +iirlrrq0R%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!-kb[lrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrXL"B!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9Qf[lrrqZ$'3!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'3-[ +qrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrphR80!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!92cIlrrr5J,JB!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$PMCr[rrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrqFGA!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!3lY[Errrh&9a)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!#0fkrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr+U1J!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%KPHErrrrNL6))!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!P#U2Irrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrcCIaX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!3EFrrrrrmaQ`M!`!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)YGYIprrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrfXe%$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!(3+2VrrrrmE&Q*33!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!%QDV[errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrpd(iQ!3!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'@r,r2rrrqf +dF6F'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!F`FV6[rrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrk*e'"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#$U-i2rrrrrbaT0C*`)!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!aj@MF,arrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmUY +F&`%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!"*-S1crrrrrrZ#mPQFm&`!!!!!!!!!!!!!!!!!!!!!!!!%--Q+ +2Yq$mrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrp,9N)J-!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!F9+, +[rrrrrrrpk-khQhPG3LXF$3-!!!!##aBQ29CaPE()jI[rrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrlkeI*`8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"(%kFk2lrrrrrrrrmm1,9bF+ +lY,'aXE5j[mI5hZcmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrijP6)38!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!4NmIXlmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrfa(Bk'!-!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!2+9@Eh[lrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrV3KdJN$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""8U@*M8q[lqrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr[lpm,Yp4#-3!J!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'%KmmG+MApI[mrIlqrrrrrrrrrrrrrrr +rrrrrrrrqrIclqZUpLPJV'3d#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!)+%KN`9hfK`q(bp[Ihq2MjqIRjq2MhprEcj-QXL'%k(a80"J! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!) +'#Ji5&Kid6&eQG(f%JACdE&e12#3@%a!,"`)!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!"YC!!!E'3!!!!b!!!!!!! +!!!!!(!!b!!"TBfjc!!!!#Vqjrrm!!!!!!!!!!&R!: diff --git a/data/icons/manaverse.icns b/data/icons/manaverse.icns new file mode 100644 index 000000000..6556fccb1 Binary files /dev/null and b/data/icons/manaverse.icns differ diff --git a/data/icons/manaverse.ico b/data/icons/manaverse.ico new file mode 100644 index 000000000..bb2dea3b8 Binary files /dev/null and b/data/icons/manaverse.ico differ diff --git a/data/icons/manaverse.png b/data/icons/manaverse.png new file mode 100644 index 000000000..423d1c6c2 Binary files /dev/null and b/data/icons/manaverse.png differ diff --git a/data/icons/manaverse.svg b/data/icons/manaverse.svg new file mode 100644 index 000000000..ea9564037 --- /dev/null +++ b/data/icons/manaverse.svg @@ -0,0 +1,89 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/data/icons/manaverse.xpm b/data/icons/manaverse.xpm new file mode 100644 index 000000000..80476fab4 --- /dev/null +++ b/data/icons/manaverse.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char * manaverse_xpm[] = { +"32 32 3 1", +" c None", +". c #001FC6", +"+ c #001EC3", +" ........ ", +" ........ .... ", +" ..... ", +" .... ", +" .... ", +" .... ", +" .... ", +" .... ", +" ... ", +" ... ", +" ... ", +" ... ++ + ", +" ... + + +++ + ", +".... ++ ++ ++ + ", +"... +++ ++ ++ + ", +"... ++++ +++ ++ + ", +"... + ++ + ++ ++ + ", +"... + +++ + ++ ", +"... + ++ ++ ++ ", +"... ++ + ++ ", +" .. ", +" .. .....", +" .. . .", +" .. . .", +" .. .. .", +" .. .. . ", +" .. ... .. ", +" . ....... ", +" .. ....... ", +" .. ........ ", +" .... .......... ", +" .......... "}; diff --git a/data/tmw/Makefile.am b/data/tmw/Makefile.am index f8135b488..bb02dd7bb 100644 --- a/data/tmw/Makefile.am +++ b/data/tmw/Makefile.am @@ -6,14 +6,14 @@ branding: mkdir -p "$(DESTDIR)$(datarootdir)/icons" mkdir -p "$(DESTDIR)$(desktopdir)" cp tmw.desktop "$(DESTDIR)$(desktopdir)" - cp tmw.manaplus "$(DESTDIR)$(pkgdatadir)/data/tmw" + cp tmw.manverse "$(DESTDIR)$(pkgdatadir)/data/tmw" cp icons/tmw-client.png "$(DESTDIR)$(pkgdatadir)/data/tmw/icons/tmw.png" cp icons/tmw-client.png "$(DESTDIR)$(datarootdir)/icons/tmw.png" cp -r images "$(DESTDIR)$(pkgdatadir)/data/tmw" EXTRA_DIST = tmw.desktop.in \ tmw.in \ - tmw.manaplus \ + tmw.mana \ icons/tmw-client.ico \ icons/tmw-client.png \ icons/tmw-client.xpm \ diff --git a/data/tmw/tmw.desktop.in b/data/tmw/tmw.desktop.in index 358877af0..5900f4d0d 100644 --- a/data/tmw/tmw.desktop.in +++ b/data/tmw/tmw.desktop.in @@ -8,7 +8,7 @@ Comment[de]=ein Online Fantasy Spiel Comment[it]=Un gioco fantasy online Comment[nl]=Een online role playing game Comment[sv]=Ett fantasyrollspel online -Exec=manaplus @datadir@/manaplus/data/tmw/tmw.manaplus +Exec=manaverse @datadir@/manaverse/data/tmw/tmw.mana StartupNotify=false Terminal=false Type=Application diff --git a/data/tmw/tmw.in b/data/tmw/tmw.in index d726db2c3..4e03b2b3f 100755 --- a/data/tmw/tmw.in +++ b/data/tmw/tmw.in @@ -1,2 +1,2 @@ #!/bin/sh -exec manaplus @datadir@/manaplus/data/tmw/tmw.manaplus "$@" +exec manaverse @datadir@/manaverse/data/tmw/tmw.mana "$@" diff --git a/data/tmw/tmw.mana b/data/tmw/tmw.mana new file mode 100644 index 000000000..c4b66237e --- /dev/null +++ b/data/tmw/tmw.mana @@ -0,0 +1,18 @@ + + + diff --git a/data/tmw/tmw.manaplus b/data/tmw/tmw.manaplus deleted file mode 100644 index c4b66237e..000000000 --- a/data/tmw/tmw.manaplus +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/docs/Makefile.am b/docs/Makefile.am index 91cfe1242..abfde8515 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1,4 +1,4 @@ -man6_MANS = manaplus.6 \ +man6_MANS = manaverse.6 \ manaplustest.6 EXTRA_DIST = $(man6_MANS) \ @@ -8,4 +8,4 @@ EXTRA_DIST = $(man6_MANS) \ SOURCE/Doxyfile \ sounddev.txt \ clientupdates.txt \ - example.manaplus + example.mana diff --git a/docs/example.mana b/docs/example.mana new file mode 100644 index 000000000..93f8b1f42 --- /dev/null +++ b/docs/example.mana @@ -0,0 +1,24 @@ + + + + + + diff --git a/docs/example.manaplus b/docs/example.manaplus deleted file mode 100644 index 2a580463f..000000000 --- a/docs/example.manaplus +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - diff --git a/docs/manaplus.6 b/docs/manaplus.6 deleted file mode 100644 index 051d054e8..000000000 --- a/docs/manaplus.6 +++ /dev/null @@ -1,107 +0,0 @@ -.TH "ManaPlus" "6" -.SH "NAME" -manaplus \- ManaPlus: A 2D MMORPG client -.SH "SYNOPSIS" -\fBmanaplus\fR -.SH "DESCRIPTION" -This manual page documents the -\fBmanaplus\fR in-game -commands. -\fBmanaplus\fR is a great online game based upon the Seiken Densetsu Series. -It has its own universe and its own character management system which will -give you the opportunity to play in a 2D heroic-fantasy world forever. -.SH "BINARY PARAMETERS" -This program follows the usual GNU command line syntax, with long -options starting with two dashes (`-'). -A summary of options is included below. -.TP -.B \-l, \-\-log\-file -Log file to use. -.TP -.B \-a, \-\-chat\-log\-dir -Chat log directory to use. -.TP -.B \-v, \-\-version -Show version of the program. -.TP -.B \-h, \-\-help -Show summary of options. -.TP -.B \-C, \-\-config\-dir -Configuration directory to use. -.TP -.B \-U, \-\-username -Login with this username. -.TP -.B \-P, \-\-password -Login with this password. -.TP -.B \-c, \-\-character -Login with this character. -.TP -.B \-s, \-\-server -Login server name or IP. -.TP -.B \-y, \-\-server-type -Login server type. -.TP -.B \-p, \-\-port -Login server port. -.TP -.B \-H, \-\-update\-host -Use this update host. -.TP -.B \-D, \-\-default -Choose default character server and character. -.TP -.B \-u, \-\-skip\-update -Skip the update process. -.TP -.B \-d, \-\-data -Directory to load game data from. -.TP -.B \-L, \-\-localdata\-dir -Directory to use as local data directory. -.TP -.B \-\-screenshot\-dir -Directory to store screenshots. -.TP -.B \-\-safemode -Start game in safe mode. -.TP -.B \-\-no-opengl -Disable OpenGL for this session. -.SH "COMMON KEYS" -.TP -.B Arrow Keys: -Move your character around. -.TP -.B Left Ctrl: -Make your character attack. -.TP -.B Key A: -Target nearest monster. -.TP -.B Key G: -Get items on the ground or in a chest. -.TP -.B Alt + 1...9: -Shows an emoticon above your character. -.TP -.B Alt + I: -Shows / Hide inventory window. -.TP -.B Alt + K: -Shows / Hide skills window. -.TP -.B Alt + E: -Shows / Hide equipment window. -.TP -.B Alt + C: -Shows configuration window. -.SH "AUTHOR" -This manual page was written by Patrick Matth\[:a]i -for the Mana project. -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU General Public License, version 2 or any -later version published by the Free Software Foundation. diff --git a/docs/manaverse.6 b/docs/manaverse.6 new file mode 100644 index 000000000..0b63653b6 --- /dev/null +++ b/docs/manaverse.6 @@ -0,0 +1,107 @@ +.TH "ManaVerse" "6" +.SH "NAME" +manaverse \- ManaVerse: A 2D MMORPG client +.SH "SYNOPSIS" +\fBmanaverse\fR +.SH "DESCRIPTION" +This manual page documents the +\fBmanaverse\fR in-game +commands. +\fBmanaverse\fR is a great online game based upon the Seiken Densetsu Series. +It has its own universe and its own character management system which will +give you the opportunity to play in a 2D heroic-fantasy world forever. +.SH "BINARY PARAMETERS" +This program follows the usual GNU command line syntax, with long +options starting with two dashes (`-'). +A summary of options is included below. +.TP +.B \-l, \-\-log\-file +Log file to use. +.TP +.B \-a, \-\-chat\-log\-dir +Chat log directory to use. +.TP +.B \-v, \-\-version +Show version of the program. +.TP +.B \-h, \-\-help +Show summary of options. +.TP +.B \-C, \-\-config\-dir +Configuration directory to use. +.TP +.B \-U, \-\-username +Login with this username. +.TP +.B \-P, \-\-password +Login with this password. +.TP +.B \-c, \-\-character +Login with this character. +.TP +.B \-s, \-\-server +Login server name or IP. +.TP +.B \-y, \-\-server-type +Login server type. +.TP +.B \-p, \-\-port +Login server port. +.TP +.B \-H, \-\-update\-host +Use this update host. +.TP +.B \-D, \-\-default +Choose default character server and character. +.TP +.B \-u, \-\-skip\-update +Skip the update process. +.TP +.B \-d, \-\-data +Directory to load game data from. +.TP +.B \-L, \-\-localdata\-dir +Directory to use as local data directory. +.TP +.B \-\-screenshot\-dir +Directory to store screenshots. +.TP +.B \-\-safemode +Start game in safe mode. +.TP +.B \-\-no-opengl +Disable OpenGL for this session. +.SH "COMMON KEYS" +.TP +.B Arrow Keys: +Move your character around. +.TP +.B Left Ctrl: +Make your character attack. +.TP +.B Key A: +Target nearest monster. +.TP +.B Key G: +Get items on the ground or in a chest. +.TP +.B Alt + 1...9: +Shows an emoticon above your character. +.TP +.B Alt + I: +Shows / Hide inventory window. +.TP +.B Alt + K: +Shows / Hide skills window. +.TP +.B Alt + E: +Shows / Hide equipment window. +.TP +.B Alt + C: +Shows configuration window. +.SH "AUTHOR" +This manual page was written by Patrick Matth\[:a]i +for the Mana project. +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU General Public License, version 2 or any +later version published by the Free Software Foundation. diff --git a/manaplus.desktop b/manaplus.desktop deleted file mode 100644 index d225ab3b5..000000000 --- a/manaplus.desktop +++ /dev/null @@ -1,25 +0,0 @@ - -[Desktop Entry] -Version=1.0 -Name=ManaPlus -Comment=A 2D MMORPG client -Exec=manaplus -StartupNotify=false -Terminal=false -Type=Application -Icon=manaplus -Categories=Game;AdventureGame; -Keywords=MMORPG;game;RPG;adventure;multiplayer;online; - -# Translations -Comment[vls]=Nen 2D MMORPG client -Comment[ru]=Клиент к 2D MMORPG игре -Comment[it]=Un gioco fantasy online -Comment[ja]=2DのMMORPGクライアント -Comment[cs]=2D MMORPG klient -Comment[nl_BE]=Een 2D MMORPG client -Comment[de]=ein 2D MMORG Client -Comment[sv_SE]=Ett fantasyrollspel online -Comment[es]=Un cliente MMORPG 2D -Comment[fr]=Un jeu en ligne dans un univers fantastique -Comment[nl]=Een online role playing game diff --git a/manaplus.menu b/manaplus.menu deleted file mode 100644 index cc17fbeb0..000000000 --- a/manaplus.menu +++ /dev/null @@ -1,4 +0,0 @@ -?package(manaplus):needs="X11" section="Games/Adventure"\ - title="ManaPlus"\ - description="ManaPlus is a 2D MMORPG client."\ - command="/usr/games/manaplus" icon="/usr/share/pixmaps/manaplus.xpm" diff --git a/manaplus.metainfo.xml b/manaplus.metainfo.xml deleted file mode 100644 index 1e5f5eead..000000000 --- a/manaplus.metainfo.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - manaplus.desktop - CC0-1.0 - GPL-2.0 - The Mana Plus Client - Extended client for The Mana World and similar servers - -

- ManaPlus is extended client for Evol Online, The Mana World and similar servers - based on eAthena fork. As a 2D style game, Evol Online aims to create a friendly - environment where people can escape reality and interact with others while enjoying - themselves through a fantasy style game. -

-

- The Mana World (TMW) is a serious effort to create an innovative free and - open source MMORPG. TMW uses 2D graphics and aims to create a large and diverse - interactive world. -

-
- http://manaplus.org/ - - http://manaplus.org/_media/manaplus_screenshot_8.png - http://manaplus.org/_media/manaplus_screenshot_11.png - http://manaplus.org/_media/manaplus_screenshot_15.png - - - mild - mild - intense - -
diff --git a/manaplus.spec.in b/manaplus.spec.in deleted file mode 100644 index dee87106a..000000000 --- a/manaplus.spec.in +++ /dev/null @@ -1,105 +0,0 @@ -Name: manaplus -Version: @PACKAGE_VERSION@ -Release: 1 -Summary: A client for Evol Online and The Mana World: 2D MMORPG -Group: Games/Other -License: GPLv2+ -Url: http://manaplus.evolonline.org/ -Source0: http://download.evolonline.org/manaplus/download/%{version}/%{name}-%{version}.tar.bz2 -BuildRoot: %{_topdir}/%{name}-%{version}-root - -BuildRequires: gcc-c++ -BuildRequires: make -BuildRequires: SDL-devel -BuildRequires: SDL_image-devel -BuildRequires: SDL_mixer-devel -Buildrequires: SDL_net-devel -BuildRequires: SDL_ttf-devel -BuildRequires: SDL_gfx-devel -BuildRequires: libcurl-devel -BuildRequires: libxml2-devel -BuildRequires: libpng-devel -BuildRequires: gettext-devel - -Provides: evolonline-client = %{version}-%{release} -Provides: manaworld-client = %{version}-%{release} - -%description -ManaPlus is extended client for Evol Online, The Mana World and similar -servers based on eAthena fork. -As a 2D style game, Evol Online aims to create a friendly environment where -people can escape reality and interact with others while enjoying themselves -through a fantasy style game. -The Mana World (TMW) is a serious effort to create an innovative free and -open source MMORPG. TMW uses 2D graphics and aims to create a large and -diverse interactive world. - -%prep -%setup -q - -%build -%configure -%{__make} - -%install -rm -rf %{buildroot} -%makeinstall -mkdir -p %{buildroot}%{_bindir}/ -cp -p %{_builddir}/%{name}-%{version}/manaplustest %{buildroot}%{_bindir}/ - -%find_lang %{name} - -%clean -rm -rf %{buildroot} - -%files -f %{name}.lang -%attr(-, root, root) %doc AUTHORS ChangeLog COPYING docs/*.txt NEWS README -%attr(0755, root, root) %{_bindir}/%{name} -%attr(0755, root, root) %{_bindir}/manaplustest -%attr(-, root, root) %{_datadir}/%{name} -%attr(-, root, root) %{_datadir}/pixmaps/%{name}.png -%attr(-, root, root) %{_datadir}/applications/%{name}.desktop -%attr(-, root, root) %{_datadir}/applications/%{name}test.desktop -%attr(-, root, root) %{_mandir}/man6/%{name}* - - -%changelog -* Sat Jul 02 2011 Andrei Karas 1.1.6.26 -- Add missing dependency SDL_image and compilation tools - -* Fri May 27 2011 Maarten Vanraes 1.1.5.15 -- Generalise spec file to work for multiple rpm-based distros - -* Sun Apr 17 2011 alien 1.1.4.17-1.mga1 -+ Revision: 87336 -- upgrade to 1.1.4.17 - -* Fri Apr 08 2011 alien 1.1.4.3-1.mga1 -+ Revision: 82020 -- Update to new version 1.1.4.3 -- manaplus is now primarily for Evol Online, updating Summary and Description and add Provides -- suggests mumble - -* Sat Feb 26 2011 alien 1.1.2.20-1.mga1 -+ Revision: 61040 -- Fix BuildRequires -- Fix configure part -- Remove unneeded mv files -- Remove BuildRoot -- use tmw spec file as basis -- imported package manaplus - - -* Sun Jan 31 2010 Jérôme Brenier 0.0.29.1-3mdv2010.1 -+ Revision: 498772 -- add version and release for Provides - -* Tue Jan 05 2010 Jérôme Brenier 0.0.29.1-2mdv2010.1 -+ Revision: 486410 -- use _gamesbindir and _gamesdatadir -- Suggests: tmwmusic - -* Tue Jan 05 2010 Jérôme Brenier 0.0.29.1-1mdv2010.1 -+ Revision: 486388 -- add some provides on themanaworld and manaworld -- import tmw diff --git a/manaverse.desktop b/manaverse.desktop new file mode 100644 index 000000000..d8aa56e55 --- /dev/null +++ b/manaverse.desktop @@ -0,0 +1,25 @@ + +[Desktop Entry] +Version=1.0 +Name=ManaVerse +Comment=A 2D MMORPG client +Exec=manaverse +StartupNotify=false +Terminal=false +Type=Application +Icon=manaverse +Categories=Game;AdventureGame; +Keywords=MMORPG;game;RPG;adventure;multiplayer;online; + +# Translations +Comment[vls]=Nen 2D MMORPG client +Comment[ru]=Клиент к 2D MMORPG игре +Comment[it]=Un gioco fantasy online +Comment[ja]=2DのMMORPGクライアント +Comment[cs]=2D MMORPG klient +Comment[nl_BE]=Een 2D MMORPG client +Comment[de]=ein 2D MMORG Client +Comment[sv_SE]=Ett fantasyrollspel online +Comment[es]=Un cliente MMORPG 2D +Comment[fr]=Un jeu en ligne dans un univers fantastique +Comment[nl]=Een online role playing game diff --git a/manaverse.menu b/manaverse.menu new file mode 100644 index 000000000..f71ab93df --- /dev/null +++ b/manaverse.menu @@ -0,0 +1,4 @@ +?package(manaverse):needs="X11" section="Games/Adventure"\ + title="ManaVerse"\ + description="ManaVerse is a 2D MMORPG client."\ + command="/usr/games/manaverse" icon="/usr/share/pixmaps/manaverse.xpm" diff --git a/manaverse.metainfo.xml b/manaverse.metainfo.xml new file mode 100644 index 000000000..c4ecf1ab0 --- /dev/null +++ b/manaverse.metainfo.xml @@ -0,0 +1,30 @@ + + + manaverse.desktop + CC0-1.0 + GPL-2.0 + The Mana Plus Client + Extended client for The Mana World and similar servers + +

+ ManaVerse is extended client for The Mana World and similar servers + based on eAthena fork. +

+

+ The Mana World (TMW) is a serious effort to create an innovative free and + open source MMORPG. TMW uses 2.5D graphics and aims to create a large and diverse + interactive world. +

+
+ https://manaverse.germantmw.de/ + + http://manaplus.org/_media/manaplus_screenshot_8.png + http://manaplus.org/_media/manaplus_screenshot_11.png + http://manaplus.org/_media/manaplus_screenshot_15.png + + + mild + mild + intense + +
diff --git a/manaverse.spec.in b/manaverse.spec.in new file mode 100644 index 000000000..59b85ef41 --- /dev/null +++ b/manaverse.spec.in @@ -0,0 +1,101 @@ +Name: manaverse +Version: @PACKAGE_VERSION@ +Release: 1 +Summary: A client for The Mana World: 2D MMORPG +Group: Games/Other +License: GPLv2+ +Url: https://manaverse.germantmw.de +Source0: https://git.themanaworld.org/mana/plus/-/tree/v%{version}/ +BuildRoot: %{_topdir}/%{name}-%{version}-root + +BuildRequires: gcc-c++ +BuildRequires: make +BuildRequires: SDL-devel +BuildRequires: SDL_image-devel +BuildRequires: SDL_mixer-devel +Buildrequires: SDL_net-devel +BuildRequires: SDL_ttf-devel +BuildRequires: SDL_gfx-devel +BuildRequires: libcurl-devel +BuildRequires: libxml2-devel +BuildRequires: libpng-devel +BuildRequires: gettext-devel + +Provides: manaworld-client = %{version}-%{release} + +%description +ManaVerse is extended client for The Mana World and similar +servers based on eAthena fork. +The Mana World (TMW) is a serious effort to create an innovative free and +open source MMORPG. TMW uses 2.5D graphics and aims to create a large and +diverse interactive world. + +%prep +%setup -q + +%build +%configure +%{__make} + +%install +rm -rf %{buildroot} +%makeinstall +mkdir -p %{buildroot}%{_bindir}/ +cp -p %{_builddir}/%{name}-%{version}/manaplustest %{buildroot}%{_bindir}/ + +%find_lang %{name} + +%clean +rm -rf %{buildroot} + +%files -f %{name}.lang +%attr(-, root, root) %doc AUTHORS ChangeLog COPYING docs/*.txt NEWS README +%attr(0755, root, root) %{_bindir}/%{name} +%attr(0755, root, root) %{_bindir}/manaplustest +%attr(-, root, root) %{_datadir}/%{name} +%attr(-, root, root) %{_datadir}/pixmaps/%{name}.png +%attr(-, root, root) %{_datadir}/applications/%{name}.desktop +%attr(-, root, root) %{_datadir}/applications/%{name}test.desktop +%attr(-, root, root) %{_mandir}/man6/%{name}* + + +%changelog +* Sat Jul 02 2011 Andrei Karas 1.1.6.26 +- Add missing dependency SDL_image and compilation tools + +* Fri May 27 2011 Maarten Vanraes 1.1.5.15 +- Generalise spec file to work for multiple rpm-based distros + +* Sun Apr 17 2011 alien 1.1.4.17-1.mga1 ++ Revision: 87336 +- upgrade to 1.1.4.17 + +* Fri Apr 08 2011 alien 1.1.4.3-1.mga1 ++ Revision: 82020 +- Update to new version 1.1.4.3 +- manaplus is now primarily for Evol Online, updating Summary and Description and add Provides +- suggests mumble + +* Sat Feb 26 2011 alien 1.1.2.20-1.mga1 ++ Revision: 61040 +- Fix BuildRequires +- Fix configure part +- Remove unneeded mv files +- Remove BuildRoot +- use tmw spec file as basis +- imported package manaplus + + +* Sun Jan 31 2010 Jérôme Brenier 0.0.29.1-3mdv2010.1 ++ Revision: 498772 +- add version and release for Provides + +* Tue Jan 05 2010 Jérôme Brenier 0.0.29.1-2mdv2010.1 ++ Revision: 486410 +- use _gamesbindir and _gamesdatadir +- Suggests: tmwmusic + +* Tue Jan 05 2010 Jérôme Brenier 0.0.29.1-1mdv2010.1 ++ Revision: 486388 +- add some provides on themanaworld and manaworld +- import tmw diff --git a/nightly/buildlinux.sh b/nightly/buildlinux.sh index 24ef620a3..2c33bbae7 100755 --- a/nightly/buildlinux.sh +++ b/nightly/buildlinux.sh @@ -19,14 +19,14 @@ if [ "$result" != 0 ]; then exit $result fi -if [ -e src/manaplus ]; +if [ -e src/manaverse ]; then - strip src/manaplus + strip src/manaverse rm -rf $DSTDIR mkdir -p $DSTDIR cp -r data $DSTDIR mkdir -p $DSTDIR/bin - cp src/manaplus $DSTDIR/bin + cp src/manaverse $DSTDIR/bin cp nightly/runme.sh $DSTDIR cp "nightly/run tests.sh" $DSTDIR fi diff --git a/nightly/run tests.sh b/nightly/run tests.sh index f72450c58..64bcf1bfe 100755 --- a/nightly/run tests.sh +++ b/nightly/run tests.sh @@ -3,4 +3,4 @@ DIR=$(dirname "$(readlink -f "$0")") cd "$DIR" export LD_LIBRARY_PATH="$DIR"/libs/:$LD_LIBRARY_PATH -./bin/manaplus --tests +./bin/manaverse --tests diff --git a/nightly/runme.sh b/nightly/runme.sh index 5f3f4abe8..5f7ab625a 100755 --- a/nightly/runme.sh +++ b/nightly/runme.sh @@ -3,4 +3,4 @@ DIR=$(dirname "$(readlink -f $0)") cd "$DIR" export LD_LIBRARY_PATH="$DIR"/libs/:$LD_LIBRARY_PATH -./bin/manaplus +./bin/manaverse diff --git a/packaging/debian/control b/packaging/debian/control index 8cfc37f86..6f13a0e6d 100644 --- a/packaging/debian/control +++ b/packaging/debian/control @@ -1,4 +1,4 @@ -Source: manaplus +Source: manaverse Section: games Priority: optional Homepage: https://manaverse.germantmw.de/ @@ -21,11 +21,11 @@ Build-Depends: debhelper (>= 9), dh-autoreconf, autopoint -Package: manaplus +Package: manaverse Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - manaplus-data (= ${source:Version}), + manaverse-data (= ${source:Version}), xsel, x11-utils, xdg-utils @@ -36,26 +36,26 @@ Description: Extended client for The Mana World serious effort to create an innovative free and open source MMORPG. TMW uses 2D graphics and aims to create a large and diverse interactive world. -Package: manaplus-dbg +Package: manaverse-dbg Section: debug Architecture: any Priority: extra Depends: ${misc:Depends}, - manaplus (= ${binary:Version}) + manaverse (= ${binary:Version}) Description: Extended client for The Mana World ManaVerse is an extended client for The Mana World, and similar servers based on a fork of eAthena. The Mana World (TMW) is a serious effort to create an innovative free and open source MMORPG. TMW uses 2D graphics and aims to create a large and diverse interactive world. . - This package provides debugging symbols for the manaplus package. + This package provides debugging symbols for the manaverse package. -Package: manaplus-data +Package: manaverse-data Architecture: all Depends: ${misc:Depends}, ttf-dejavu-core, fonts-liberation -Recommends: manaplus, +Recommends: manaverse, fonts-mplus, fonts-wqy-microhei Description: Extended client for The Mana World diff --git a/packaging/debian/copyright b/packaging/debian/copyright index 9ba604638..c9348f49b 100644 --- a/packaging/debian/copyright +++ b/packaging/debian/copyright @@ -1,6 +1,6 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: manaplus -Source: http://download.evolonline.org/manaplus/download/ +Upstream-Name: manaverse +Source: https://manaverse.germantmw.de/ Files: * Copyright: 2004-2009 The Mana World Development Team diff --git a/packaging/debian/manaplus-data.install b/packaging/debian/manaplus-data.install index 186b1cf5a..88e9ad428 100644 --- a/packaging/debian/manaplus-data.install +++ b/packaging/debian/manaplus-data.install @@ -1,9 +1,9 @@ usr/share/locale -usr/share/manaplus/data/graphics -usr/share/manaplus/data/help -usr/share/manaplus/data/icons -usr/share/manaplus/data/themes -usr/share/manaplus/data/sfx -usr/share/manaplus/data/sfx/system -usr/share/manaplus/data/perserver -usr/share/manaplus/data/translations +usr/share/manaverse/data/graphics +usr/share/manaverse/data/help +usr/share/manaverse/data/icons +usr/share/manaverse/data/themes +usr/share/manaverse/data/sfx +usr/share/manaverse/data/sfx/system +usr/share/manaverse/data/perserver +usr/share/manaverse/data/translations diff --git a/packaging/debian/manaplus-data.links b/packaging/debian/manaplus-data.links index 0754ce07d..c6b3d78cb 100644 --- a/packaging/debian/manaplus-data.links +++ b/packaging/debian/manaplus-data.links @@ -1,11 +1,11 @@ -usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf usr/share/manaplus/data/fonts/dejavusans.ttf -usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf usr/share/manaplus/data/fonts/dejavusans-bold.ttf -usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf usr/share/manaplus/data/fonts/dejavusansmono.ttf -usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf usr/share/manaplus/data/fonts/dejavusansmono-bold.ttf -usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf usr/share/manaplus/data/fonts/liberationsans-bold.ttf -usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf usr/share/manaplus/data/fonts/liberationsans.ttf -usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf usr/share/manaplus/data/fonts/liberationsansmono-bold.ttf -usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf usr/share/manaplus/data/fonts/liberationsansmono.ttf -usr/share/fonts/truetype/mplus/mplus-1p-bold.ttf usr/share/manaplus/data/fonts/mplus-1p-bold.ttf -usr/share/fonts/truetype/mplus/mplus-1p-regular.ttf usr/share/manaplus/data/fonts/mplus-1p-regular.ttf -usr/share/fonts/truetype/wqy/wqy-microhei.ttc usr/share/manaplus/data/fonts/wqy-microhei.ttf +usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf usr/share/manaverse/data/fonts/dejavusans.ttf +usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf usr/share/manaverse/data/fonts/dejavusans-bold.ttf +usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf usr/share/manaverse/data/fonts/dejavusansmono.ttf +usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf usr/share/manaverse/data/fonts/dejavusansmono-bold.ttf +usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf usr/share/manaverse/data/fonts/liberationsans-bold.ttf +usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf usr/share/manaverse/data/fonts/liberationsans.ttf +usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf usr/share/manaverse/data/fonts/liberationsansmono-bold.ttf +usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf usr/share/manaverse/data/fonts/liberationsansmono.ttf +usr/share/fonts/truetype/mplus/mplus-1p-bold.ttf usr/share/manaverse/data/fonts/mplus-1p-bold.ttf +usr/share/fonts/truetype/mplus/mplus-1p-regular.ttf usr/share/manaverse/data/fonts/mplus-1p-regular.ttf +usr/share/fonts/truetype/wqy/wqy-microhei.ttc usr/share/manaverse/data/fonts/wqy-microhei.ttf diff --git a/packaging/debian/manaplus.install b/packaging/debian/manaplus.install index b6f7c99b6..0f040b1b5 100644 --- a/packaging/debian/manaplus.install +++ b/packaging/debian/manaplus.install @@ -1,4 +1,4 @@ -usr/share/applications/manaplus.desktop -usr/share/manaplus/data/icons/manaplus.png usr/share/pixmaps -usr/games/manaplus -data/icons/manaplus.xpm usr/share/pixmaps +usr/share/applications/manaverse.desktop +usr/share/manaverse/data/icons/manaverse.png usr/share/pixmaps +usr/games/manaverse +data/icons/manaverse.xpm usr/share/pixmaps diff --git a/packaging/debian/manaplus.lintian-overrides b/packaging/debian/manaplus.lintian-overrides index fb8da9244..e3f477b45 100644 --- a/packaging/debian/manaplus.lintian-overrides +++ b/packaging/debian/manaplus.lintian-overrides @@ -1,3 +1,3 @@ -manaplus: spelling-error-in-binary usr/games/manaplus dont don't -manaplus: spelling-error-in-binary usr/games/manaplus standart standard -manaplus: spelling-error-in-binary usr/games/manaplus spaw spawn +manaverse: spelling-error-in-binary usr/games/manaverse dont don't +manaverse: spelling-error-in-binary usr/games/manaverse standart standard +manaverse: spelling-error-in-binary usr/games/manaverse spaw spawn diff --git a/packaging/debian/manaplus.manpages b/packaging/debian/manaplus.manpages index dfa31fe89..b9d3a690f 100644 --- a/packaging/debian/manaplus.manpages +++ b/packaging/debian/manaplus.manpages @@ -1,2 +1,2 @@ -docs/manaplus.6 +docs/manaverse.6 docs/manaplustest.6 diff --git a/packaging/debian/manaplus.menu b/packaging/debian/manaplus.menu index df633b0e9..2af68d5df 100644 --- a/packaging/debian/manaplus.menu +++ b/packaging/debian/manaplus.menu @@ -1,5 +1,5 @@ -?package(manaplus):needs="X11" section="Games/Adventure" \ - title="ManaPlus" \ - longtitle="ManaPlus is a 2D MMORPG client." \ - command="/usr/games/manaplus" \ - icon="/usr/share/pixmaps/manaplus.xpm" +?package(manaverse):needs="X11" section="Games/Adventure" \ + title="ManaVerse" \ + longtitle="ManaVerse is a 2D MMORPG client." \ + command="/usr/games/manaverse" \ + icon="/usr/share/pixmaps/manaverse.xpm" diff --git a/packaging/debian/rules b/packaging/debian/rules index 7533b4c82..65c9caafe 100755 --- a/packaging/debian/rules +++ b/packaging/debian/rules @@ -9,12 +9,12 @@ override_dh_auto_configure: dh_auto_configure -- $(DEB_CONFIGURE_EXTRA_FLAGS) override_dh_strip: - dh_strip -a --dbg-package=manaplus-dbg + dh_strip -a --dbg-package=manaverse-dbg override_dh_install: dh_install - rm -f $(CURDIR)/debian/manaplus-data/usr/share/manaplus/data/themes/jewelry/LICENSE.txt - rm -f $(CURDIR)/debian/manaplus-data/usr/share/manaplus/data/themes/golden-delicious/LICENSE.txt + rm -f $(CURDIR)/debian/manaverse-data/usr/share/manaverse/data/themes/jewelry/LICENSE.txt + rm -f $(CURDIR)/debian/manaverse-data/usr/share/manaverse/data/themes/golden-delicious/LICENSE.txt %: dh $@ --parallel --with autoreconf diff --git a/packaging/debian/source.lintian-overrides b/packaging/debian/source.lintian-overrides index 615c5ddde..86de4d849 100644 --- a/packaging/debian/source.lintian-overrides +++ b/packaging/debian/source.lintian-overrides @@ -1,2 +1,2 @@ -manaplus source: dep5-copyright-license-name-not-unique -manaplus source: missing-license-paragraph-in-dep5-copyright gpl-2 +manaverse source: dep5-copyright-license-name-not-unique +manaverse source: missing-license-paragraph-in-dep5-copyright gpl-2 diff --git a/packaging/nacl/ports/manaplus/build.sh b/packaging/nacl/ports/manaplus/build.sh index 19f97cabd..08d9b0a73 100755 --- a/packaging/nacl/ports/manaplus/build.sh +++ b/packaging/nacl/ports/manaplus/build.sh @@ -16,12 +16,12 @@ ConfigureStep() { SDL_CFLAGS=`$SDL_CONFIG --cflags` SDL_LIBS="-lSDL_image -lSDL_ttf -lSDL_mixer -lSDL_gfx -lSDL_net -lfreetype -ljpeg -lpng16 -lwebp -lvorbisfile -lvorbis -logg -lmikmod -lz -lbz2 -ltiff" export LIBS="-L${NACLPORTS_LIBDIR} ${SDL_LIBS} -lnacl_io -lpthread -lRegal -lm" - export MANAPLUSDIR="${START_DIR}/src" + export MANAVERSEDIR="${START_DIR}/src" # autoreconf -i ${SRC_DIR} - autoreconf -i ${MANAPLUSDIR} + autoreconf -i ${MANAVERSEDIR} # ${SRC_DIR}/configure - ${MANAPLUSDIR}/configure \ + ${MANAVERSEDIR}/configure \ --enable-naclbuild \ --disable-nls \ --with-opengl \ diff --git a/packaging/nacl/ports/manaplus/pkg_info b/packaging/nacl/ports/manaplus/pkg_info index 314dfb0b7..ed9fd19bd 100644 --- a/packaging/nacl/ports/manaplus/pkg_info +++ b/packaging/nacl/ports/manaplus/pkg_info @@ -1,6 +1,6 @@ -NAME=manaplus +NAME=manaverse VERSION=1 -#URL=https://gitlab.com/manaplus/manaplus.git@master +#URL=https://git.themanaworld.org/mana/plus LICENSE=GPL DEPENDS=(sdl sdl-gfx sdl-mixer sdl-ttf sdl-image sdl-net curl libxml2 libwebp zlib) SHA1=4178d0c709b34b811d1781fc6dc183ea4979c2b5 diff --git a/packaging/openSUSE Build Service/manaplus.spec b/packaging/openSUSE Build Service/manaplus.spec index 852f6422c..b624c5cf2 100644 --- a/packaging/openSUSE Build Service/manaplus.spec +++ b/packaging/openSUSE Build Service/manaplus.spec @@ -1,11 +1,11 @@ -Name: manaplus +Name: manaverse Version: 1.1.6.26 Release: 1 -Summary: A client for Evol Online and The Mana World: 2D MMORPG +Summary: A client for The Mana World: 2D MMORPG Group: Games/Other License: GPLv2+ -Url: http://manaplus.evolonline.org/ -Source0: http://download.evolonline.org/manaplus/download/%{version}/%{name}-%{version}.tar.bz2 +Url: https://manaverse.germantmw.de/ +Source0: https://git.themanaworld.org/mana/plus/-/tree/v%{version}/ BuildRoot: %{_topdir}/%{name}-%{version}-root BuildRequires: gcc-c++ @@ -21,15 +21,11 @@ BuildRequires: libxml2-devel BuildRequires: libpng-devel BuildRequires: gettext-devel -Provides: evolonline-client = %{version}-%{release} Provides: manaworld-client = %{version}-%{release} %description -ManaPlus is extended client for Evol Online, The Mana World and similar +ManaVerse is extended client for The Mana World and similar servers based on eAthena fork. -As a 2D style game, Evol Online aims to create a friendly environment where -people can escape reality and interact with others while enjoying themselves -through a fantasy style game. The Mana World (TMW) is a serious effort to create an innovative free and open source MMORPG. TMW uses 2D graphics and aims to create a large and diverse interactive world. diff --git a/packaging/switch/CMakeLists.txt.switch b/packaging/switch/CMakeLists.txt.switch index 3895c9b0f..99c4b7863 100644 --- a/packaging/switch/CMakeLists.txt.switch +++ b/packaging/switch/CMakeLists.txt.switch @@ -25,11 +25,11 @@ elseif (PLATFORM_SWITCH) set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Shared libs not available") endif () -project(ManaPlus) +project(ManaVerse) file(GLOB SOURCES src/*.cpp) set(SOURCES_DIRS src/being src/enums/being src/fs src/gui src/input - src/listeners src/net src/particle src/progs/manaplus src/render + src/listeners src/net src/particle src/progs/manaverse src/render src/resources src/sdl2gfx src/test src/utils) foreach (DIR ${SOURCES_DIRS}) @@ -39,9 +39,9 @@ endforeach (DIR) set(INCLUDES src src/sdl2gfx) -set(FLAGS -DPACKAGE_NAME=\"ManaPlus\" -DPACKAGE_TARNAME=\"manaplus\" -DPACKAGE_VERSION=\"1.9.3.23\" - -DPACKAGE_STRING=\"ManaPlus\ 1.9.3.23\" -DPACKAGE_BUGREPORT=\"akaras@inbox.ru\" -DPACKAGE_URL=\"\" - -DPACKAGE=\"manaplus\" -DVERSION=\"1.9.3.23\" -DTIME_WITH_SYS_TIME=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 +set(FLAGS -DPACKAGE_NAME=\"ManaVerse\" -DPACKAGE_TARNAME=\"manaverse\" -DPACKAGE_VERSION=\"1.0\" + -DPACKAGE_STRING=\"ManaVerse\ 1.0\" -DPACKAGE_BUGREPORT=\"jak1@themanaworld.org\" -DPACKAGE_URL=\"\" + -DPACKAGE=\"manaverse\" -DVERSION=\"1.0\" -DTIME_WITH_SYS_TIME=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_SOCKET_H=1 -DSELECT_TYPE_ARG1=int -DSELECT_TYPE_ARG234=\(fd_set\ \\*\) -DSELECT_TYPE_ARG5=\(struct\ timeval\ \\*\) @@ -108,5 +108,5 @@ if (PLATFORM_SWITCH) add_custom_target(${PROJECT_NAME}.nro DEPENDS ${PROJECT_NAME} COMMAND ${DEVKITPRO}/tools/bin/nacptool --create "${PROJECT_NAME}" "cpasjuste" "1.9.3.23" ${PROJECT_NAME}.nacp - COMMAND ${DEVKITPRO}/tools/bin/elf2nro ${PROJECT_NAME} ${PROJECT_NAME}.nro --icon=${CMAKE_CURRENT_SOURCE_DIR}/data/icons/manaplus-switch.jpeg --nacp=${PROJECT_NAME}.nacp) + COMMAND ${DEVKITPRO}/tools/bin/elf2nro ${PROJECT_NAME} ${PROJECT_NAME}.nro --icon=${CMAKE_CURRENT_SOURCE_DIR}/data/icons/manaverse-switch.jpeg --nacp=${PROJECT_NAME}.nacp) endif () diff --git a/packaging/windows/make-translations.sh b/packaging/windows/make-translations.sh index 1d4132397..de8fff283 100755 --- a/packaging/windows/make-translations.sh +++ b/packaging/windows/make-translations.sh @@ -2,5 +2,5 @@ for i in `grep -v ^# ../../po/LINGUAS`; do mkdir -p ../../translations/$i/LC_MESSAGES - msgfmt -c -o ../../translations/$i/LC_MESSAGES/manaplus.mo ../../po/$i.po + msgfmt -c -o ../../translations/$i/LC_MESSAGES/manaverse.mo ../../po/$i.po done diff --git a/packaging/windows/setup.nsi b/packaging/windows/setup.nsi index f5ca57644..f7bf573ba 100644 --- a/packaging/windows/setup.nsi +++ b/packaging/windows/setup.nsi @@ -3,8 +3,8 @@ ; like the old install script. ; ; DLLDIR - directory containing required dlls -; EXEDIR - directory containing manaplus.exe -; EXESUFFIX - offset to SRCDIR pointing to a directory containing manaplus.exe +; EXEDIR - directory containing manaverse.exe +; EXESUFFIX - offset to SRCDIR pointing to a directory containing manaverse.exe ; PRODUCT_VERSION - software version ; UPX - upx binary name ; @@ -46,20 +46,20 @@ RequestExecutionLevel admin !endif ;--- (and without !defines ) --- -!System "${UPX} --best --crp-ms=999999 --compress-icons=0 --nrv2d ${EXEDIR}\manaplus.exe" +!System "${UPX} --best --crp-ms=999999 --compress-icons=0 --nrv2d ${EXEDIR}\manaverse.exe" !define MULTIUSER_INSTALLMODE_COMMANDLINE !define MULTIUSER_EXECUTIONLEVEL "admin" !include "MultiUser.nsh" ; HM NIS Edit helper defines -!define PRODUCT_NAME "ManaPlus" +!define PRODUCT_NAME "ManaVerse" !ifndef PRODUCT_VERSION !define PRODUCT_VERSION "1.1" !endif -!define PRODUCT_PUBLISHER "ManaPlus Development Team" -!define PRODUCT_WEB_SITE "http://manaplus.evolonline.org/" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\manaplus.exe" +!define PRODUCT_PUBLISHER "ManaVerse Development Team" +!define PRODUCT_WEB_SITE "http://manaverse.germantmw.de" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\manaverse.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "SHCTX" @@ -71,9 +71,9 @@ RequestExecutionLevel admin ; MUI Settings !define MUI_ABORTWARNING ;!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico" -!define MUI_ICON "${SRCDIR}\data\icons\manaplus.ico" +!define MUI_ICON "${SRCDIR}\data\icons\manaverse.ico" ;!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico" -!define MUI_UNICON "${SRCDIR}\data\icons\manaplus.ico" +!define MUI_UNICON "${SRCDIR}\data\icons\manaverse.ico" ;Language Selection Dialog Settings ;Remember the installer language @@ -101,13 +101,13 @@ RequestExecutionLevel admin !define MUI_FINISHPAGE_RUN_FUNCTION RunMana !define MUI_FINISHPAGE_SHOWREADME 'notepad.exe "$\"$INSTDIR\README$\""' !define MUI_PAGE_CUSTOMFUNCTION_PRE changeFinishImage -!define MUI_FINISHPAGE_LINK "Visit ManaPlus website for the latest news, FAQs and support" -!define MUI_FINISHPAGE_LINK_LOCATION "http://manaplus.evolonline.org/" +!define MUI_FINISHPAGE_LINK "Visit ManaVerse website for the latest news, FAQs and support" +!define MUI_FINISHPAGE_LINK_LOCATION "http://manaverse.germantmw.de/" !insertmacro MUI_PAGE_FINISH Function RunMana SetOutPath $INSTDIR -Exec "$INSTDIR\manaplus.exe" +Exec "$INSTDIR\manaverse.exe" FunctionEnd Function changeFinishImage @@ -179,7 +179,7 @@ ReserveFile "setup_finish.bmp" ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -OutFile "manaplus-${PRODUCT_VERSION}-win${BITS}.exe" +OutFile "manaverse-${PRODUCT_VERSION}-win${BITS}.exe" InstallDir "$PROGRAMFILES\Mana" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show @@ -259,7 +259,7 @@ Section "Core files (required)" SecCore SetOverwrite ifnewer SetOutPath "$INSTDIR" - File "${EXEDIR}\manaplus.exe" + File "${EXEDIR}\manaverse.exe" File "${DLLDIR}\SDL.dll" File "${DLLDIR}\SDL_image.dll" ; File "${DLLDIR}\SDL_mixer.dll" @@ -341,7 +341,7 @@ Section "Core files (required)" SecCore SetOutPath "$INSTDIR\data\help\idx" File "${SRCDIR}\data\help\idx\*.idx" SetOutPath "$INSTDIR\data\icons\" - File "${SRCDIR}\data\icons\manaplus.ico" + File "${SRCDIR}\data\icons\manaverse.ico" SetOutPath "$INSTDIR\data\music" File "${SRCDIR}\data\music\*.ogg" SetOutPath "$INSTDIR\data\perserver\default\" @@ -355,14 +355,14 @@ Section "Create Shortcuts" SecShortcuts SetOutPath "$INSTDIR" SetOverwrite ifnewer CreateDirectory "$SMPROGRAMS\Mana" - CreateShortCut "$SMPROGRAMS\Mana\ManaPlus.lnk" "$INSTDIR\manaplus.exe" - CreateShortCut "$SMPROGRAMS\Mana\ManaPlus (no opengl).lnk" "$INSTDIR\manaplus.exe" --no-opengl - CreateShortCut "$SMPROGRAMS\Mana\ManaPlus (safemode).lnk" "$INSTDIR\manaplus.exe" --safemode - CreateShortCut "$SMPROGRAMS\Mana\ManaPlus (tests).lnk" "$INSTDIR\manaplus.exe" --tests - CreateShortCut "$DESKTOP\ManaPlus.lnk" "$INSTDIR\manaplus.exe" - CreateShortCut "$DESKTOP\ManaPlus (tests).lnk" "$INSTDIR\manaplus.exe" --tests - - ${registerExtension} "$INSTDIR\manaplus.exe" ".manaplus" "ManaPlus brandings" + CreateShortCut "$SMPROGRAMS\Mana\ManaVerse.lnk" "$INSTDIR\manaverse.exe" + CreateShortCut "$SMPROGRAMS\Mana\ManaVerse (no opengl).lnk" "$INSTDIR\manaverse.exe" --no-opengl + CreateShortCut "$SMPROGRAMS\Mana\ManaVerse (safemode).lnk" "$INSTDIR\manaverse.exe" --safemode + CreateShortCut "$SMPROGRAMS\Mana\ManaVerse (tests).lnk" "$INSTDIR\manaverse.exe" --tests + CreateShortCut "$DESKTOP\ManaVerse.lnk" "$INSTDIR\manaverse.exe" + CreateShortCut "$DESKTOP\ManaVerse (tests).lnk" "$INSTDIR\manaverse.exe" --tests + + ${registerExtension} "$INSTDIR\manaverse.exe" ".mana" "ManaVerse brandings" SectionEnd Section /o "Portable" SecPortable @@ -377,19 +377,19 @@ Section /o "Debugger" SecDebug File "${DLLDIR}\libexpat-1.dll" File "${DLLDIR}\libreadline6.dll" File "${DLLDIR}\libtermcap.dll" - File "${EXEDIR}\manaplusd.exe" + File "${EXEDIR}\manaversed.exe" ${If} ${SectionIsSelected} ${SecShortcuts} - CreateShortCut "$SMPROGRAMS\Mana\ManaPlus (debug).lnk" '"$INSTDIR\gdb.exe"' '"$INSTDIR\manaplusd.exe"' "$INSTDIR\manaplusd.exe" - CreateShortCut "$DESKTOP\ManaPlus (debug).lnk" '"$INSTDIR\gdb.exe"' '"$INSTDIR\manaplusd.exe"' "$INSTDIR\manaplusd.exe" + CreateShortCut "$SMPROGRAMS\Mana\ManaVerse (debug).lnk" '"$INSTDIR\gdb.exe"' '"$INSTDIR\manaversed.exe"' "$INSTDIR\manaversed.exe" + CreateShortCut "$DESKTOP\ManaVerse (debug).lnk" '"$INSTDIR\gdb.exe"' '"$INSTDIR\manaversed.exe"' "$INSTDIR\manaversed.exe" ${EndIf} SectionEnd Section /o "Profiler" SecProfiler SetOutPath "$INSTDIR" - File "${EXEDIR}\manaplusp.exe" + File "${EXEDIR}\manaversep.exe" ${If} ${SectionIsSelected} ${SecShortcuts} - CreateShortCut "$SMPROGRAMS\Mana\ManaPlus (profiler).lnk" "$INSTDIR\manaplusp.exe" - CreateShortCut "$DESKTOP\ManaPlus (profiler).lnk" "$INSTDIR\manaplusp.exe" + CreateShortCut "$SMPROGRAMS\Mana\ManaVerse (profiler).lnk" "$INSTDIR\manaversep.exe" + CreateShortCut "$DESKTOP\ManaVerse (profiler).lnk" "$INSTDIR\manaversep.exe" ${EndIf} SectionEnd @@ -408,7 +408,6 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "The core program files." !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} "Create game shortcuts and register extensions." !insertmacro MUI_DESCRIPTION_TEXT ${SecPortable} "Portable client. (If selected client will work as portable client.)" - !insertmacro MUI_DESCRIPTION_TEXT ${SecEvol} "Create shortcuts for Evol Online." !insertmacro MUI_DESCRIPTION_TEXT ${SecTrans} "Translations for the user interface. Uncheck this component to leave it in English." !insertmacro MUI_DESCRIPTION_TEXT ${SecDebug} "Install debugger for try to detect stability issues." !insertmacro MUI_DESCRIPTION_TEXT ${SecProfiler} "Install profiler build to detect perfomance issues." @@ -426,10 +425,10 @@ SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" - WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\manaplus.exe" + WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\manaverse.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\manaplus.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\manaverse.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" @@ -446,21 +445,19 @@ Section Uninstall Delete "$INSTDIR\*.*" Delete "$SMPROGRAMS\Mana\Uninstall.lnk" - Delete "$DESKTOP\ManaPlus.lnk" - Delete "$DESKTOP\ManaPlus (debug).lnk" - Delete "$DESKTOP\ManaPlus (profiler).lnk" - Delete "$DESKTOP\ManaPlus (tests).lnk" - Delete "$SMPROGRAMS\Mana\ManaPlus.lnk" - Delete "$SMPROGRAMS\Mana\ManaPlus (debug).lnk" - Delete "$SMPROGRAMS\Mana\ManaPlus (profiler).lnk" - Delete "$SMPROGRAMS\Mana\ManaPlus (no opengl).lnk" - Delete "$SMPROGRAMS\Mana\ManaPlus (safemode).lnk" - Delete "$SMPROGRAMS\Mana\ManaPlus (tests).lnk" + Delete "$DESKTOP\ManaVerse.lnk" + Delete "$DESKTOP\ManaVerse (debug).lnk" + Delete "$DESKTOP\ManaVerse (profiler).lnk" + Delete "$DESKTOP\ManaVerse (tests).lnk" + Delete "$SMPROGRAMS\Mana\ManaVerse.lnk" + Delete "$SMPROGRAMS\Mana\ManaVerse (debug).lnk" + Delete "$SMPROGRAMS\Mana\ManaVerse (profiler).lnk" + Delete "$SMPROGRAMS\Mana\ManaVerse (no opengl).lnk" + Delete "$SMPROGRAMS\Mana\ManaVerse (safemode).lnk" + Delete "$SMPROGRAMS\Mana\ManaVerse (tests).lnk" Delete "$SMPROGRAMS\Mana\Website.lnk" Delete "$SMPROGRAMS\Mana\Readme.lnk" Delete "$SMPROGRAMS\Mana\FAQ.lnk" - Delete "$SMPROGRAMS\Mana\EvolOnline.lnk" - Delete "$DESKTOP\EvolOnline.lnk" RMDir "$SMPROGRAMS\Mana" @@ -472,6 +469,6 @@ Section Uninstall DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}" - ${unregisterExtension} ".manaplus" "ManaPlus brandings" + ${unregisterExtension} ".mana" "ManaVerse brandings" SetAutoClose true SectionEnd diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt index 068757ac1..ef28b5be6 100644 --- a/po/CMakeLists.txt +++ b/po/CMakeLists.txt @@ -4,7 +4,7 @@ FIND_PACKAGE(Gettext REQUIRED) # we need our own version because the upstream one contains # a call to msgmerge (updating po files) which can't be # disabled -MACRO(MANAPLUS_GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg) +MACRO(MANAVERSE_GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg) # make it a real variable, so we can modify it here SET(_firstPoFile "${_firstPoFileArg}") @@ -38,12 +38,12 @@ MACRO(MANAPLUS_GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg) ADD_CUSTOM_TARGET(translations ${_addToAll} DEPENDS ${_gmoFiles}) ENDMACRO() -MACRO(MANAPLUS_GETTEXT_UPDATE_PO _potFile _languages) +MACRO(MANAVERSE_GETTEXT_UPDATE_PO _potFile _languages) GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) ADD_CUSTOM_TARGET( update-pot - COMMAND xgettext --files-from=translatable-files --directory=. --output=${_potFile} -d manaplus --keyword=_ --keyword=N_ + COMMAND xgettext --files-from=translatable-files --directory=. --output=${_potFile} -d manaverse --keyword=_ --keyword=N_ ) ADD_CUSTOM_TARGET( @@ -78,5 +78,5 @@ ENDFOREACH() ADD_CUSTOM_TARGET(update-po) -MANAPLUS_GETTEXT_CREATE_TRANSLATIONS(manaplus.pot ALL ${POFILES}) -MANAPLUS_GETTEXT_UPDATE_PO(manaplus.pot "${languages}") +MANAVERSE_GETTEXT_CREATE_TRANSLATIONS(manaverse.pot ALL ${POFILES}) +MANAVERSE_GETTEXT_UPDATE_PO(manaverse.pot "${languages}") diff --git a/po/Makevars b/po/Makevars index 2cd1a43b5..588deb93f 100644 --- a/po/Makevars +++ b/po/Makevars @@ -1,7 +1,7 @@ # Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. -DOMAIN = manaplus +DOMAIN = manaverse # These two variables depend on the location of this directory. subdir = po @@ -18,7 +18,7 @@ XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. -COPYRIGHT_HOLDER = The ManaPlus Developers +COPYRIGHT_HOLDER = The ManaVerse Developers # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: diff --git a/po/POTFILES.in b/po/POTFILES.in index 641a0e5d5..6c86adbb3 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -172,13 +172,13 @@ src/net/tmwa/skillrecv.cpp src/pincodemanager.cpp src/progs/dyecmd/client.cpp src/progs/dyecmd/dyemain.cpp -src/progs/manaplus/actions/actions.cpp -src/progs/manaplus/actions/chat.cpp -src/progs/manaplus/actions/commands.cpp -src/progs/manaplus/actions/pets.cpp -src/progs/manaplus/actions/statusbar.cpp -src/progs/manaplus/actions/windows.cpp -src/progs/manaplus/client.cpp +src/progs/manaverse/actions/actions.cpp +src/progs/manaverse/actions/chat.cpp +src/progs/manaverse/actions/commands.cpp +src/progs/manaverse/actions/pets.cpp +src/progs/manaverse/actions/statusbar.cpp +src/progs/manaverse/actions/windows.cpp +src/progs/manaverse/client.cpp src/render/rendererslistsdl2.h src/render/rendererslistsdl.h src/resources/beinginfo.cpp diff --git a/po/manaplus.pot b/po/manaplus.pot deleted file mode 100644 index f4256aca5..000000000 --- a/po/manaplus.pot +++ /dev/null @@ -1,11437 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR The ManaPlus Developers -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: akaras@inbox.ru\n" -"POT-Creation-Date: 2019-03-23 22:01+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" - -#. TRANSLATORS: visible beings on map -#: src/actormanager.cpp:1589 -msgid "Visible on map" -msgstr "" - -#. TRANSLATORS: default race name -#: src/being/being.cpp:486 -msgid "Human" -msgstr "" - -#. TRANSLATORS: dodge or miss message in attacks -#: src/being/being.cpp:779 -msgid "dodge" -msgstr "" - -#: src/being/being.cpp:779 -msgid "miss" -msgstr "" - -#. TRANSLATORS: this away status writed in player nick -#: src/being/being.cpp:2567 src/gui/windows/whoisonline.cpp:910 -msgid "A" -msgstr "" - -#. TRANSLATORS: this inactive status writed in player nick -#: src/being/being.cpp:2572 src/gui/windows/whoisonline.cpp:915 -msgid "I" -msgstr "" - -#. TRANSLATORS: chat message after death -#. TRANSLATORS: player killed message -#: src/being/localplayer.cpp:406 src/net/eathena/playerrecv.cpp:520 -#, c-format -msgid "You were killed by %s." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:898 -msgid "Tried to pick up nonexistent item." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:902 -msgid "Item is too heavy." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:906 -msgid "Item is too far away." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:910 -msgid "Inventory is full." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:914 -msgid "Stack is too big." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:918 -msgid "Item belongs to someone else." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:922 -msgid "You can't pickup this amount of items." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:926 -msgid "Your item stack has max amount." -msgstr "" - -#. TRANSLATORS: pickup error message -#: src/being/localplayer.cpp:933 -msgid "Unknown problem picking up item." -msgstr "" - -#. TRANSLATORS: %d is number, -#. [@@%d|%s@@] - here player can see link to item -#: src/being/localplayer.cpp:969 -#, c-format -msgid "You picked up %d [@@%d|%s@@]." -msgid_plural "You picked up %d [@@%d|%s@@]." -msgstr[0] "" -msgstr[1] "" - -#. TRANSLATORS: this is normal experience -#. TRANSLATORS: get xp message -#: src/being/localplayer.cpp:1183 src/being/localplayer.cpp:1185 -#: src/being/localplayer.cpp:1221 src/being/localplayer.cpp:1235 -msgid "xp" -msgstr "" - -#. TRANSLATORS: this is job experience -#: src/being/localplayer.cpp:1191 src/being/localplayer.cpp:1199 -#: src/being/localplayer.cpp:1208 -msgid "job" -msgstr "" - -#. TRANSLATORS: get homunculus xp message -#: src/being/localplayer.cpp:1232 -msgid "Homun" -msgstr "" - -#. TRANSLATORS: get hp message -#: src/being/localplayer.cpp:1245 -msgid "hp" -msgstr "" - -#. TRANSLATORS: get hp message -#: src/being/localplayer.cpp:1255 -msgid "mana" -msgstr "" - -#. TRANSLATORS: follow command message -#: src/being/localplayer.cpp:2349 -#, c-format -msgid "Follow: %s" -msgstr "" - -#. TRANSLATORS: follow command message -#. TRANSLATORS: cancel follow message -#: src/being/localplayer.cpp:2355 src/being/localplayer.cpp:2380 -msgid "Follow canceled" -msgstr "" - -#. TRANSLATORS: imitate command message -#: src/being/localplayer.cpp:2365 -#, c-format -msgid "Imitation: %s" -msgstr "" - -#. TRANSLATORS: imitate command message -#. TRANSLATORS: cancel follow message -#: src/being/localplayer.cpp:2371 src/being/localplayer.cpp:2385 -msgid "Imitation canceled" -msgstr "" - -#. TRANSLATORS: wait player/monster message -#: src/being/localplayer.cpp:2769 -#, c-format -msgid "You see %s" -msgstr "" - -#. TRANSLATORS: ignore/unignore action -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player to completle ignore list -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player to ignore list -#: src/being/playerrelations.cpp:488 src/gui/popups/popupmenu.cpp:2531 -#: src/gui/popups/popupmenu.cpp:2573 -msgid "Completely ignore" -msgstr "" - -#. TRANSLATORS: ignore/unignore action -#: src/being/playerrelations.cpp:507 -msgid "Print '...'" -msgstr "" - -#. TRANSLATORS: ignore/unignore action -#: src/being/playerrelations.cpp:532 -msgid "Blink name" -msgstr "" - -#. TRANSLATORS: ignore strategi -#: src/being/playerrelations.cpp:583 -msgid "Floating '...' bubble" -msgstr "" - -#. TRANSLATORS: ignore strategi -#: src/being/playerrelations.cpp:587 -msgid "Floating bubble" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:44 -msgid "manaplus [options] [manaplus-file]" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:47 -msgid "[manaplus-file] : The manaplus file is an XML file (.manaplus)" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:50 -msgid " used to set custom parameters" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:53 -msgid " to the manaplus client." -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:56 -msgid "Options:" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:59 -msgid " -l --log-file : Log file to use" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:61 -msgid " -a --chat-log-dir : Chat log dir to use" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:63 -msgid " -v --version : Display the version" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:65 -msgid " -h --help : Display this help" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:67 -msgid " -C --config-dir : Configuration directory to use" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:70 -msgid " -U --username : Login with this username" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:73 -msgid " -P --password : Login with this password" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:76 -msgid " -c --character : Login with this character" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:79 -msgid " -s --server : Login server name or IP" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:82 -msgid " -y --server-type : Login server type" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:85 -msgid " -p --port : Login server port" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:88 -msgid " -H --update-host : Use this update host" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:91 -msgid " -D --default : Choose default character server and character" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:95 -msgid " -u --skip-update : Skip the update downloads" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:98 -msgid " -d --data : Directory to load game data from" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:101 -msgid " -L --localdata-dir : Directory to use as local data directory" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:105 -msgid " --screenshot-dir : Directory to store screenshots" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:108 -msgid " --safemode : Start game in safe mode" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:111 -msgid " --renderer : Set renderer type" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:114 -msgid " -T --tests : Start testing drivers and auto configuring" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:118 -msgid " -V --validate : Start validating client data" -msgstr "" - -#. TRANSLATORS: command line help -#: src/commandline.cpp:123 -msgid " -O --no-opengl : Disable OpenGL for this session" -msgstr "" - -#. TRANSLATORS: directory creation error -#: src/configmanager.cpp:62 src/dirs.cpp:372 src/dirs.cpp:387 src/dirs.cpp:437 -#, c-format -msgid "%s doesn't exist and can't be created! Exiting." -msgstr "" - -#. TRANSLATORS: update server initialisation error -#: src/dirs.cpp:484 -#, c-format -msgid "Invalid update host: %s." -msgstr "" - -#. TRANSLATORS: update server initialisation error -#: src/dirs.cpp:517 src/dirs.cpp:526 -msgid "Error creating updates directory!" -msgstr "" - -#. TRANSLATORS: directory creation error -#: src/dirs.cpp:548 src/dirs.cpp:569 -#, c-format -msgid "Error: %s doesn't exist and can't be created! Exiting." -msgstr "" - -#. TRANSLATORS: directory creation error -#: src/dirs.cpp:600 src/dirs.cpp:608 src/dirs.cpp:616 -#, c-format -msgid "%s doesn't exist and can't be created!" -msgstr "" - -#. TRANSLATORS: chat tab header -#. TRANSLATORS: chat tab name -#: src/game.cpp:293 src/gui/windows/chatwindow.cpp:2207 -msgid "General" -msgstr "" - -#. TRANSLATORS: chat tab header -#. TRANSLATORS: long button name for debug window. -#. TRANSLATORS: debug window name -#: src/game.cpp:300 src/gui/windowmanager.cpp:144 src/gui/windowmenu.cpp:239 -#: src/gui/windows/debugwindow.cpp:46 -msgid "Debug" -msgstr "" - -#. TRANSLATORS: save file message -#: src/game.cpp:637 -#, c-format -msgid "Screenshot saved as %s" -msgstr "" - -#. TRANSLATORS: save file message -#: src/game.cpp:650 -msgid "Saving screenshot failed!" -msgstr "" - -#. TRANSLATORS: error message text -#: src/game.cpp:738 -msgid "The connection to the server was lost." -msgstr "" - -#. TRANSLATORS: error message header -#: src/game.cpp:741 -msgid "Network Error" -msgstr "" - -#. TRANSLATORS: auto adjust settings message -#: src/game.cpp:832 -msgid "Auto disable Show beings transparency" -msgstr "" - -#. TRANSLATORS: auto adjust settings message -#: src/game.cpp:853 -msgid "Auto lower Particle effects" -msgstr "" - -#. TRANSLATORS: auto adjust settings message -#: src/game.cpp:874 -msgid "Auto enable opacity cache" -msgstr "" - -#. TRANSLATORS: move type in status bar -#: src/gamemodifiers.cpp:149 -msgid "(D) default moves" -msgstr "" - -#. TRANSLATORS: move type in status bar -#: src/gamemodifiers.cpp:151 -msgid "(I) invert moves" -msgstr "" - -#. TRANSLATORS: move type in status bar -#: src/gamemodifiers.cpp:153 -msgid "(c) moves with some crazy moves" -msgstr "" - -#. TRANSLATORS: move type in status bar -#: src/gamemodifiers.cpp:155 -msgid "(C) moves with crazy moves" -msgstr "" - -#. TRANSLATORS: move type in status bar -#: src/gamemodifiers.cpp:157 -msgid "(d) double normal + crazy" -msgstr "" - -#. TRANSLATORS: move type in status bar -#: src/gamemodifiers.cpp:159 -msgid "(?) unknown move" -msgstr "" - -#. TRANSLATORS: crazy move type in status bar -#: src/gamemodifiers.cpp:184 -#, c-format -msgid "(%u) crazy move number %u" -msgstr "" - -#. TRANSLATORS: crazy move type in status bar -#: src/gamemodifiers.cpp:190 -msgid "(a) custom crazy move" -msgstr "" - -#. TRANSLATORS: crazy move type in status bar -#: src/gamemodifiers.cpp:195 -msgid "(?) crazy move" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:202 -msgid "(0) default moves to target" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:204 -msgid "(1) moves to target in distance 1" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:206 -msgid "(2) moves to target in distance 2" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:208 -msgid "(3) moves to target in distance 3" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:210 -msgid "(4) moves to target in distance 4" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:212 -msgid "(5) moves to target in distance 5" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:214 -msgid "(6) moves to target in distance 6" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:216 -msgid "(7) moves to target in distance 7" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:218 -msgid "(8) moves to target in distance 8" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:220 -msgid "(9) moves to target in distance 9" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:222 -msgid "(A) moves to target in attack range" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:224 -msgid "(a) archer attack range" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:226 -msgid "(B) moves to target in attack range - 1" -msgstr "" - -#. TRANSLATORS: move to target type in status bar -#: src/gamemodifiers.cpp:228 -msgid "(?) move to target" -msgstr "" - -#. TRANSLATORS: folow mode in status bar -#: src/gamemodifiers.cpp:234 -msgid "(D) default follow" -msgstr "" - -#. TRANSLATORS: folow mode in status bar -#: src/gamemodifiers.cpp:236 -msgid "(R) relative follow" -msgstr "" - -#. TRANSLATORS: folow mode in status bar -#: src/gamemodifiers.cpp:238 -msgid "(M) mirror follow" -msgstr "" - -#. TRANSLATORS: folow mode in status bar -#: src/gamemodifiers.cpp:240 -msgid "(P) pet follow" -msgstr "" - -#. TRANSLATORS: folow mode in status bar -#: src/gamemodifiers.cpp:242 -msgid "(?) unknown follow" -msgstr "" - -#. TRANSLATORS: switch attack type in status bar -#. TRANSLATORS: attack type in status bar -#: src/gamemodifiers.cpp:248 src/gamemodifiers.cpp:256 -#: src/gamemodifiers.cpp:270 -msgid "(?) attack" -msgstr "" - -#. TRANSLATORS: switch attack type in status bar -#. TRANSLATORS: attack type in status bar -#: src/gamemodifiers.cpp:250 src/gamemodifiers.cpp:262 -msgid "(D) default attack" -msgstr "" - -#. TRANSLATORS: switch attack type in status bar -#: src/gamemodifiers.cpp:252 -msgid "(s) switch attack without shield" -msgstr "" - -#. TRANSLATORS: switch attack type in status bar -#: src/gamemodifiers.cpp:254 -msgid "(S) switch attack with shield" -msgstr "" - -#. TRANSLATORS: attack type in status bar -#: src/gamemodifiers.cpp:264 -msgid "(G) go and attack" -msgstr "" - -#. TRANSLATORS: attack type in status bar -#: src/gamemodifiers.cpp:266 -msgid "(A) go, attack, pickup" -msgstr "" - -#. TRANSLATORS: attack type in status bar -#: src/gamemodifiers.cpp:268 -msgid "(d) without auto attack" -msgstr "" - -#. TRANSLATORS: targeting type in status bar -#: src/gamemodifiers.cpp:276 -msgid "(D) don't switch target" -msgstr "" - -#. TRANSLATORS: targeting type in status bar -#: src/gamemodifiers.cpp:278 -msgid "(C) always attack closest" -msgstr "" - -#. TRANSLATORS: targeting type in status bar -#: src/gamemodifiers.cpp:280 -msgid "(?) targeting" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:311 -msgid "(S) small pick up 1x1 cells" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:313 -msgid "(D) default pick up 2x1 cells" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:315 -msgid "(F) forward pick up 2x3 cells" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:317 -msgid "(3) pick up 3x3 cells" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:319 -msgid "(g) go and pick up in distance 4" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:321 -msgid "(G) go and pick up in distance 8" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:323 -msgid "(A) go and pick up in max distance" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:325 -msgid "(?) pick up" -msgstr "" - -#. TRANSLATORS: magic attack in status bar -#: src/gamemodifiers.cpp:331 -msgid "(f) use #flar for magic attack" -msgstr "" - -#. TRANSLATORS: magic attack in status bar -#: src/gamemodifiers.cpp:333 -msgid "(c) use #chiza for magic attack" -msgstr "" - -#. TRANSLATORS: magic attack in status bar -#: src/gamemodifiers.cpp:335 -msgid "(I) use #ingrav for magic attack" -msgstr "" - -#. TRANSLATORS: magic attack in status bar -#: src/gamemodifiers.cpp:337 -msgid "(F) use #frillyar for magic attack" -msgstr "" - -#. TRANSLATORS: magic attack in status bar -#: src/gamemodifiers.cpp:339 -msgid "(U) use #upmarmu for magic attack" -msgstr "" - -#. TRANSLATORS: magic attack in status bar -#: src/gamemodifiers.cpp:341 -msgid "(?) magic attack" -msgstr "" - -#. TRANSLATORS: player attack type in status bar -#: src/gamemodifiers.cpp:347 -msgid "(a) attack all players" -msgstr "" - -#. TRANSLATORS: player attack type in status bar -#: src/gamemodifiers.cpp:349 -msgid "(f) attack all except friends" -msgstr "" - -#. TRANSLATORS: player attack type in status bar -#: src/gamemodifiers.cpp:351 -msgid "(b) attack bad relations" -msgstr "" - -#. TRANSLATORS: player attack type in status bar -#: src/gamemodifiers.cpp:353 -msgid "(d) don't attack players" -msgstr "" - -#. TRANSLATORS: player attack type in status bar -#: src/gamemodifiers.cpp:355 -msgid "(?) pvp attack" -msgstr "" - -#. TRANSLATORS: imitation type in status bar -#: src/gamemodifiers.cpp:361 -msgid "(D) default imitation" -msgstr "" - -#. TRANSLATORS: imitation type in status bar -#: src/gamemodifiers.cpp:363 -msgid "(O) outfits imitation" -msgstr "" - -#. TRANSLATORS: imitation type in status bar -#: src/gamemodifiers.cpp:365 -msgid "(?) imitation" -msgstr "" - -#. TRANSLATORS: game modifiers state in status bar -#: src/gamemodifiers.cpp:371 -msgid "Game modifiers are enabled" -msgstr "" - -#. TRANSLATORS: game modifiers state in status bar -#: src/gamemodifiers.cpp:373 -msgid "Game modifiers are disabled" -msgstr "" - -#. TRANSLATORS: game modifiers state in status bar -#: src/gamemodifiers.cpp:375 -msgid "Game modifiers are unknown" -msgstr "" - -#. TRANSLATORS: map view type in status bar -#: src/gamemodifiers.cpp:389 -msgid "(N) normal map view" -msgstr "" - -#. TRANSLATORS: map view type in status bar -#: src/gamemodifiers.cpp:391 -msgid "(D) debug map view" -msgstr "" - -#. TRANSLATORS: map view type in status bar -#: src/gamemodifiers.cpp:393 -msgid "(u) ultra map view" -msgstr "" - -#. TRANSLATORS: map view type in status bar -#: src/gamemodifiers.cpp:395 -msgid "(U) ultra map view 2" -msgstr "" - -#. TRANSLATORS: map view type in status bar -#: src/gamemodifiers.cpp:397 -msgid "(e) empty map view with collision" -msgstr "" - -#. TRANSLATORS: map view type in status bar -#: src/gamemodifiers.cpp:399 -msgid "(E) empty map view" -msgstr "" - -#. TRANSLATORS: map view type in status bar -#: src/gamemodifiers.cpp:401 -msgid "(b) black & white map view" -msgstr "" - -#. TRANSLATORS: pickup size in status bar -#: src/gamemodifiers.cpp:403 -msgid "(?) map view" -msgstr "" - -#. TRANSLATORS: away type in status bar -#: src/gamemodifiers.cpp:415 -msgid "(O) on keyboard" -msgstr "" - -#. TRANSLATORS: away type in status bar -#: src/gamemodifiers.cpp:417 -msgid "(A) away" -msgstr "" - -#. TRANSLATORS: away type in status bar -#. TRANSLATORS: camera mode in status bar -#: src/gamemodifiers.cpp:419 src/gamemodifiers.cpp:479 -msgid "(?) away" -msgstr "" - -#. TRANSLATORS: away message box header -#: src/gamemodifiers.cpp:445 -msgid "Away" -msgstr "" - -#. TRANSLATORS: ok dialog button -#. TRANSLATORS: edit dialog label -#. TRANSLATORS: edit server dialog button -#. TRANSLATORS: ok dialog button -#. TRANSLATORS: item amount window button -#. TRANSLATORS: text dialog button -#. TRANSLATORS: quit dialog button -#. TRANSLATORS: text dialog button -#. TRANSLATORS: ok dialog button -#: src/gamemodifiers.cpp:448 src/gui/dialogsmanager.cpp:202 -#: src/gui/dialogsmanager.cpp:221 src/gui/widgets/tabs/setup_input.cpp:170 -#: src/gui/widgets/tabs/setup_theme.cpp:326 -#: src/gui/widgets/tabs/setup_theme.cpp:362 -#: src/gui/widgets/tabs/setup_video.cpp:277 -#: src/gui/widgets/tabs/setup_video.cpp:306 -#: src/gui/widgets/tabs/setup_video.cpp:435 -#: src/gui/widgets/tabs/setup_video.cpp:451 -#: src/gui/windows/changeemaildialog.cpp:171 -#: src/gui/windows/changepassworddialog.cpp:159 -#: src/gui/windows/charcreatedialog.cpp:508 -#: src/gui/windows/charselectdialog.cpp:281 -#: src/gui/windows/charselectdialog.cpp:330 src/gui/windows/editdialog.cpp:53 -#: src/gui/windows/editserverdialog.cpp:66 -#: src/gui/windows/editserverdialog.cpp:217 -#: src/gui/windows/itemamountwindow.cpp:215 -#: src/gui/windows/pincodedialog.cpp:47 src/gui/windows/quitdialog.cpp:67 -#: src/gui/windows/registerdialog.cpp:253 src/gui/windows/textdialog.cpp:53 -#: src/net/ea/charserverrecv.cpp:108 src/net/ea/charserverrecv.cpp:134 -#: src/net/ea/gamerecv.cpp:71 src/net/eathena/charserverrecv.cpp:439 -#: src/net/eathena/charserverrecv.cpp:474 -#: src/net/eathena/charserverrecv.cpp:502 src/net/tmwa/charserverrecv.cpp:295 -#: src/pincodemanager.cpp:148 src/pincodemanager.cpp:207 -#: src/progs/manaplus/actions/actions.cpp:178 -#: src/progs/manaplus/client.cpp:1512 src/progs/manaplus/client.cpp:1547 -msgid "OK" -msgstr "" - -#. TRANSLATORS: camera mode in status bar -#: src/gamemodifiers.cpp:475 -msgid "(G) game camera mode" -msgstr "" - -#. TRANSLATORS: camera mode in status bar -#: src/gamemodifiers.cpp:477 -msgid "(F) free camera mode" -msgstr "" - -#. TRANSLATORS: ok dialog button -#. TRANSLATORS: popup menu item -#. TRANSLATORS: popup menu item -#. TRANSLATORS: close chat tab -#. TRANSLATORS: popup menu item -#. TRANSLATORS: close window -#. TRANSLATORS: did you know window button -#. TRANSLATORS: storage button -#. TRANSLATORS: mail edit window button -#. TRANSLATORS: mail view window button -#. TRANSLATORS: npc dialog button -#. TRANSLATORS: quests window button -#. TRANSLATORS: shop window button -#. TRANSLATORS: close quick button -#. TRANSLATORS: ok dialog button -#: src/gui/dialogsmanager.cpp:120 src/gui/popups/popupmenu.cpp:842 -#: src/gui/popups/popupmenu.cpp:934 src/gui/popups/popupmenu.cpp:1194 -#: src/gui/windows/didyouknowwindow.cpp:85 -#: src/gui/windows/inventorywindow.cpp:309 -#: src/gui/windows/inventorywindow.cpp:343 -#: src/gui/windows/maileditwindow.cpp:59 src/gui/windows/mailviewwindow.cpp:63 -#: src/gui/windows/npcdialog.cpp:88 src/gui/windows/npcdialog.cpp:134 -#: src/gui/windows/questswindow.cpp:80 src/gui/windows/shopwindow.cpp:114 -#: src/progs/dyecmd/client.cpp:569 src/progs/manaplus/client.cpp:935 -#: src/progs/manaplus/client.cpp:1426 src/progs/manaplus/client.cpp:1445 -msgid "Close" -msgstr "" - -#. TRANSLATORS: error message question -#: src/gui/dialogsmanager.cpp:132 -msgid "Do you want to open support page?" -msgstr "" - -#. TRANSLATORS: ok dialog button -#. TRANSLATORS: popup menu item -#. TRANSLATORS: revive player -#: src/gui/dialogsmanager.cpp:151 src/gui/dialogsmanager.cpp:165 -#: src/gui/popups/popupmenu.cpp:2995 -msgid "Revive" -msgstr "" - -#. TRANSLATORS: ok dialog button -#: src/gui/dialogsmanager.cpp:153 -msgid "GM revive" -msgstr "" - -#. TRANSLATORS: weight message -#: src/gui/dialogsmanager.cpp:198 -msgid "" -"You are carrying more than half your weight. You are unable to regain health." -msgstr "" - -#. TRANSLATORS: weight message -#: src/gui/dialogsmanager.cpp:217 -msgid "You are carrying less than half your weight. You can regain health." -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: inventory sort mode -#. TRANSLATORS: screen density type -#. TRANSLATORS: sdl2 log level -#. TRANSLATORS: sdl driver name -#. TRANSLATORS: vsync type -#. TRANSLATORS: equipment window tab -#. TRANSLATORS: default hosts group name -#: src/gui/models/colorlistmodel.h:33 src/gui/models/sortlistmodelinv.h:32 -#: src/gui/widgets/tabs/setup_misc.cpp:79 -#: src/gui/widgets/tabs/setup_misc.cpp:100 -#: src/gui/widgets/tabs/setup_perfomance.cpp:74 -#: src/gui/widgets/tabs/setup_visual.cpp:81 -#: src/gui/windows/equipmentwindow.cpp:666 src/gui/windows/serverdialog.cpp:688 -msgid "default" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:35 src/gui/models/colormodel.cpp:77 -msgid "black" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:37 src/gui/models/colormodel.cpp:79 -msgid "red" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:39 src/gui/models/colormodel.cpp:81 -msgid "green" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:41 src/gui/models/colormodel.cpp:83 -msgid "blue" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:43 src/gui/models/colormodel.cpp:85 -msgid "gold" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:45 src/gui/models/colormodel.cpp:87 -msgid "yellow" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:47 src/gui/models/colormodel.cpp:89 -msgid "pink" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:49 src/gui/models/colormodel.cpp:91 -msgid "purple" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:51 src/gui/models/colormodel.cpp:93 -msgid "grey" -msgstr "" - -#. TRANSLATORS: chat color -#. TRANSLATORS: color name -#: src/gui/models/colorlistmodel.h:53 src/gui/models/colormodel.cpp:95 -msgid "brown" -msgstr "" - -#. TRANSLATORS: chat color -#: src/gui/models/colorlistmodel.h:55 -msgid "rainbow 1" -msgstr "" - -#. TRANSLATORS: chat color -#: src/gui/models/colorlistmodel.h:57 -msgid "rainbow 2" -msgstr "" - -#. TRANSLATORS: chat color -#: src/gui/models/colorlistmodel.h:59 -msgid "rainbow 3" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:35 -msgid "Very small (8)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:37 -msgid "Very small (9)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:39 -msgid "Tiny (10)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:41 -msgid "Small (11)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:43 -msgid "Medium (12)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:45 -msgid "Normal (13)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:47 -msgid "Large (14)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:49 -msgid "Large (15)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:51 -msgid "Large (16)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:53 -msgid "Big (17)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:55 -msgid "Big (18)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:57 -msgid "Big (19)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:59 -msgid "Very big (20)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:61 -msgid "Very big (21)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:63 -msgid "Very big (22)" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/models/fontsizechoicelistmodel.h:65 -msgid "Huge (23)" -msgstr "" - -#. TRANSLATORS: language -#. TRANSLATORS: popup menu header -#: src/gui/models/langlistmodel.h:47 src/gui/popups/popupmenu.cpp:2037 -#: src/gui/popups/popupmenu.cpp:2120 src/gui/widgets/tabs/socialtabbase.h:50 -msgid "(default)" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:49 -msgid "Catalan" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:51 -msgid "Chinese (China)" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:53 -msgid "Chinese (Hong Kong)" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:55 -msgid "Czech" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:57 -msgid "Dutch (Belgium/Flemish)" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:59 -msgid "English" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:61 -msgid "Finnish" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:63 -msgid "French" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:65 -msgid "German" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:67 -msgid "Indonesian" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:69 -msgid "Italian" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:71 -msgid "Japanese" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:73 -msgid "Polish" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:75 -msgid "Portuguese" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:77 -msgid "Portuguese (Brazilian)" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:79 -msgid "Russian" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:81 -msgid "Spanish (Castilian)" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:83 -msgid "Swedish (Sweden)" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:85 -msgid "Turkish" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:87 -msgid "Ukrainian" -msgstr "" - -#. TRANSLATORS: language -#: src/gui/models/langlistmodel.h:89 -msgid "Esperanto" -msgstr "" - -#. TRANSLATORS: magic school -#: src/gui/models/magicschoolmodel.h:35 -msgid "General Magic" -msgstr "" - -#. TRANSLATORS: magic school -#: src/gui/models/magicschoolmodel.h:37 -msgid "Life Magic" -msgstr "" - -#. TRANSLATORS: magic school -#: src/gui/models/magicschoolmodel.h:39 -msgid "War Magic" -msgstr "" - -#. TRANSLATORS: magic school -#: src/gui/models/magicschoolmodel.h:41 -msgid "Transmute Magic" -msgstr "" - -#. TRANSLATORS: magic school -#: src/gui/models/magicschoolmodel.h:43 -msgid "Nature Magic" -msgstr "" - -#. TRANSLATORS: magic school -#: src/gui/models/magicschoolmodel.h:45 -msgid "Astral Magic" -msgstr "" - -#. TRANSLATORS: relation type -#: src/gui/models/playerrelationlistmodel.h:35 -msgid "Neutral" -msgstr "" - -#. TRANSLATORS: relation type -#: src/gui/models/playerrelationlistmodel.h:37 -msgid "Friend" -msgstr "" - -#. TRANSLATORS: relation type -#: src/gui/models/playerrelationlistmodel.h:39 -msgid "Disregarded" -msgstr "" - -#. TRANSLATORS: relation type -#: src/gui/models/playerrelationlistmodel.h:41 -msgid "Ignored" -msgstr "" - -#. TRANSLATORS: relation type -#: src/gui/models/playerrelationlistmodel.h:43 -msgid "Erased" -msgstr "" - -#. TRANSLATORS: relation type -#: src/gui/models/playerrelationlistmodel.h:45 -msgid "Blacklisted" -msgstr "" - -#. TRANSLATORS: relation type -#. TRANSLATORS: palette color -#: src/gui/models/playerrelationlistmodel.h:47 src/gui/userpalette.cpp:175 -msgid "Enemy" -msgstr "" - -#. TRANSLATORS: server license comment -#: src/gui/models/serverslistmodel.h:76 -msgid "(NON FREE)" -msgstr "" - -#. TRANSLATORS: server license comment -#: src/gui/models/serverslistmodel.h:82 -msgid "(UNKNOWN)" -msgstr "" - -#. TRANSLATORS: buy dialog sort type. -#: src/gui/models/sortlistmodelbuy.h:33 -msgid "unsorted" -msgstr "" - -#. TRANSLATORS: buy dialog sort type. -#: src/gui/models/sortlistmodelbuy.h:35 -msgid "by price" -msgstr "" - -#. TRANSLATORS: buy dialog sort type. -#. TRANSLATORS: inventory sort mode -#: src/gui/models/sortlistmodelbuy.h:37 src/gui/models/sortlistmodelinv.h:34 -msgid "by name" -msgstr "" - -#. TRANSLATORS: buy dialog sort type. -#. TRANSLATORS: inventory sort mode -#: src/gui/models/sortlistmodelbuy.h:39 src/gui/models/sortlistmodelinv.h:36 -msgid "by id" -msgstr "" - -#. TRANSLATORS: buy dialog sort type. -#. TRANSLATORS: inventory sort mode -#: src/gui/models/sortlistmodelbuy.h:41 src/gui/models/sortlistmodelinv.h:38 -msgid "by weight" -msgstr "" - -#. TRANSLATORS: buy dialog sort type. -#. TRANSLATORS: inventory sort mode -#: src/gui/models/sortlistmodelbuy.h:43 src/gui/models/sortlistmodelinv.h:40 -msgid "by amount" -msgstr "" - -#. TRANSLATORS: buy dialog sort type. -#. TRANSLATORS: inventory sort mode -#: src/gui/models/sortlistmodelbuy.h:45 src/gui/models/sortlistmodelinv.h:42 -msgid "by type" -msgstr "" - -#. TRANSLATORS: target type -#: src/gui/models/targettypemodel.h:32 -msgid "No Target" -msgstr "" - -#. TRANSLATORS: target type -#: src/gui/models/targettypemodel.h:34 -msgid "Allow Target" -msgstr "" - -#. TRANSLATORS: target type -#: src/gui/models/targettypemodel.h:36 -msgid "Need Target" -msgstr "" - -#. TRANSLATORS: update type -#. TRANSLATORS: onscreen button size -#: src/gui/models/updatetypemodel.h:32 src/gui/widgets/tabs/setup_touch.cpp:43 -msgid "Normal" -msgstr "" - -#. TRANSLATORS: update type -#: src/gui/models/updatetypemodel.h:34 -msgid "Auto Close" -msgstr "" - -#. TRANSLATORS: update type -#: src/gui/models/updatetypemodel.h:36 -msgid "Skip" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:143 src/gui/popups/beingpopup.cpp:162 -#, c-format -msgid "Hungry: %d" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:149 src/gui/popups/beingpopup.cpp:168 -#, c-format -msgid "Intimacy: %d" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:182 -#, c-format -msgid "Group: %s (%d)" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:193 -#, c-format -msgid "Party: %s" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:203 -#, c-format -msgid "Guild: %s" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:213 -#, c-format -msgid "Clan: %s" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:223 -#, c-format -msgid "Pvp rank: %u" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:233 -#, c-format -msgid "Buy shop: %s" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:243 -#, c-format -msgid "Sell shop: %s" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:253 -#, c-format -msgid "Comment: %s" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:264 -#, c-format -msgid "Effects: %s" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:275 -#, c-format -msgid "Chat room: %s" -msgstr "" - -#. TRANSLATORS: being popup label -#. TRANSLATORS: popup menu item -#. TRANSLATORS: skill level -#. TRANSLATORS: status bar label -#. TRANSLATORS: status window label -#: src/gui/popups/beingpopup.cpp:287 src/gui/popups/popupmenu.cpp:2380 -#: src/gui/popups/skillpopup.cpp:154 src/gui/windows/ministatuswindow.cpp:382 -#: src/gui/windows/statuswindow.cpp:74 src/gui/windows/statuswindow.cpp:282 -#: src/gui/windows/statuswindow.cpp:322 -#, c-format -msgid "Level: %d" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:303 -#, c-format -msgid "Hp: %d/%d" -msgstr "" - -#. TRANSLATORS: being popup label -#: src/gui/popups/beingpopup.cpp:313 -#, c-format -msgid "Particles: %u" -msgstr "" - -#. TRANSLATORS: popup label -#: src/gui/popups/itempopup.cpp:276 -#, c-format -msgid "Weight: %s" -msgstr "" - -#. TRANSLATORS: named item description -#: src/gui/popups/itempopup.cpp:349 -#, c-format -msgid "Item named: %s" -msgstr "" - -#. TRANSLATORS: popup label -#: src/gui/popups/itempopup.cpp:376 -msgid "Cards: " -msgstr "" - -#. TRANSLATORS: popup label -#: src/gui/popups/itempopup.cpp:413 -msgid "Options: " -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: trade with player -#. TRANSLATORS: trade chat tab name -#. TRANSLATORS: inventory type name -#: src/gui/popups/popupmenu.cpp:234 src/gui/popups/popupmenu.cpp:1010 -#: src/gui/widgets/tabs/chat/tradetab.cpp:39 -#: src/resources/inventory/inventory.cpp:391 -msgid "Trade" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: trade attack player -#. TRANSLATORS: popup menu item -#. TRANSLATORS: attack monster -#. TRANSLATORS: popup menu item -#. TRANSLATORS: attack player -#. TRANSLATORS: input action name -#. TRANSLATORS: Skill type -#: src/gui/popups/popupmenu.cpp:237 src/gui/popups/popupmenu.cpp:366 -#: src/gui/popups/popupmenu.cpp:1013 src/input/pages/basic.cpp:40 -#: src/resources/skill/skilltypelist.h:35 -msgid "Attack" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: send whisper to player -#. TRANSLATORS: popup menu item -#. TRANSLATORS: whisper to npc -#. TRANSLATORS: popup menu item -#. TRANSLATORS: send whisper to player -#: src/gui/popups/popupmenu.cpp:240 src/gui/popups/popupmenu.cpp:340 -#: src/gui/popups/popupmenu.cpp:625 -msgid "Whisper" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: heal player -#: src/gui/popups/popupmenu.cpp:250 src/gui/popups/popupmenu.cpp:1018 -#: src/gui/popups/popupmenu.cpp:3073 -msgid "Heal" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: kick player from guild -#: src/gui/popups/popupmenu.cpp:272 src/gui/popups/popupmenu.cpp:289 -#: src/gui/popups/popupmenu.cpp:676 src/gui/popups/popupmenu.cpp:1047 -msgid "Kick from guild" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: change player position in guild -#: src/gui/popups/popupmenu.cpp:279 src/gui/popups/popupmenu.cpp:296 -#: src/gui/popups/popupmenu.cpp:683 src/gui/popups/popupmenu.cpp:1054 -msgid "Change pos in guild" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: invite player to guild -#: src/gui/popups/popupmenu.cpp:310 src/gui/popups/popupmenu.cpp:696 -#: src/gui/popups/popupmenu.cpp:1069 -msgid "Invite to guild" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: set player invisible for self by id -#. TRANSLATORS: popup menu item -#. TRANSLATORS: nuke player -#: src/gui/popups/popupmenu.cpp:317 src/gui/popups/popupmenu.cpp:3038 -msgid "Nuke" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move to player location -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move to npc location -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move to player position -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move to map item -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move to player position -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move to player location -#. TRANSLATORS: input tab sub tab name -#: src/gui/popups/popupmenu.cpp:320 src/gui/popups/popupmenu.cpp:354 -#: src/gui/popups/popupmenu.cpp:657 src/gui/popups/popupmenu.cpp:828 -#: src/gui/popups/popupmenu.cpp:1025 src/gui/popups/popupmenu.cpp:1096 -#: src/gui/setupinputpages.cpp:48 -msgid "Move" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: talk with npc -#. TRANSLATORS: input action name -#. TRANSLATORS: npc context menu item -#: src/gui/popups/popupmenu.cpp:332 src/input/pages/basic.cpp:88 -#: src/resources/db/npcdb.cpp:168 -msgid "Talk" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: buy from npc -#. TRANSLATORS: popup menu item -#. TRANSLATORS: buy item -#. TRANSLATORS: buy dialog name -#. TRANSLATORS: buy dialog button -#. TRANSLATORS: shop window button -#. TRANSLATORS: shop window tab name -#. TRANSLATORS: input action name -#. TRANSLATORS: npc context menu item -#: src/gui/popups/popupmenu.cpp:344 src/gui/popups/popupmenu.cpp:2604 -#: src/gui/windows/buydialog.cpp:214 src/gui/windows/buydialog.cpp:237 -#: src/gui/windows/buydialog.cpp:261 src/gui/windows/buydialog.cpp:339 -#: src/gui/windows/buydialog.cpp:347 src/gui/windows/buyselldialog.cpp:74 -#: src/gui/windows/shopwindow.cpp:171 src/input/pages/basic.cpp:250 -#: src/resources/db/npcdb.cpp:170 -msgid "Buy" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: sell to npc -#. TRANSLATORS: popup menu item -#. TRANSLATORS: sell item -#. TRANSLATORS: sell dialog name -#. TRANSLATORS: sell dialog button -#. TRANSLATORS: shop window button -#. TRANSLATORS: shop window tab name -#. TRANSLATORS: input action name -#. TRANSLATORS: npc context menu item -#: src/gui/popups/popupmenu.cpp:347 src/gui/popups/popupmenu.cpp:2616 -#: src/gui/widgets/selldialog.cpp:58 src/gui/widgets/selldialog.cpp:115 -#: src/gui/widgets/selldialog.cpp:171 src/gui/windows/buyselldialog.cpp:76 -#: src/gui/windows/shopwindow.cpp:173 src/input/pages/basic.cpp:256 -#: src/resources/db/npcdb.cpp:172 -msgid "Sell" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add comment to npc -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add comment to player -#: src/gui/popups/popupmenu.cpp:357 src/gui/popups/popupmenu.cpp:636 -#: src/gui/popups/popupmenu.cpp:2714 -msgid "Add comment" -msgstr "" - -#. TRANSLATORS: remove monster from attack list -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:381 -msgid "Remove from attack list" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add monster to priotiry attack list -#: src/gui/popups/popupmenu.cpp:388 -msgid "Add to priority attack list" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add monster to attack list -#: src/gui/popups/popupmenu.cpp:392 -msgid "Add to attack list" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add monster to ignore list -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add item to pickup list -#: src/gui/popups/popupmenu.cpp:396 src/gui/popups/popupmenu.cpp:2736 -msgid "Add to ignore list" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: Mercenary move to master -#. TRANSLATORS: popup menu item -#. TRANSLATORS: homunculus move to master -#: src/gui/popups/popupmenu.cpp:405 src/gui/popups/popupmenu.cpp:422 -msgid "Move to master" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: fire mercenary -#: src/gui/popups/popupmenu.cpp:410 -msgid "Fire" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: feed homunculus -#. TRANSLATORS: popup menu item -#. TRANSLATORS: feed pet -#: src/gui/popups/popupmenu.cpp:425 src/gui/popups/popupmenu.cpp:444 -msgid "Feed" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: pet rename item -#. TRANSLATORS: popup menu item -#. TRANSLATORS: rename map item -#. TRANSLATORS: character rename button -#. TRANSLATORS: shop window button -#: src/gui/popups/popupmenu.cpp:429 src/gui/popups/popupmenu.cpp:455 -#: src/gui/popups/popupmenu.cpp:784 src/gui/windows/charselectdialog.cpp:115 -#: src/gui/windows/shopwindow.cpp:202 -msgid "Rename" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: delete homunculus -#. TRANSLATORS: popup menu item -#. TRANSLATORS: kill player -#: src/gui/popups/popupmenu.cpp:433 src/gui/popups/popupmenu.cpp:3044 -msgid "Kill" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: pet drop loot -#: src/gui/popups/popupmenu.cpp:447 -msgid "Drop loot" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: pet unequip item -#. TRANSLATORS: equipment window button -#. TRANSLATORS: inventory button -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:450 src/gui/windows/equipmentwindow.cpp:74 -#: src/gui/windows/inventorywindow.cpp:212 src/resources/db/itemdb.cpp:707 -#: src/resources/itemtypemapdata.h:45 src/resources/itemtypemapdata.h:49 -#: src/resources/itemtypemapdata.h:53 src/resources/itemtypemapdata.h:57 -#: src/resources/itemtypemapdata.h:61 src/resources/itemtypemapdata.h:65 -#: src/resources/itemtypemapdata.h:69 src/resources/itemtypemapdata.h:73 -#: src/resources/itemtypemapdata.h:77 src/resources/itemtypemapdata.h:81 -#: src/resources/itemtypemapdata.h:85 src/resources/itemtypemapdata.h:89 -#: src/resources/itemtypemapdata.h:93 -msgid "Unequip" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: pet return to egg -#: src/gui/popups/popupmenu.cpp:470 src/resources/db/petdb.cpp:117 -msgid "Return to egg" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add being name to chat -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player name to chat -#: src/gui/popups/popupmenu.cpp:509 src/gui/popups/popupmenu.cpp:704 -msgid "Add name to chat" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: close menu -#. TRANSLATORS: shop window button -#. TRANSLATORS: button in change email dialog -#. TRANSLATORS: change password dialog button -#. TRANSLATORS: char create dialog button -#. TRANSLATORS: connection dialog button -#. TRANSLATORS: edit server dialog button -#. TRANSLATORS: item amount window button -#. TRANSLATORS: text dialog button -#. TRANSLATORS: quit dialog button -#. TRANSLATORS: register dialog. button. -#. TRANSLATORS: setup button -#. TRANSLATORS: command editor button -#. TRANSLATORS: text dialog button -#. TRANSLATORS: updater window button -#. TRANSLATORS: input action name -#: src/gui/popups/popupmenu.cpp:514 src/gui/popups/popupmenu.cpp:601 -#: src/gui/popups/popupmenu.cpp:708 src/gui/popups/popupmenu.cpp:763 -#: src/gui/popups/popupmenu.cpp:799 src/gui/popups/popupmenu.cpp:847 -#: src/gui/popups/popupmenu.cpp:881 src/gui/popups/popupmenu.cpp:907 -#: src/gui/popups/popupmenu.cpp:1111 src/gui/popups/popupmenu.cpp:1140 -#: src/gui/popups/popupmenu.cpp:1179 src/gui/popups/popupmenu.cpp:1245 -#: src/gui/popups/popupmenu.cpp:1742 src/gui/popups/popupmenu.cpp:1783 -#: src/gui/popups/popupmenu.cpp:1843 src/gui/popups/popupmenu.cpp:1894 -#: src/gui/popups/popupmenu.cpp:1938 src/gui/popups/popupmenu.cpp:2012 -#: src/gui/popups/popupmenu.cpp:2096 src/gui/popups/popupmenu.cpp:2133 -#: src/gui/popups/popupmenu.cpp:2167 src/gui/popups/popupmenu.cpp:2189 -#: src/gui/popups/popupmenu.cpp:2212 src/gui/popups/popupmenu.cpp:2239 -#: src/gui/popups/popupmenu.cpp:2258 src/gui/popups/popupmenu.cpp:2302 -#: src/gui/popups/popupmenu.cpp:2352 src/gui/popups/popupmenu.cpp:2389 -#: src/gui/popups/popupmenu.cpp:2433 src/gui/popups/popupmenu.cpp:2754 -#: src/gui/popups/popupmenu.cpp:2958 src/gui/popups/popupmenu.cpp:3229 -#: src/gui/popups/popupmenu.cpp:3443 src/gui/popups/popupmenu.cpp:3475 -#: src/gui/popups/popupmenu.cpp:3552 src/gui/popups/popupmenu.cpp:3566 -#: src/gui/popups/popupmenu.cpp:3576 src/gui/popups/popupmenu.cpp:3586 -#: src/gui/popups/popupmenu.cpp:3596 src/gui/popups/popupmenu.cpp:3606 -#: src/gui/popups/popupmenu.cpp:3616 src/gui/windows/buyselldialog.cpp:78 -#: src/gui/windows/changeemaildialog.cpp:58 -#: src/gui/windows/changepassworddialog.cpp:58 -#: src/gui/windows/charcreatedialog.cpp:115 -#: src/gui/windows/connectiondialog.cpp:52 -#: src/gui/windows/editserverdialog.cpp:68 -#: src/gui/windows/itemamountwindow.cpp:221 -#: src/gui/windows/pincodedialog.cpp:54 src/gui/windows/quitdialog.cpp:69 -#: src/gui/windows/registerdialog.cpp:66 src/gui/windows/setupwindow.cpp:106 -#: src/gui/windows/textcommandeditor.cpp:108 src/gui/windows/textdialog.cpp:61 -#: src/gui/windows/updaterwindow.cpp:194 src/input/pages/gui.cpp:103 -msgid "Cancel" -msgstr "" - -#. TRANSLATORS: popup menu header -#. TRANSLATORS: settings tab name -#: src/gui/popups/popupmenu.cpp:576 src/gui/widgets/tabs/setup_players.cpp:83 -msgid "Players" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: kick player from party -#: src/gui/popups/popupmenu.cpp:648 src/gui/popups/popupmenu.cpp:2657 -#: src/gui/popups/popupmenu.cpp:2682 -msgid "Kick from party" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: pickup item from ground -#: src/gui/popups/popupmenu.cpp:743 src/gui/popups/popupmenu.cpp:752 -msgid "Pick up" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add item name to chat -#. TRANSLATORS: popup menu item -#. TRANSLATORS: copy selected outfit to chat input -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add item name to chat -#: src/gui/popups/popupmenu.cpp:757 src/gui/popups/popupmenu.cpp:865 -#: src/gui/popups/popupmenu.cpp:1738 src/gui/popups/popupmenu.cpp:1828 -#: src/gui/popups/popupmenu.cpp:1878 src/gui/popups/popupmenu.cpp:2162 -msgid "Add to chat" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:781 src/gui/popups/popupmenu.cpp:818 -msgid "Map Item" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: remove map item -#. TRANSLATORS: popup menu item -#. TRANSLATORS: remove attack target -#. TRANSLATORS: popup menu item -#. TRANSLATORS: remove item from pickup filter -#: src/gui/popups/popupmenu.cpp:787 src/gui/popups/popupmenu.cpp:2092 -#: src/gui/popups/popupmenu.cpp:2129 -msgid "Remove" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: warp to map item -#. TRANSLATORS: warp select button -#: src/gui/popups/popupmenu.cpp:794 src/gui/popups/popupmenu.cpp:824 -#: src/net/eathena/skillrecv.cpp:436 src/net/eathena/skillrecv.cpp:454 -msgid "Warp" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move camera to map item -#: src/gui/popups/popupmenu.cpp:831 -msgid "Move camera" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: restore camera to default view -#: src/gui/popups/popupmenu.cpp:836 -msgid "Restore camera" -msgstr "" - -#. TRANSLATORS: popup menu header -#. TRANSLATORS: input tab sub tab name -#. TRANSLATORS: long button name for outfits window. -#. TRANSLATORS: outfits button tooltip -#. TRANSLATORS: outfits window name -#: src/gui/popups/popupmenu.cpp:862 src/gui/setupinputpages.cpp:58 -#: src/gui/windowmenu.cpp:203 src/gui/windows/inventorywindow.cpp:265 -#: src/gui/windows/outfitwindow.cpp:61 -msgid "Outfits" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: copy equipment from player to outfit -#: src/gui/popups/popupmenu.cpp:869 -msgid "Copy from player" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: clear selected outfit -#. TRANSLATORS: input action name -#: src/gui/popups/popupmenu.cpp:873 src/input/pages/outfits.cpp:47 -msgid "Clear outfit" -msgstr "" - -#. TRANSLATORS: popup menu header -#. TRANSLATORS: long button name for spells window. -#: src/gui/popups/popupmenu.cpp:900 src/gui/windowmenu.cpp:179 -msgid "Spells" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: edit selected spell -#: src/gui/popups/popupmenu.cpp:903 -msgid "Edit spell" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: remove all text from chat tab -#. TRANSLATORS: clear pin code button -#. TRANSLATORS: npc dialog button -#: src/gui/popups/popupmenu.cpp:939 src/gui/widgets/pincode.cpp:129 -#: src/gui/windows/npcdialog.cpp:131 -msgid "Clear" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: disable chat tab highlight -#: src/gui/popups/popupmenu.cpp:946 -msgid "Disable highlight" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: enable chat tab highlight -#: src/gui/popups/popupmenu.cpp:952 -msgid "Enable highlight" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: do not remove player names from chat tab -#: src/gui/popups/popupmenu.cpp:958 -msgid "Don't remove name" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: remove player names from chat tab -#: src/gui/popups/popupmenu.cpp:964 -msgid "Remove name" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: enable away messages in chat tab -#: src/gui/popups/popupmenu.cpp:970 -msgid "Enable away" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: disable away messages in chat tab -#: src/gui/popups/popupmenu.cpp:976 -msgid "Disable away" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: enable away messages in chat tab -#: src/gui/popups/popupmenu.cpp:983 -msgid "Leave" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: copy selected text to clipboard -#. TRANSLATORS: popup menu item -#. TRANSLATORS: copy link to clipboard -#. TRANSLATORS: popup menu item -#. TRANSLATORS: copy npc text to clipboard -#: src/gui/popups/popupmenu.cpp:988 src/gui/popups/popupmenu.cpp:2208 -#: src/gui/popups/popupmenu.cpp:2254 -msgid "Copy to clipboard" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:1121 -msgid "Change guild position" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:1173 -msgid "window" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: unlock window -#: src/gui/popups/popupmenu.cpp:1203 -msgid "Unlock" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: lock window -#: src/gui/popups/popupmenu.cpp:1209 -msgid "Lock" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:1221 -msgid "Show emotes for:" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show emotes for player -#. TRANSLATORS: settings group -#: src/gui/popups/popupmenu.cpp:1225 src/gui/widgets/tabs/setup_misc.cpp:280 -msgid "Player" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show emotes for pet -#: src/gui/popups/popupmenu.cpp:1229 -msgid "Pet" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show emotes for homuncules -#. TRANSLATORS: palette color -#: src/gui/popups/popupmenu.cpp:1235 src/gui/userpalette.cpp:223 -msgid "Homunculus" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show emotes for mercenary -#. TRANSLATORS: palette color -#: src/gui/popups/popupmenu.cpp:1239 src/gui/userpalette.cpp:217 -msgid "Mercenary" -msgstr "" - -#. TRANSLATORS: dialog caption -#. TRANSLATORS: number of chars in string should be near original -#: src/gui/popups/popupmenu.cpp:1293 -msgid "Rename map sign " -msgstr "" - -#. TRANSLATORS: label -#. TRANSLATORS: number of chars in string should be near original -#: src/gui/popups/popupmenu.cpp:1296 -msgid "Name: " -msgstr "" - -#. TRANSLATORS: dialog caption -#. TRANSLATORS: number of chars in string should be near original -#: src/gui/popups/popupmenu.cpp:1313 -msgid "Player comment " -msgstr "" - -#. TRANSLATORS: label -#. TRANSLATORS: number of chars in string should be near original -#: src/gui/popups/popupmenu.cpp:1316 -msgid "Comment: " -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add item to trade -#: src/gui/popups/popupmenu.cpp:1612 -msgid "Add to trade" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add 10 item amount to trade -#: src/gui/popups/popupmenu.cpp:1620 -msgid "Add to trade 10" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add half item amount to trade -#: src/gui/popups/popupmenu.cpp:1625 -msgid "Add to trade half" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add all amount except one item to trade -#: src/gui/popups/popupmenu.cpp:1629 -msgid "Add to trade all-1" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add all amount item to trade -#: src/gui/popups/popupmenu.cpp:1633 -msgid "Add to trade all" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add item to storage -#. TRANSLATORS: storage button -#. TRANSLATORS: inventory button -#. TRANSLATORS: setup button -#: src/gui/popups/popupmenu.cpp:1641 src/gui/popups/popupmenu.cpp:1824 -#: src/gui/popups/popupmenu.cpp:1873 src/gui/windows/inventorywindow.cpp:297 -#: src/gui/windows/inventorywindow.cpp:331 -#: src/gui/windows/inventorywindow.cpp:985 src/gui/windows/setupwindow.cpp:108 -msgid "Store" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add 10 item amount to storage -#: src/gui/popups/popupmenu.cpp:1649 -msgid "Store 10" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add half item amount to storage -#: src/gui/popups/popupmenu.cpp:1654 -msgid "Store half" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add all except one item to storage -#: src/gui/popups/popupmenu.cpp:1658 -msgid "Store all-1" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add all item amount to storage -#: src/gui/popups/popupmenu.cpp:1662 -msgid "Store all" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: sub menu for craft -#: src/gui/popups/popupmenu.cpp:1675 -msgid "Move to craft..." -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: get item from storage -#. TRANSLATORS: storage button -#: src/gui/popups/popupmenu.cpp:1685 src/gui/windows/inventorywindow.cpp:303 -#: src/gui/windows/inventorywindow.cpp:337 -msgid "Retrieve" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: get 10 item amount from storage -#: src/gui/popups/popupmenu.cpp:1693 -msgid "Retrieve 10" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: get half item amount from storage -#: src/gui/popups/popupmenu.cpp:1698 -msgid "Retrieve half" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: get all except one item amount from storage -#: src/gui/popups/popupmenu.cpp:1702 -msgid "Retrieve all-1" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: get all item amount from storage -#: src/gui/popups/popupmenu.cpp:1706 -msgid "Retrieve all" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: use item -#. TRANSLATORS: popup menu item -#. TRANSLATORS: inventory button -#. TRANSLATORS: default use button name -#. TRANSLATORS: skills dialog button -#. TRANSLATORS: inventory button -#. TRANSLATORS: popup menu item -#. TRANSLATORS: inventory button -#: src/gui/popups/popupmenu.cpp:1776 src/gui/popups/popupmenu.cpp:2808 -#: src/gui/windows/inventorywindow.cpp:210 -#: src/gui/windows/inventorywindow.cpp:882 src/gui/windows/skilldialog.cpp:93 -#: src/gui/windows/skilldialog.cpp:194 src/gui/windows/skilldialog.cpp:521 -#: src/gui/windows/skilldialog.cpp:788 src/gui/windows/skilldialog.cpp:903 -#: src/resources/db/itemdb.cpp:715 src/resources/db/itemdb.cpp:720 -#: src/resources/itemtypemapdata.h:37 src/resources/itemtypemapdata.h:41 -msgid "Use" -msgstr "" - -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:1890 -msgid "Clear drop window" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: popup menu item -#. TRANSLATORS: hide player -#. TRANSLATORS: popup menu item -#. TRANSLATORS: hide npc -#: src/gui/popups/popupmenu.cpp:1922 src/gui/popups/popupmenu.cpp:1987 -#: src/gui/popups/popupmenu.cpp:3063 src/gui/popups/popupmenu.cpp:3098 -#: src/gui/popups/popupmenu.cpp:3250 -msgid "Hide" -msgstr "" - -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:1930 src/gui/popups/popupmenu.cpp:1995 -msgid "Show" -msgstr "" - -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:2003 -msgid "Open yellow bar settings" -msgstr "" - -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:2005 -msgid "Reset yellow bar" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: copy status to chat -#. TRANSLATORS: status window button -#: src/gui/popups/popupmenu.cpp:2009 src/gui/windows/statuswindow.cpp:90 -msgid "Copy to chat" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move attack target up -#: src/gui/popups/popupmenu.cpp:2053 src/gui/popups/popupmenu.cpp:2073 -msgid "Move up" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move attack target down -#: src/gui/popups/popupmenu.cpp:2059 src/gui/popups/popupmenu.cpp:2080 -msgid "Move down" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: undress item from player -#. TRANSLATORS: popup menu item -#. TRANSLATORS: undress player -#: src/gui/popups/popupmenu.cpp:2159 src/gui/popups/popupmenu.cpp:2711 -msgid "Undress" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: copy text to clipboard -#. TRANSLATORS: debug window stats copy button -#: src/gui/popups/popupmenu.cpp:2182 src/gui/widgets/tabs/statdebugtab.cpp:46 -msgid "Copy" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: paste text from clipboard -#: src/gui/popups/popupmenu.cpp:2185 -msgid "Paste" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: open link in browser -#: src/gui/popups/popupmenu.cpp:2205 -msgid "Open link" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:2224 -msgid "Show window" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:2278 -msgid "Skill" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add skill to shortcurs tab -#: src/gui/popups/popupmenu.cpp:2282 -msgid "Add skill shortcut" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: set skill level -#: src/gui/popups/popupmenu.cpp:2287 -msgid "Skill level..." -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: set skill cast type -#: src/gui/popups/popupmenu.cpp:2291 -msgid "Skill cast type..." -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: set skill cast offset by x -#: src/gui/popups/popupmenu.cpp:2295 -msgid "Skill offset by x..." -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: set skill cast offset by y -#: src/gui/popups/popupmenu.cpp:2299 -msgid "Skill offset by y..." -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:2326 -msgid "Skill cast offset by x" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:2332 -msgid "Skill cast offset by y" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: skill level header -#: src/gui/popups/popupmenu.cpp:2374 -msgid "Select skill level" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: skill level -#: src/gui/popups/popupmenu.cpp:2385 -msgid "Max level" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: skill cast type header -#: src/gui/popups/popupmenu.cpp:2413 -msgid "Select skill cast type" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: skill cast type -#. TRANSLATORS: button in input settings tab -#: src/gui/popups/popupmenu.cpp:2417 src/gui/popups/skillpopup.cpp:171 -#: src/gui/widgets/tabs/setup_input.cpp:71 -msgid "Default" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: skill cast type -#. TRANSLATORS: debug window tab -#: src/gui/popups/popupmenu.cpp:2421 src/gui/popups/skillpopup.cpp:175 -#: src/gui/windows/debugwindow.cpp:70 -msgid "Target" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: skill cast type -#: src/gui/popups/popupmenu.cpp:2425 src/gui/popups/skillpopup.cpp:179 -msgid "Mouse position" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: skill cast type -#. TRANSLATORS: Skill type -#: src/gui/popups/popupmenu.cpp:2429 src/resources/skill/skilltypelist.h:39 -msgid "Self" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player to disregarded list -#: src/gui/popups/popupmenu.cpp:2477 src/gui/popups/popupmenu.cpp:2513 -#: src/gui/popups/popupmenu.cpp:2552 src/gui/popups/popupmenu.cpp:2570 -msgid "Disregard" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player to ignore list -#. TRANSLATORS: confirm dialog button -#: src/gui/popups/popupmenu.cpp:2480 src/gui/popups/popupmenu.cpp:2516 -#: src/gui/popups/popupmenu.cpp:2555 src/gui/windows/confirmdialog.cpp:93 -msgid "Ignore" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player to black list -#: src/gui/popups/popupmenu.cpp:2483 src/gui/popups/popupmenu.cpp:2558 -msgid "Black list" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player to enemy list -#: src/gui/popups/popupmenu.cpp:2486 src/gui/popups/popupmenu.cpp:2519 -msgid "Set as enemy" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player to erased list -#: src/gui/popups/popupmenu.cpp:2489 src/gui/popups/popupmenu.cpp:2522 -#: src/gui/popups/popupmenu.cpp:2534 src/gui/popups/popupmenu.cpp:2543 -#: src/gui/popups/popupmenu.cpp:2561 -msgid "Erase" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add player to friends list -#: src/gui/popups/popupmenu.cpp:2499 -msgid "Be friend" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: remove player from ignore list -#: src/gui/popups/popupmenu.cpp:2510 src/gui/popups/popupmenu.cpp:2528 -#: src/gui/popups/popupmenu.cpp:2540 src/gui/popups/popupmenu.cpp:2549 -#: src/gui/popups/popupmenu.cpp:2567 -msgid "Unignore" -msgstr "" - -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:2586 -msgid "Follow" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: imitate player -#: src/gui/popups/popupmenu.cpp:2590 -msgid "Imitate" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: buy item -#: src/gui/popups/popupmenu.cpp:2610 src/gui/popups/popupmenu.cpp:2634 -msgid "Buy (?)" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: sell item -#: src/gui/popups/popupmenu.cpp:2622 src/gui/popups/popupmenu.cpp:2637 -msgid "Sell (?)" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: invite player to party -#: src/gui/popups/popupmenu.cpp:2651 src/gui/popups/popupmenu.cpp:2676 -msgid "Invite to party" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: invite player to party -#: src/gui/popups/popupmenu.cpp:2700 -#, c-format -msgid "Join chat %s" -msgstr "" - -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:2708 -msgid "Show Items" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: remove item from pickup list -#: src/gui/popups/popupmenu.cpp:2725 -msgid "Remove from pickup list" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: popup menu item -#: src/gui/popups/popupmenu.cpp:2732 -msgid "Add to pickup list" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: remove protection from item -#: src/gui/popups/popupmenu.cpp:2784 -msgid "Unprotect item" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: add protection to item -#: src/gui/popups/popupmenu.cpp:2793 -msgid "Protect item" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: drop item -#. TRANSLATORS: inventory button -#: src/gui/popups/popupmenu.cpp:2874 src/gui/windows/inventorywindow.cpp:230 -#: src/gui/windows/inventorywindow.cpp:993 -msgid "Drop..." -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: drop all item amount -#: src/gui/popups/popupmenu.cpp:2877 -msgid "Drop all" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: drop item -#. TRANSLATORS: long button name for drops window. -#. TRANSLATORS: inventory button -#: src/gui/popups/popupmenu.cpp:2883 src/gui/windowmenu.cpp:185 -#: src/gui/windows/inventorywindow.cpp:998 -msgid "Drop" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm commands -#: src/gui/popups/popupmenu.cpp:2894 -msgid "GM..." -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:2902 -#, c-format -msgid "Show %s" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show player account info -#: src/gui/popups/popupmenu.cpp:2909 -msgid "Account info" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show player level -#: src/gui/popups/popupmenu.cpp:2915 -msgid "Level" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show player stats -#. TRANSLATORS: clan window tab -#: src/gui/popups/popupmenu.cpp:2921 src/gui/windows/clanwindow.cpp:65 -msgid "Stats" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show player inventory list -#. TRANSLATORS: long button name for inventory window. -#. TRANSLATORS: inventory window name -#. TRANSLATORS: inventory type name -#: src/gui/popups/popupmenu.cpp:2927 src/gui/windowmenu.cpp:138 -#: src/gui/windows/inventorywindow.cpp:154 -#: src/resources/inventory/inventory.cpp:360 -msgid "Inventory" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show player storage list -#. TRANSLATORS: inventory type name -#: src/gui/popups/popupmenu.cpp:2933 src/resources/inventory/inventory.cpp:365 -msgid "Storage" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show player cart list -#. TRANSLATORS: long button name for cart window. -#. TRANSLATORS: cart button tooltip -#. TRANSLATORS: inventory type name -#: src/gui/popups/popupmenu.cpp:2939 src/gui/windowmenu.cpp:144 -#: src/gui/windows/inventorywindow.cpp:267 -#: src/resources/inventory/inventory.cpp:375 -msgid "Cart" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm commands -#. TRANSLATORS: settings option -#: src/gui/popups/popupmenu.cpp:2945 src/gui/widgets/tabs/setup_chat.cpp:93 -msgid "Commands" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm char commands -#: src/gui/popups/popupmenu.cpp:2951 -msgid "Char commands" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: back to gm menu -#: src/gui/popups/popupmenu.cpp:2955 src/gui/popups/popupmenu.cpp:3226 -msgid "Back" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: find player position -#: src/gui/popups/popupmenu.cpp:2971 -msgid "Locate" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: check player ip -#: src/gui/popups/popupmenu.cpp:2977 -msgid "Check ip" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: go to player position -#. TRANSLATORS: popup menu item -#. TRANSLATORS: warp to npc -#: src/gui/popups/popupmenu.cpp:2983 src/gui/popups/popupmenu.cpp:3271 -msgid "Goto" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: recall player to current position -#. TRANSLATORS: popup menu item -#. TRANSLATORS: warp npc to player location -#: src/gui/popups/popupmenu.cpp:2989 src/gui/popups/popupmenu.cpp:3258 -msgid "Recall" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: recall all party members to player location -#: src/gui/popups/popupmenu.cpp:3009 -msgid "Recall party" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: recall all guild members to player location -#: src/gui/popups/popupmenu.cpp:3017 -msgid "Recall guild" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: give party leader status -#: src/gui/popups/popupmenu.cpp:3030 -msgid "Give party leader" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show menu -#: src/gui/popups/popupmenu.cpp:3051 -msgid "Show..." -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: mute menu -#: src/gui/popups/popupmenu.cpp:3054 -msgid "Mute..." -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: enable immortal mode for player -#: src/gui/popups/popupmenu.cpp:3079 -msgid "Immortal" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: send player to jail -#: src/gui/popups/popupmenu.cpp:3085 -msgid "Jail" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: restore player from jail -#: src/gui/popups/popupmenu.cpp:3091 -msgid "Unjail" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: set player as killer -#: src/gui/popups/popupmenu.cpp:3105 -msgid "Killer" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: set player as killable -#: src/gui/popups/popupmenu.cpp:3111 -msgid "Killable" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: set player save position -#: src/gui/popups/popupmenu.cpp:3117 -msgid "Set save" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: warp player to save position -#: src/gui/popups/popupmenu.cpp:3123 -msgid "Warp to save" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: warp player to random position on same map -#: src/gui/popups/popupmenu.cpp:3129 -msgid "Warp to random" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: spawn player clone -#: src/gui/popups/popupmenu.cpp:3136 -msgid "Spawn clone" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: spawn slave player clone -#: src/gui/popups/popupmenu.cpp:3143 -msgid "Spawn slave clone" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: spawn evil player clone -#: src/gui/popups/popupmenu.cpp:3150 -msgid "Spawn evil clone" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: break guild -#: src/gui/popups/popupmenu.cpp:3157 -msgid "Break guild" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: kick player -#. TRANSLATORS: popup menu item -#. TRANSLATORS: kick monster -#: src/gui/popups/popupmenu.cpp:3166 src/gui/popups/popupmenu.cpp:3241 -#: src/gui/popups/popupmenu.cpp:3286 -msgid "Kick" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:3174 -#, c-format -msgid "Mute %s" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: mute player -#: src/gui/popups/popupmenu.cpp:3184 src/gui/popups/popupmenu.cpp:3188 -#: src/gui/popups/popupmenu.cpp:3192 src/gui/popups/popupmenu.cpp:3196 -#: src/gui/popups/popupmenu.cpp:3200 -#, c-format -msgid "Mute %d" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: mute player -#: src/gui/popups/popupmenu.cpp:3205 src/gui/popups/popupmenu.cpp:3209 -#: src/gui/popups/popupmenu.cpp:3213 src/gui/popups/popupmenu.cpp:3217 -#: src/gui/popups/popupmenu.cpp:3221 -#, c-format -msgid "Unmute %d" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: disguise to npc -#. TRANSLATORS: popup menu item -#. TRANSLATORS: disguise to monster -#: src/gui/popups/popupmenu.cpp:3265 src/gui/popups/popupmenu.cpp:3308 -msgid "Disguise" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: spawn monster -#: src/gui/popups/popupmenu.cpp:3292 -msgid "Spawn same" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: spawn slave monster -#: src/gui/popups/popupmenu.cpp:3301 -msgid "Spawn slave" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show monster information -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show item information -#. TRANSLATORS: char select dialog. button. -#. TRANSLATORS: clan window tab -#. TRANSLATORS: servers dialog button -#. TRANSLATORS: info message header -#. TRANSLATORS: info header -#. TRANSLATORS: info message -#: src/gui/popups/popupmenu.cpp:3316 src/gui/popups/popupmenu.cpp:3345 -#: src/gui/popups/popupmenu.cpp:3364 src/gui/windows/charselectdialog.cpp:81 -#: src/gui/windows/clanwindow.cpp:63 src/gui/windows/serverdialog.cpp:122 -#: src/net/ea/charserverrecv.cpp:130 src/net/eathena/charserverrecv.cpp:435 -#: src/net/eathena/charserverrecv.cpp:471 -msgid "Info" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show selected monster in current map -#: src/gui/popups/popupmenu.cpp:3323 -msgid "Search" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show selected monster spawns in all maps -#: src/gui/popups/popupmenu.cpp:3330 -msgid "Search spawns" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: show who drops item -#: src/gui/popups/popupmenu.cpp:3351 src/gui/popups/popupmenu.cpp:3370 -msgid "Who drops" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm create item -#: src/gui/popups/popupmenu.cpp:3377 -msgid "Add 1" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm create item -#: src/gui/popups/popupmenu.cpp:3380 -msgid "Add 5" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm create item -#: src/gui/popups/popupmenu.cpp:3383 -msgid "Add 10" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm create item -#: src/gui/popups/popupmenu.cpp:3386 -msgid "Add 100" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm create item -#: src/gui/popups/popupmenu.cpp:3389 -msgid "Add 1000" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: gm create item -#: src/gui/popups/popupmenu.cpp:3392 -msgid "Add 10000" -msgstr "" - -#. TRANSLATORS: popup menu header -#: src/gui/popups/popupmenu.cpp:3400 -msgid "GM commands" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: move current item to craft slot -#: src/gui/popups/popupmenu.cpp:3470 -#, c-format -msgid "Move to craft %d" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: open mail dialog -#: src/gui/popups/popupmenu.cpp:3487 -msgid "Mail to..." -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: catch pet command -#: src/gui/popups/popupmenu.cpp:3496 -msgid "Taming pet" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: adopt child command -#: src/gui/popups/popupmenu.cpp:3505 -msgid "Adopt child" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: leave party -#: src/gui/popups/popupmenu.cpp:3518 -msgid "Leave party" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: create party -#. TRANSLATORS: dialog header -#: src/gui/popups/popupmenu.cpp:3524 src/progs/manaplus/actions/chat.cpp:362 -msgid "Create party" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: leave guild -#: src/gui/popups/popupmenu.cpp:3534 -msgid "Leave guild" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: create guild -#. TRANSLATORS: dialog header -#: src/gui/popups/popupmenu.cpp:3540 src/progs/manaplus/actions/chat.cpp:384 -msgid "Create guild" -msgstr "" - -#. TRANSLATORS: popup menu item -#. TRANSLATORS: change guild notice message -#: src/gui/popups/popupmenu.cpp:3562 -msgid "Change notice" -msgstr "" - -#. TRANSLATORS: skill level -#: src/gui/popups/skillpopup.cpp:145 -#, c-format -msgid "Level: %d / %d" -msgstr "" - -#. TRANSLATORS: skill level for tmw fake skills -#: src/gui/popups/skillpopup.cpp:161 -msgid "Level: Unknown" -msgstr "" - -#. TRANSLATORS: skill cast type -#: src/gui/popups/skillpopup.cpp:183 -msgid "Self position" -msgstr "" - -#. TRANSLATORS: skill cast type -#: src/gui/popups/skillpopup.cpp:195 -#, c-format -msgid "Cast type: %s" -msgstr "" - -#. TRANSLATORS: input tab sub tab name -#. TRANSLATORS: status window tab name -#: src/gui/setupinputpages.cpp:46 src/gui/windows/statuswindow.cpp:241 -msgid "Basic" -msgstr "" - -#. TRANSLATORS: input tab sub tab name -#. TRANSLATORS: long button name for shortcuts window. -#: src/gui/setupinputpages.cpp:50 src/gui/windowmenu.cpp:173 -msgid "Shortcuts" -msgstr "" - -#. TRANSLATORS: input tab sub tab name -#. TRANSLATORS: settings group -#. TRANSLATORS: long button name for windows list menu. -#. TRANSLATORS: input action label -#: src/gui/setupinputpages.cpp:52 src/gui/widgets/tabs/setup_misc.cpp:420 -#: src/gui/windowmenu.cpp:250 src/input/pages/windows.cpp:34 -msgid "Windows" -msgstr "" - -#. TRANSLATORS: input tab sub tab name -#. TRANSLATORS: inventory type name -#: src/gui/setupinputpages.cpp:54 src/resources/inventory/inventory.cpp:386 -msgid "Craft" -msgstr "" - -#. TRANSLATORS: input tab sub tab name -#. TRANSLATORS: emotes window name -#. TRANSLATORS: emotes tab name -#: src/gui/setupinputpages.cpp:56 src/gui/windows/emotewindow.cpp:61 -#: src/gui/windows/emotewindow.cpp:130 -msgid "Emotes" -msgstr "" - -#. TRANSLATORS: input tab sub tab name -#. TRANSLATORS: settings tab name -#. TRANSLATORS: longt button name for chat window. -#. TRANSLATORS: chat window name -#: src/gui/setupinputpages.cpp:60 src/gui/widgets/tabs/setup_chat.cpp:40 -#: src/gui/windowmenu.cpp:115 src/gui/windows/chatwindow.cpp:95 -msgid "Chat" -msgstr "" - -#. TRANSLATORS: input tab sub tab name -#. TRANSLATORS: palette label -#. TRANSLATORS: settings group -#. TRANSLATORS: input action group -#. TRANSLATORS: input action name -#: src/gui/setupinputpages.cpp:62 src/gui/userpalette.cpp:474 -#: src/gui/widgets/tabs/setup_audio.cpp:188 -#: src/gui/widgets/tabs/setup_chat.cpp:325 -#: src/gui/widgets/tabs/setup_misc.cpp:505 -#: src/gui/widgets/tabs/setup_visual.cpp:223 src/input/pages/chat.cpp:145 -#: src/input/pages/gui.cpp:85 src/input/pages/other.cpp:106 -msgid "Other" -msgstr "" - -#. TRANSLATORS: input tab sub tab name -#: src/gui/setupinputpages.cpp:64 -msgid "Gui" -msgstr "" - -#. TRANSLATORS: palette label -#: src/gui/userpalette.cpp:140 -msgid "Beings" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:145 -msgid "Being" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:151 -msgid "Friend names" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:157 -msgid "Disregarded names" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:163 -msgid "Ignored names" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:169 -msgid "Erased names" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:181 -msgid "Other players names" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:187 -msgid "Own name" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:193 -msgid "GM names" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:199 -msgid "NPCs" -msgstr "" - -#. TRANSLATORS: palette color -#. TRANSLATORS: settings option -#: src/gui/userpalette.cpp:205 src/gui/widgets/tabs/setup_misc.cpp:133 -msgid "Monsters" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:211 -msgid "Pets" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:229 -msgid "Skill unit" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:235 -msgid "Party members" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:241 -msgid "Guild members" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:247 src/gui/userpalette.cpp:253 -#: src/gui/userpalette.cpp:259 -#, c-format -msgid "Team %d" -msgstr "" - -#. TRANSLATORS: palette label -#: src/gui/userpalette.cpp:263 -msgid "Particles" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:268 -msgid "Particle effects" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:274 -msgid "Pickup notification" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:280 -msgid "Exp notification" -msgstr "" - -#. TRANSLATORS: palette label -#: src/gui/userpalette.cpp:284 -msgid "Hp bars" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:289 -msgid "Player HP bar" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:294 -msgid "Player HP bar (second color)" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:300 -msgid "Monster HP bar" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:306 -msgid "Monster HP bar (second color)" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:312 -msgid "Homunculus HP bar" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:318 -msgid "Homunculus HP bar (second color)" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:324 -msgid "Mercenary HP bar" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:330 -msgid "Mercenary HP bar (second color)" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:337 -msgid "Elemental HP bar" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:343 -msgid "Elemental HP bar (second color)" -msgstr "" - -#. TRANSLATORS: palette label -#: src/gui/userpalette.cpp:347 -msgid "Hits" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:352 -msgid "Player hits monster" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:358 -msgid "Monster hits player" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:364 -msgid "Other player hits local player" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:370 -msgid "Critical Hit" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:376 -msgid "Local player hits monster" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:382 -msgid "Local player critical hit" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:388 -msgid "Local player miss" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:393 -msgid "Misses" -msgstr "" - -#. TRANSLATORS: palette label -#: src/gui/userpalette.cpp:397 -msgid "Tiles" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:402 -msgid "Portal highlight" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:408 -msgid "Default collision highlight" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:414 -msgid "Air collision highlight" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:420 -msgid "Water collision highlight" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:426 -msgid "Monster collision highlight" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:432 -msgid "Special ground collision highlight" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:438 -msgid "Walkable highlight" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:444 -msgid "Tiles border" -msgstr "" - -#. TRANSLATORS: palette label -#: src/gui/userpalette.cpp:447 -msgid "Ranges" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:452 -msgid "Local player attack range" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:458 -msgid "Local player attack range border" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:464 -msgid "Monster attack range" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:470 -msgid "Skill attack range border" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:479 -msgid "Floor item amount color" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:485 -msgid "Home place" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:491 -msgid "Home place border" -msgstr "" - -#. TRANSLATORS: palette color -#: src/gui/userpalette.cpp:497 -msgid "Road point" -msgstr "" - -#. TRANSLATORS: status window label -#. TRANSLATORS: status bar label -#. TRANSLATORS: sell dialog button -#. TRANSLATORS: buy dialog button -#. TRANSLATORS: status bar label -#: src/gui/widgets/attrs/changedisplay.cpp:48 -#: src/gui/widgets/attrs/changedisplay.cpp:70 -#: src/gui/widgets/selldialog.cpp:155 src/gui/windows/buydialog.cpp:360 -#: src/gui/windows/statuswindow.cpp:459 src/gui/windows/statuswindow.cpp:522 -msgid "Max" -msgstr "" - -#. TRANSLATORS: status window label (plus sign) -#. TRANSLATORS: sell dialog button -#. TRANSLATORS: This is a narrow symbol used to denote 'increasing'. -#. You may change this symbol if your language uses another. -#. TRANSLATORS: item amount window button -#. TRANSLATORS: npc dialog button -#: src/gui/widgets/attrs/changedisplay.cpp:50 -#: src/gui/widgets/selldialog.cpp:143 src/gui/windows/buydialog.cpp:333 -#: src/gui/windows/itemamountwindow.cpp:209 -#: src/gui/windows/itemamountwindow.cpp:263 src/gui/windows/npcdialog.cpp:127 -msgid "+" -msgstr "" - -#. TRANSLATORS: character level -#: src/gui/widgets/characterdisplay.cpp:142 -#, c-format -msgid "Level: %u" -msgstr "" - -#. TRANSLATORS: character money -#. TRANSLATORS: money label -#. TRANSLATORS: status window label -#: src/gui/widgets/characterdisplay.cpp:146 -#: src/gui/windows/inventorywindow.cpp:794 src/gui/windows/statuswindow.cpp:76 -#: src/gui/windows/statuswindow.cpp:223 src/gui/windows/statuswindow.cpp:315 -#, c-format -msgid "Money: %s" -msgstr "" - -#. TRANSLATORS: Text under equipped items (should be small) -#: src/gui/widgets/itemcontainer.cpp:431 src/gui/widgets/itemcontainer.cpp:553 -msgid "Eq." -msgstr "" - -#. TRANSLATORS: dialog message -#: src/gui/widgets/itemlinkhandler.cpp:89 -msgid "Run command" -msgstr "" - -#. TRANSLATORS: dialog message -#: src/gui/widgets/itemlinkhandler.cpp:121 -msgid "Open url" -msgstr "" - -#. TRANSLATORS: sell dialog button -#. TRANSLATORS: mail edit window button -#. TRANSLATORS: npc dialog button -#. TRANSLATORS: servers dialog button -#. TRANSLATORS: shop window label -#. TRANSLATORS: trade window button -#: src/gui/widgets/selldialog.cpp:115 src/gui/windows/buydialog.cpp:339 -#: src/gui/windows/maileditwindow.cpp:61 src/gui/windows/npcdialog.cpp:136 -#: src/gui/windows/serverdialog.cpp:113 src/gui/windows/shopwindow.cpp:127 -#: src/gui/windows/tradewindow.cpp:89 -msgid "Add" -msgstr "" - -#. TRANSLATORS: sell dialog button -#. TRANSLATORS: buy dialog button -#. TRANSLATORS: quit dialog name -#. TRANSLATORS: quit dialog button -#. TRANSLATORS: servers dialog button -#. TRANSLATORS: sell dialog button -#. TRANSLATORS: input action name -#: src/gui/widgets/selldialog.cpp:121 src/gui/windows/buydialog.cpp:358 -#: src/gui/windows/quitdialog.cpp:51 src/gui/windows/quitdialog.cpp:56 -#: src/gui/windows/quitdialog.cpp:58 src/gui/windows/serverdialog.cpp:108 -#: src/gui/windows/textselectdialog.cpp:96 src/input/pages/basic.cpp:226 -msgid "Quit" -msgstr "" - -#. TRANSLATORS: sell dialog button -#. TRANSLATORS: This is a narrow symbol used to denote 'decreasing'. -#. You may change this symbol if your language uses another. -#. TRANSLATORS: item amount window button -#. TRANSLATORS: npc dialog button -#: src/gui/widgets/selldialog.cpp:149 src/gui/windows/buydialog.cpp:336 -#: src/gui/windows/itemamountwindow.cpp:203 -#: src/gui/windows/itemamountwindow.cpp:257 src/gui/windows/npcdialog.cpp:129 -msgid "-" -msgstr "" - -#. TRANSLATORS: sell dialog label -#. TRANSLATORS: buy dialog label -#: src/gui/widgets/selldialog.cpp:165 src/gui/widgets/selldialog.cpp:391 -#: src/gui/windows/buydialog.cpp:319 src/gui/windows/buydialog.cpp:768 -#, c-format -msgid "Price: %s / Total: %s" -msgstr "" - -#. TRANSLATORS: setup item button -#. TRANSLATORS: servers dialog button -#: src/gui/widgets/setupitem.cpp:378 src/gui/widgets/setupitem.cpp:523 -#: src/gui/windows/serverdialog.cpp:115 -msgid "Edit" -msgstr "" - -#. TRANSLATORS: status window label -#: src/gui/widgets/statspagebasic.cpp:71 src/gui/widgets/statspagebasic.cpp:102 -#, c-format -msgid "Character points: %d" -msgstr "" - -#. TRANSLATORS: battle chat tab name -#: src/gui/widgets/tabs/chat/battletab.cpp:35 -msgid "Battle" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/widgets/tabs/chat/chattab.cpp:175 -msgid "Global announcement:" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/widgets/tabs/chat/chattab.cpp:181 -#, c-format -msgid "Global announcement from %s:" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/widgets/tabs/chat/chattab.cpp:207 -#, c-format -msgid "%s whispers: %s" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/widgets/tabs/chat/chattab.cpp:555 -#, c-format -msgid "%s is now Online." -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/widgets/tabs/chat/chattab.cpp:563 -#, c-format -msgid "%s is now Offline." -msgstr "" - -#. TRANSLATORS: clan chat tab name -#. TRANSLATORS: long button name for clan window. -#. TRANSLATORS: clan window name -#: src/gui/widgets/tabs/chat/clantab.cpp:39 src/gui/windowmenu.cpp:227 -#: src/gui/windows/clanwindow.cpp:41 -msgid "Clan" -msgstr "" - -#. TRANSLATORS: guild chat tab name -#. TRANSLATORS: tab in social window -#: src/gui/widgets/tabs/chat/emulateguildtab.cpp:42 -#: src/gui/widgets/tabs/chat/guildtab.cpp:47 -#: src/gui/widgets/tabs/socialguildtab2.h:49 -#: src/gui/widgets/tabs/socialguildtab.h:52 -msgid "Guild" -msgstr "" - -#. TRANSLATORS: gb tab name -#: src/gui/widgets/tabs/chat/gmtab.cpp:37 -msgid "GM" -msgstr "" - -#. TRANSLATORS: lang chat tab name -#: src/gui/widgets/tabs/chat/langtab.cpp:32 -msgid "Lang" -msgstr "" - -#. TRANSLATORS: party chat tab name -#. TRANSLATORS: tab in social window -#: src/gui/widgets/tabs/chat/partytab.cpp:48 -#: src/gui/widgets/tabs/socialpartytab.h:54 -msgid "Party" -msgstr "" - -#. TRANSLATORS: not in clan label -#: src/gui/widgets/tabs/clanwindowtabs.cpp:57 -msgid "Not in clan" -msgstr "" - -#. TRANSLATORS: clan name label -#: src/gui/widgets/tabs/clanwindowtabs.cpp:66 -msgid "Clan name" -msgstr "" - -#. TRANSLATORS: clan master name label -#: src/gui/widgets/tabs/clanwindowtabs.cpp:70 -msgid "Master name" -msgstr "" - -#. TRANSLATORS: clan map name label -#: src/gui/widgets/tabs/clanwindowtabs.cpp:74 -msgid "Map name" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:52 -#: src/gui/widgets/tabs/mapdebugtab.cpp:202 -#: src/gui/widgets/tabs/mapdebugtab.cpp:259 -msgid "Music:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:54 -#: src/gui/widgets/tabs/mapdebugtab.cpp:208 -#: src/gui/widgets/tabs/mapdebugtab.cpp:263 -msgid "Map:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:56 -#: src/gui/widgets/tabs/mapdebugtab.cpp:211 -#: src/gui/widgets/tabs/mapdebugtab.cpp:265 -msgid "Map name:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:58 -#: src/gui/widgets/tabs/mapdebugtab.cpp:205 -#: src/gui/widgets/tabs/mapdebugtab.cpp:261 -msgid "Minimap:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:61 -#: src/gui/widgets/tabs/mapdebugtab.cpp:199 -#: src/gui/widgets/tabs/mapdebugtab.cpp:257 -msgid "Cursor:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:64 -msgid "Particle count:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:67 -#: src/gui/widgets/tabs/mapdebugtab.cpp:223 -#: src/gui/widgets/tabs/mapdebugtab.cpp:268 -msgid "Map actors count:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:71 -#: src/gui/widgets/tabs/mapdebugtab.cpp:228 -#: src/gui/widgets/tabs/mapdebugtab.cpp:272 -msgid "Map atlas count:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:74 -#: src/gui/widgets/tabs/mapdebugtab.cpp:178 -#: src/gui/widgets/tabs/mapdebugtab.cpp:184 -msgid "Player Position:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:80 -#: src/gui/widgets/tabs/mapdebugtab.cpp:240 -msgid "Draw calls:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:85 -#: src/gui/widgets/tabs/mapdebugtab.cpp:248 -msgid "Texture binds:" -msgstr "" - -#. TRANSLATORS: debug window label, frames per second -#: src/gui/widgets/tabs/mapdebugtab.cpp:88 -#, c-format -msgid "%d FPS" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:99 -#: src/gui/widgets/tabs/mapdebugtab.cpp:132 -#, c-format -msgid "%d FPS (Software)" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:106 -#, c-format -msgid "%d FPS (normal OpenGL)" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:110 -#, c-format -msgid "%d FPS (safe OpenGL)" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:114 -#, c-format -msgid "%d FPS (mobile OpenGL ES)" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:118 -#, c-format -msgid "%d FPS (mobile OpenGL ES 2)" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:122 -#, c-format -msgid "%d FPS (modern OpenGL)" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:126 -#, c-format -msgid "%d FPS (SDL2 default)" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:154 -#: src/gui/widgets/tabs/mapdebugtab.cpp:233 -msgid "Textures count:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/mapdebugtab.cpp:218 -#, c-format -msgid "Particle count: %d" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/netdebugtab.cpp:60 -#: src/gui/widgets/tabs/netdebugtab.cpp:66 -#, c-format -msgid "Ping: %s ms" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/netdebugtab.cpp:69 -#, c-format -msgid "In: %d bytes/s" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/netdebugtab.cpp:72 -#, c-format -msgid "Out: %d bytes/s" -msgstr "" - -#. TRANSLATORS: audio tab in settings -#: src/gui/widgets/tabs/setup_audio.cpp:48 -msgid "Audio" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:56 -msgid "Basic settings" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:60 -msgid "Enable Audio" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:64 -msgid "Enable music" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:69 -msgid "Enable game sfx" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:74 -msgid "Enable gui sfx" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:79 -msgid "Sfx volume" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:86 -msgid "Music volume" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:93 -msgid "Enable music fade out" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:98 -msgid "Audio frequency" -msgstr "" - -#. TRANSLATORS: audio type -#: src/gui/widgets/tabs/setup_audio.cpp:103 -msgid "mono" -msgstr "" - -#. TRANSLATORS: audio type -#: src/gui/widgets/tabs/setup_audio.cpp:105 -msgid "stereo" -msgstr "" - -#. TRANSLATORS: audio type -#: src/gui/widgets/tabs/setup_audio.cpp:107 -msgid "surround" -msgstr "" - -#. TRANSLATORS: audio type -#: src/gui/widgets/tabs/setup_audio.cpp:109 -msgid "surround+center+lfe" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:111 -msgid "Audio channels" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:118 -msgid "Parallel number of sounds" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_audio.cpp:124 -msgid "Sound effects" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:128 -msgid "Information dialog sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:133 -msgid "Request dialog sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:138 -msgid "Whisper message sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:143 -msgid "Guild message sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:148 -msgid "Party message sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:153 -msgid "Clan message sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:158 -msgid "Highlight message sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:163 -msgid "Global message sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:168 -msgid "Error message sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:173 -msgid "Trade request sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:178 -msgid "Show window sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:183 -msgid "Hide window sound" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:193 -msgid "Enable mumble voice chat" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_audio.cpp:199 -msgid "Download music" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_chat.cpp:48 -msgid "Window" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:52 -msgid "Auto hide chat window" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:54 -msgid "" -"Chat window will be automatically hidden when not in use.\n" -"\n" -"Hit Enter or hover mouse to show chat again." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:60 -msgid "Protect chat focus" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:62 -msgid "" -"Enables aggressive protection of input focus in chat window.\n" -"\n" -"Note: no other text inputs will be allowed to receive text input when you " -"typing in chat window." -msgstr "" - -#. TRANSLATORS: settings group -#. TRANSLATORS: settings colors tab name -#. TRANSLATORS: emotes tab name -#: src/gui/widgets/tabs/setup_chat.cpp:70 -#: src/gui/widgets/tabs/setup_colors.cpp:90 src/gui/windows/emotewindow.cpp:132 -msgid "Colors" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:74 -msgid "Remove colors from received chat messages" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:76 -msgid "" -"Enable this setting to strip colors from incoming chat messages. All " -"messages will use default chat text color if this enabled." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:82 -msgid "Show chat colors list" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:84 -msgid "" -"Enable this setting to show color selection drop-down in chat window. Chat " -"window will display color selection drop-down.\n" -"\n" -"It allows one to select default color of outgoing chat messages easily, but " -"also occupies some space in chat window." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:97 -msgid "Allow magic and GM commands in all chat tabs" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:99 -msgid "" -"Enable this setting to be able to type spells and GM commands in any tab." -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_chat.cpp:106 -msgid "Limits" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:110 -msgid "Limit max chars in chat line" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:112 -msgid "" -"Limits how many characters will be shown in longest lines of text displayed " -"in chat.\n" -"\n" -"Note: long lines can make client slower. Lines longer than this limit will " -"be truncated." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:120 -msgid "Limit max lines in chat" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:122 -msgid "" -"Limits how many lines chat will keep in scrollback buffer. Chat keeps " -"specified number of last lines of text. Oldest lines exceeding this limit " -"are discarded from scrollback buffer.\n" -"\n" -"Note: keeping too many lines in scroll buffer can slow client down." -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_chat.cpp:131 -msgid "Logs" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:135 -msgid "Enable chat Log" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:137 -msgid "" -"If you enable this setting, chat logs will be written to disk.\n" -"\n" -"Note: chat logs can take noticeable amount of disk space over time." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:143 -msgid "Enable debug chat Log" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:145 -msgid "If you enable this, debug chat tab also will be logged to disk." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:150 -msgid "Show chat history" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:152 -msgid "" -"If this setting enabled, client will load old chat tabs content from logs on " -"startup instead of starting with empty chat tabs." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:158 -msgid "Show party online messages" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:160 -msgid "" -"If this setting is enabled, online status changes of party members will be " -"shown in party tab of chat.\n" -"\n" -"This adds some extra noise to chat, but allows one to see when your buddies " -"are coming online." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:167 -msgid "Show guild online messages" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:169 -msgid "" -"If this setting is enabled, online status changes of guild members will be " -"shown in guild tab of chat.\n" -"\n" -"This adds some extra noise to chat, but allows one to see when your buddies " -"are coming online." -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_chat.cpp:177 -msgid "Messages" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:181 -msgid "Hide shop messages" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:183 -msgid "" -"If this setting enabled, no messages related to built-in ManaPlus shop will " -"be displayed in chat. Disable this setting if you want to see shop-related " -"messages.\n" -"\n" -"Note: technically, ManaPlus shop implemented as usual private messages with " -"special content. If you disable this setting, you will be able to see these " -"messages and get idea when other players are looking at your shop." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:193 -msgid "Show MVP messages" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:195 -msgid "" -"Enable this setting to see MVP messages from server.\n" -"\n" -"Note: MVP messages are not used on TMW/Evol/etc servers, so this feature " -"usually makes little difference." -msgstr "" - -#. TRANSLATORS: settings group -#. TRANSLATORS: input action group -#. TRANSLATORS: input action label -#: src/gui/widgets/tabs/setup_chat.cpp:203 src/input/pages/chat.cpp:61 -#: src/input/pages/windows.cpp:214 -msgid "Tabs" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:207 -msgid "Put all whispers in tabs" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:209 -msgid "" -"If this setting enabled, all whispers (private messages) will be placed in " -"separate tabs, separate tab for each player. If this setting disabled, all " -"whispers will appear in General tab.\n" -"\n" -"Note: putting all whispers to single General tab is known to be confusing. " -"Think twice before disabling this feature." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:218 -msgid "Log magic messages in debug tab" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:220 -msgid "" -"If this setting is enabled, spell invocation will be shown in Debug tab. If " -"disabled, it will be shown in General tab instead.\n" -"\n" -"Note: it does not affects server replies related to spells." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:227 -msgid "Show server messages in debug tab" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:229 -msgid "" -"If this setting is enabled, server messages will be shown in Debug tab of " -"chat. If disabled, server messages will appear in General chat instead.\n" -"\n" -"Note: according to 4144, disabling this could also make you to lose some " -"debug messages from client in Debug tab since these are fake server messages." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:238 -msgid "Enable trade tab" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:240 -msgid "" -"Enables trade tab. Trade tab is basically some filter. Messages containing " -"words typical for trades will go to Trade tab. This will make General tab " -"less noisy. If this setting is disabled, all trade related players messages " -"will stay in General tab." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:248 -msgid "Enable gm tab" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:250 -msgid "" -"If enabled, GM tab will appear in chat. It displays text related GM " -"activity.\n" -"\n" -"Note: this setting only makes difference for GMs (Game Masters) since this " -"tab only appears for GMs." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:257 -msgid "Enable language tab" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:259 -msgid "" -"If this feature enabled, language tab will appear if server supports this " -"feature.\n" -"\n" -"Note: only supported by Evol server yet." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:265 -msgid "Show all languages messages" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:267 -msgid "" -"If this setting enabled and server supports different chats for different " -"languages, you will see messages for all languages, regardless of your " -"language preferences.\n" -"\n" -"Note: it only works on servers supporting language tabs feature, like Evol." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:275 -msgid "Enable battle tab" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:277 -msgid "" -"If this setting enabled, Battle tab will appear in chat. This tab will " -"contain messages related to battles, like damage and experience gain, if " -"battle messages are enabled.\n" -"\n" -"Note: client restart required to take effect." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:285 -msgid "Show battle events" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:287 -msgid "" -"If this setting enabled, messages related to battle like damage or " -"experience gain will be displayed in Debug or Battle tab. If disabled, no " -"battle messages will be displayed." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:294 -msgid "Resize chat tabs if need" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:296 -msgid "" -"If this feature enabled, text in chat will be automatically adjusted to " -"adapt to appearance of chat input field when you typing message and when " -"input field of chat disappears. If disabled, chat input area will always " -"occupy its place, which could be otherwise usable for text.\n" -"\n" -"Note: its mostly about jumpy attitude vs less usable space for text." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:307 -msgid "Enable trade spam filter" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_chat.cpp:313 -msgid "Time" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:317 -msgid "Use local time" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:319 -msgid "" -"If this feature enabled, timestamps in chat will use local times. If " -"disabled, server time will be used (often it is GMT+0)." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:329 -msgid "Highlight words (separated by comma)" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:331 -msgid "" -"Here you can specify some extra words which will also cause highlighting. " -"Use comma to separate words.\n" -"\n" -"Note: frequent highlights are annoying - use it with caution." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:338 -msgid "Globals ignore names (separated by comma)" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:340 -msgid "" -"This setting allows you to ignore some global messages if particular sender " -"(NPC, GM) annoys you too much. Global will be moved to Debug instead.\n" -"\n" -"Note: careless use of this feature can make you to miss important announces!" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:348 -msgid "Show emotes button in chat" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:350 -msgid "" -"If this setting enabled, button will appear near text input field. This " -"button allows one to invoke composing window, which allows one to insert " -"smiles and text formatting easily.\n" -"\n" -"Note: same window can also be invoked by hotkey when typing, usually F1 by " -"default." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_chat.cpp:359 -msgid "Show motd server message on start" -msgstr "" - -#. TRANSLATORS: settings description -#: src/gui/widgets/tabs/setup_chat.cpp:361 -msgid "" -"If this setting enabled, client will display server MOTD (message of the " -"day) once you connect to server. Disable it to hide MOTD." -msgstr "" - -#. TRANSLATORS: color selection preview message -#: src/gui/widgets/tabs/setup_colors.cpp:50 -msgid "This is what the color looks like" -msgstr "" - -#. TRANSLATORS: colors tab. label. -#: src/gui/widgets/tabs/setup_colors.cpp:65 -msgid "Type:" -msgstr "" - -#. TRANSLATORS: colors tab. label. -#: src/gui/widgets/tabs/setup_colors.cpp:69 -#: src/gui/widgets/tabs/setup_colors.cpp:376 -msgid "Delay:" -msgstr "" - -#. TRANSLATORS: colors tab. label. -#: src/gui/widgets/tabs/setup_colors.cpp:74 -msgid "Red:" -msgstr "" - -#. TRANSLATORS: colors tab. label. -#: src/gui/widgets/tabs/setup_colors.cpp:79 -msgid "Green:" -msgstr "" - -#. TRANSLATORS: colors tab. label. -#: src/gui/widgets/tabs/setup_colors.cpp:84 -msgid "Blue:" -msgstr "" - -#. TRANSLATORS: color type -#: src/gui/widgets/tabs/setup_colors.cpp:109 -#: src/gui/widgets/tabs/setup_colors.cpp:447 -msgid "Static" -msgstr "" - -#. TRANSLATORS: color type -#: src/gui/widgets/tabs/setup_colors.cpp:113 -#: src/gui/widgets/tabs/setup_colors.cpp:116 -#: src/gui/widgets/tabs/setup_colors.cpp:449 -msgid "Pulse" -msgstr "" - -#. TRANSLATORS: color type -#: src/gui/widgets/tabs/setup_colors.cpp:119 -#: src/gui/widgets/tabs/setup_colors.cpp:122 -#: src/gui/widgets/tabs/setup_colors.cpp:451 -msgid "Rainbow" -msgstr "" - -#. TRANSLATORS: color type -#: src/gui/widgets/tabs/setup_colors.cpp:125 -#: src/gui/widgets/tabs/setup_colors.cpp:128 -#: src/gui/widgets/tabs/setup_colors.cpp:451 -msgid "Spectrum" -msgstr "" - -#. TRANSLATORS: colors tab. label. -#: src/gui/widgets/tabs/setup_colors.cpp:370 -msgid "Alpha:" -msgstr "" - -#. TRANSLATORS: button in input settings tab -#: src/gui/widgets/tabs/setup_input.cpp:65 -msgid "Assign" -msgstr "" - -#. TRANSLATORS: button in input settings tab -#: src/gui/widgets/tabs/setup_input.cpp:68 -msgid "Unassign" -msgstr "" - -#. TRANSLATORS: button in input settings tab -#: src/gui/widgets/tabs/setup_input.cpp:74 -msgid "Reset all keys" -msgstr "" - -#. TRANSLATORS: setting tab name -#: src/gui/widgets/tabs/setup_input.cpp:84 -msgid "Input" -msgstr "" - -#. TRANSLATORS: input settings error header -#: src/gui/widgets/tabs/setup_input.cpp:164 -msgid "Key Conflict(s) Detected." -msgstr "" - -#. TRANSLATORS: input settings error -#: src/gui/widgets/tabs/setup_input.cpp:166 -#, c-format -msgid "" -"Conflict \"%s\" and \"%s\" keys. Resolve them, or gameplay may result in " -"strange behaviour." -msgstr "" - -#. TRANSLATORS: unknown key name -#. TRANSLATORS: quests window quest name -#: src/gui/widgets/tabs/setup_input.cpp:338 src/resources/db/questdb.cpp:62 -#: src/resources/db/questdb.cpp:255 src/resources/db/questdb.cpp:261 -msgid "unknown" -msgstr "" - -#. TRANSLATORS: joystick settings tab label -#: src/gui/widgets/tabs/setup_joystick.cpp:47 -#: src/gui/widgets/tabs/setup_joystick.cpp:143 -msgid "Press the button to start calibration" -msgstr "" - -#. TRANSLATORS: joystick settings tab button -#: src/gui/widgets/tabs/setup_joystick.cpp:49 -#: src/gui/widgets/tabs/setup_joystick.cpp:140 -msgid "Calibrate" -msgstr "" - -#. TRANSLATORS: joystick settings tab button -#: src/gui/widgets/tabs/setup_joystick.cpp:52 -msgid "Detect joysticks" -msgstr "" - -#. TRANSLATORS: joystick settings tab checkbox -#: src/gui/widgets/tabs/setup_joystick.cpp:55 -msgid "Enable joystick" -msgstr "" - -#. TRANSLATORS: joystick settings tab checkbox -#: src/gui/widgets/tabs/setup_joystick.cpp:62 -msgid "Use joystick if client window inactive" -msgstr "" - -#. TRANSLATORS: joystick settings tab name -#: src/gui/widgets/tabs/setup_joystick.cpp:68 -msgid "Joystick" -msgstr "" - -#. TRANSLATORS: joystick settings tab button -#: src/gui/widgets/tabs/setup_joystick.cpp:149 -msgid "Stop" -msgstr "" - -#. TRANSLATORS: joystick settings tab label -#: src/gui/widgets/tabs/setup_joystick.cpp:152 -msgid "Rotate the stick and don't press buttons" -msgstr "" - -#. TRANSLATORS: show buttons at top right corner type -#: src/gui/widgets/tabs/setup_misc.cpp:50 -msgid "Always show" -msgstr "" - -#. TRANSLATORS: show buttons at top right corner type -#: src/gui/widgets/tabs/setup_misc.cpp:52 -msgid "Auto hide in small resolution" -msgstr "" - -#. TRANSLATORS: show buttons at top right corner type -#: src/gui/widgets/tabs/setup_misc.cpp:54 -msgid "Always auto hide" -msgstr "" - -#. TRANSLATORS: Proxy type selection -#: src/gui/widgets/tabs/setup_misc.cpp:62 -msgid "System proxy" -msgstr "" - -#. TRANSLATORS: Proxy type selection -#: src/gui/widgets/tabs/setup_misc.cpp:64 -msgid "Direct connection" -msgstr "" - -#. TRANSLATORS: Proxy type selection -#: src/gui/widgets/tabs/setup_misc.cpp:71 -msgid "SOCKS5 hostname" -msgstr "" - -#. TRANSLATORS: screen density type -#. TRANSLATORS: ambient effect type -#. TRANSLATORS: particle details -#: src/gui/widgets/tabs/setup_misc.cpp:81 -#: src/gui/widgets/tabs/setup_visual.cpp:59 -#: src/gui/widgets/tabs/setup_visual.cpp:184 -msgid "low" -msgstr "" - -#. TRANSLATORS: screen density type -#. TRANSLATORS: particle details -#: src/gui/widgets/tabs/setup_misc.cpp:83 -#: src/gui/widgets/tabs/setup_visual.cpp:186 -msgid "medium" -msgstr "" - -#. TRANSLATORS: screen density type -#: src/gui/widgets/tabs/setup_misc.cpp:85 -msgid "tv" -msgstr "" - -#. TRANSLATORS: screen density type -#. TRANSLATORS: ambient effect type -#. TRANSLATORS: particle details -#: src/gui/widgets/tabs/setup_misc.cpp:87 -#: src/gui/widgets/tabs/setup_visual.cpp:61 -#: src/gui/widgets/tabs/setup_visual.cpp:188 -msgid "high" -msgstr "" - -#. TRANSLATORS: screen density type -#: src/gui/widgets/tabs/setup_misc.cpp:89 -msgid "xhigh" -msgstr "" - -#. TRANSLATORS: screen density type -#: src/gui/widgets/tabs/setup_misc.cpp:91 -msgid "xxhigh" -msgstr "" - -#. TRANSLATORS: sdl2 log level -#: src/gui/widgets/tabs/setup_misc.cpp:102 -msgid "verbose" -msgstr "" - -#. TRANSLATORS: sdl2 log level -#: src/gui/widgets/tabs/setup_misc.cpp:104 -msgid "debug" -msgstr "" - -#. TRANSLATORS: sdl2 log level -#: src/gui/widgets/tabs/setup_misc.cpp:106 -msgid "info" -msgstr "" - -#. TRANSLATORS: sdl2 log level -#: src/gui/widgets/tabs/setup_misc.cpp:108 -msgid "warn" -msgstr "" - -#. TRANSLATORS: sdl2 log level -#: src/gui/widgets/tabs/setup_misc.cpp:110 -msgid "error" -msgstr "" - -#. TRANSLATORS: sdl2 log level -#: src/gui/widgets/tabs/setup_misc.cpp:112 -msgid "critical" -msgstr "" - -#. TRANSLATORS: misc tab in settings -#: src/gui/widgets/tabs/setup_misc.cpp:126 -msgid "Misc" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:137 -msgid "Show damage inflicted to monsters" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:142 -msgid "Auto target only reachable monsters" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:147 -msgid "Select auto target for attack skills" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:152 -msgid "Highlight monster attack range" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:158 -msgid "Show monster hp bar" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:163 -msgid "Cycle monster targets" -msgstr "" - -#. TRANSLATORS: settings group -#. TRANSLATORS: long button name for map window. -#. TRANSLATORS: debug window tab -#. TRANSLATORS: mini map window name -#: src/gui/widgets/tabs/setup_misc.cpp:169 src/gui/windowmenu.cpp:150 -#: src/gui/windows/debugwindow.cpp:68 src/gui/windows/minimap.cpp:66 -#: src/gui/windows/minimap.cpp:129 -msgid "Map" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:173 -msgid "Show warps particles" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:178 -msgid "Highlight map portals" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:183 -msgid "Highlight floor items" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:188 -msgid "Highlight player attack range" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:193 -msgid "Show extended minimaps" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:198 -msgid "Draw path" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:203 -msgid "Draw hotkeys on map" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:208 -msgid "Enable lazy scrolling" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:213 -msgid "Scroll laziness" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:218 -msgid "Scroll radius" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:223 -msgid "Auto resize minimaps" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:228 -msgid "Play map animations" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_misc.cpp:234 -msgid "Moving" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:238 -msgid "Auto fix position" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:243 -msgid "Show server side position" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:248 -msgid "Attack while moving" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:253 -msgid "Attack next target" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:258 -msgid "Sync player move" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:263 -msgid "Sync player move distance" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:269 -msgid "Crazy move A program" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:274 -msgid "Mouse relative moves (good for touch interfaces)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:284 -msgid "Show own hp bar" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:289 -msgid "Enable quick stats" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:294 -msgid "Cycle player targets" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:299 -msgid "Show job exp messages" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:304 -msgid "Show players popups" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:309 -msgid "Afk message" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:314 -msgid "Show job" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:319 -msgid "Enable attack filter" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:324 -msgid "Enable pickup filter" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:329 -msgid "Enable advert protocol" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:334 -msgid "Enabled pets support" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:339 -msgid "Enable weight notifications" -msgstr "" - -#. TRANSLATORS: settings group -#. TRANSLATORS: long button name for shop window. -#. TRANSLATORS: shop window name -#. TRANSLATORS: shop button tooltip -#: src/gui/widgets/tabs/setup_misc.cpp:344 src/gui/windowmenu.cpp:197 -#: src/gui/windows/buyselldialog.cpp:43 src/gui/windows/buyselldialog.cpp:54 -#: src/gui/windows/inventorywindow.cpp:269 -msgid "Shop" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:348 -msgid "Accept sell/buy requests" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:353 -msgid "Enable shop mode" -msgstr "" - -#. TRANSLATORS: settings group -#. TRANSLATORS: npc dialog name -#: src/gui/widgets/tabs/setup_misc.cpp:359 src/gui/windows/npcdialog.cpp:99 -msgid "NPC" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:363 -msgid "Cycle npc targets" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:368 -msgid "Log NPC dialogue" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_misc.cpp:374 -msgid "Bots support" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:378 -msgid "Enable guild bot support and disable native guild support" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:385 -msgid "Enable manamarket bot support" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_misc.cpp:393 -msgid "Keyboard" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:397 -msgid "Repeat delay" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:402 -msgid "Repeat interval" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:407 -msgid "Custom repeat interval" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:413 -msgid "Enable alt-tab workaround" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:425 -msgid "Shortcut buttons" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:430 -msgid "Show icons on shortcut buttons" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_misc.cpp:436 -msgid "Proxy server" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:441 -msgid "Proxy type" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:446 -msgid "Proxy address:port" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:451 -msgid "Tunnel through HTTP proxy" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_misc.cpp:457 -msgid "Logging" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:461 -msgid "Enable OpenGL version check (do not disable)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:467 -msgid "Enable debug log" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:472 -msgid "Ignore logging packets" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:477 -msgid "Log unimplemented packets" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:482 -msgid "Enable OpenGL log" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:487 -msgid "Enable input log" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:494 -msgid "SDL logging level" -msgstr "" - -#. TRANSLATORS: settings option -#. TRANSLATORS: input action name -#: src/gui/widgets/tabs/setup_misc.cpp:500 src/input/pages/other.cpp:408 -msgid "Upload log file" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:509 -msgid "Enable server side attack" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:514 -msgid "Hide support page link on error" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:519 -msgid "Enable double clicks" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:524 -msgid "Enable bot checker" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:529 -msgid "Enable buggy servers protection (do not disable)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:535 -msgid "Low traffic mode" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:541 -msgid "Use FBO for screenshots (only for opengl)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:548 -msgid "Screenshot directory" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:555 -msgid "Network delay between sub servers" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:560 -msgid "Show background" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_misc.cpp:566 -msgid "Screen density override" -msgstr "" - -#. TRANSLATORS: mods tab in settings -#: src/gui/widgets/tabs/setup_mods.cpp:43 -msgid "Mods" -msgstr "" - -#. TRANSLATORS: settings label -#: src/gui/widgets/tabs/setup_mods.cpp:78 -msgid "No mods present" -msgstr "" - -#. TRANSLATORS: texture compression type -#. TRANSLATORS: confirm dialog button -#: src/gui/widgets/tabs/setup_perfomance.cpp:46 -#: src/gui/windows/confirmdialog.cpp:47 -msgid "No" -msgstr "" - -#. TRANSLATORS: settings tab name -#. TRANSLATORS: perfoamance tab quick button -#: src/gui/widgets/tabs/setup_perfomance.cpp:61 src/progs/dyecmd/client.cpp:553 -#: src/progs/manaplus/client.cpp:919 -msgid "Performance" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:78 -msgid "Better performance (enable for better performance)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:83 -msgid "Auto adjust performance" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:88 -msgid "Hw acceleration" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:93 -msgid "Enable opacity cache (Software, can use much memory)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:99 -msgid "Enable map reduce (Software)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:105 -msgid "Enable compound sprite delay (Software)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:110 -msgid "Enable delayed images load (OpenGL)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:115 -msgid "Enable texture sampler (OpenGL)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:120 -msgid "Enable OpenGL context creation" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:125 -msgid "Enable OpenGL direct state access" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:131 -msgid "Better quality (disable for better performance)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:136 -msgid "Enable alpha channel fix (Software, can be very slow)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:142 -msgid "Show beings transparency" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:147 -msgid "Enable reorder sprites (need for mods support)." -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:154 -msgid "Small memory (enable for lower memory usage)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:159 -msgid "Disable advanced beings caching (Software)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:164 -msgid "Disable beings caching (Software)" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_perfomance.cpp:171 -msgid "Different options (enable or disable can improve performance)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:179 -msgid "Try first sdl driver (only for SDL2 default mode)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:186 -msgid "Enable texture compression (OpenGL)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:191 -msgid "Enable rectangular texture extension (OpenGL)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:196 -msgid "Use new texture internal format (OpenGL)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:201 -msgid "Enable texture atlases (OpenGL)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:206 -msgid "Cache all sprites per map (can use additional memory)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:212 -msgid "Cache all sounds (can use additional memory)" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_perfomance.cpp:218 -msgid "Critical options (DO NOT change if you don't know what you're doing)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_perfomance.cpp:223 -msgid "Disable logging in game (do not enable)" -msgstr "" - -#. TRANSLATORS: screen badges type -#. TRANSLATORS: visible name type -#: src/gui/widgets/tabs/setup_players.cpp:45 -#: src/gui/widgets/tabs/setup_players.cpp:59 -msgid "hide" -msgstr "" - -#. TRANSLATORS: screen badges type -#: src/gui/widgets/tabs/setup_players.cpp:47 -msgid "show at top" -msgstr "" - -#. TRANSLATORS: screen badges type -#: src/gui/widgets/tabs/setup_players.cpp:49 -msgid "show at right" -msgstr "" - -#. TRANSLATORS: screen badges type -#: src/gui/widgets/tabs/setup_players.cpp:51 -msgid "show at bottom" -msgstr "" - -#. TRANSLATORS: visible name type -#: src/gui/widgets/tabs/setup_players.cpp:61 -msgid "show" -msgstr "" - -#. TRANSLATORS: visible name type -#: src/gui/widgets/tabs/setup_players.cpp:63 -msgid "show on selection" -msgstr "" - -#. TRANSLATORS: show on top or down -#: src/gui/widgets/tabs/setup_players.cpp:71 -msgid "top" -msgstr "" - -#. TRANSLATORS: show on top or down -#: src/gui/widgets/tabs/setup_players.cpp:73 -msgid "bottom" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:90 -msgid "Show gender" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:95 -msgid "Show level" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:100 -msgid "Show own name" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:105 -msgid "Enable extended mouse targeting" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:110 -msgid "Target dead players" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:117 -msgid "Show player names" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:125 -msgid "Show player names at" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:131 -msgid "Auto move names" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:137 -msgid "Badges" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:142 -msgid "Secure trades" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:147 -msgid "Unsecure chars in names" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:152 -msgid "Show statuses" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:157 -msgid "Show ip addresses on screenshots" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:162 -msgid "Allow self heal with mouse click" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:167 -msgid "Group friends in who is online window" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:172 -msgid "Hide erased players nicks" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:177 -msgid "Collect players id and seen log" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:182 -msgid "Use special diagonal speed in players moving" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:187 -msgid "Log players actions (for GM)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:192 -msgid "Create screenshots for each complete trades" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:197 -msgid "" -"Emulate right mouse button by long mouse click (useful for touch interfaces)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:203 -msgid "Enable remote commands" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_players.cpp:209 -msgid "Allow move character by mouse" -msgstr "" - -#. TRANSLATORS: quick tab in settings -#. TRANSLATORS: settings tab name -#: src/gui/widgets/tabs/setup_quick.cpp:45 -#: src/progs/manaplus/actions/windows.cpp:317 -msgid "Quick" -msgstr "" - -#. TRANSLATORS: relations table header -#: src/gui/widgets/tabs/setup_relations.cpp:58 -msgid "Name" -msgstr "" - -#. TRANSLATORS: relations table header -#: src/gui/widgets/tabs/setup_relations.cpp:60 -msgid "Relation" -msgstr "" - -#. TRANSLATORS: relation dialog button -#: src/gui/widgets/tabs/setup_relations.cpp:73 -msgid "Allow trading" -msgstr "" - -#. TRANSLATORS: relation dialog button -#: src/gui/widgets/tabs/setup_relations.cpp:77 -msgid "Allow whispers" -msgstr "" - -#. TRANSLATORS: relation dialog button -#. TRANSLATORS: char select dialog. button. -#. TRANSLATORS: mail window button -#. TRANSLATORS: servers dialog button -#. TRANSLATORS: shop window label -#. TRANSLATORS: command editor button -#. TRANSLATORS: input action name -#: src/gui/widgets/tabs/setup_relations.cpp:81 -#: src/gui/windows/charselectdialog.cpp:83 src/gui/windows/mailwindow.cpp:73 -#: src/gui/windows/serverdialog.cpp:118 src/gui/windows/shopwindow.cpp:129 -#: src/gui/windows/textcommandeditor.cpp:112 src/input/pages/gui.cpp:109 -msgid "Delete" -msgstr "" - -#. TRANSLATORS: relation dialog name -#: src/gui/widgets/tabs/setup_relations.cpp:88 -msgid "Relations" -msgstr "" - -#. TRANSLATORS: relation dialog label -#: src/gui/widgets/tabs/setup_relations.cpp:113 -msgid "When ignoring:" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:63 -msgid "Gui theme" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:71 -msgid "Main Font" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:77 -msgid "Language" -msgstr "" - -#. TRANSLATORS: theme settings label -#. TRANSLATORS: font size -#: src/gui/widgets/tabs/setup_theme.cpp:82 src/gui/windows/emotewindow.cpp:56 -msgid "Bold font" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:87 -msgid "Particle font" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:92 -msgid "Help font" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:97 -msgid "Secure font" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:102 -msgid "Npc font" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:107 -msgid "Japanese font" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:112 -msgid "Chinese font" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:118 -msgid "Font size" -msgstr "" - -#. TRANSLATORS: theme settings label -#: src/gui/widgets/tabs/setup_theme.cpp:124 -msgid "Npc font size" -msgstr "" - -#. TRANSLATORS: button name with information about selected theme -#: src/gui/widgets/tabs/setup_theme.cpp:129 -msgid "i" -msgstr "" - -#. TRANSLATORS: theme settings tab name -#. TRANSLATORS: theme tab quick button -#: src/gui/widgets/tabs/setup_theme.cpp:133 src/progs/dyecmd/client.cpp:559 -#: src/progs/manaplus/client.cpp:925 -msgid "Theme" -msgstr "" - -#. TRANSLATORS: theme name -#: src/gui/widgets/tabs/setup_theme.cpp:255 -msgid "Name: " -msgstr "" - -#. TRANSLATORS: theme copyright -#: src/gui/widgets/tabs/setup_theme.cpp:257 -msgid "Copyright:" -msgstr "" - -#. TRANSLATORS: theme info dialog header -#: src/gui/widgets/tabs/setup_theme.cpp:323 -msgid "Theme info" -msgstr "" - -#. TRANSLATORS: theme message dialog -#: src/gui/widgets/tabs/setup_theme.cpp:358 -msgid "Theme Changed" -msgstr "" - -#. TRANSLATORS: ok dialog message -#. TRANSLATORS: video settings warning -#: src/gui/widgets/tabs/setup_theme.cpp:360 -#: src/gui/widgets/tabs/setup_video.cpp:430 -#: src/gui/widgets/tabs/setup_video.cpp:448 -msgid "Restart your client for the change to take effect." -msgstr "" - -#. TRANSLATORS: onscreen button size -#: src/gui/widgets/tabs/setup_touch.cpp:41 -msgid "Small" -msgstr "" - -#. TRANSLATORS: onscreen button size -#: src/gui/widgets/tabs/setup_touch.cpp:45 -msgid "Medium" -msgstr "" - -#. TRANSLATORS: onscreen button size -#: src/gui/widgets/tabs/setup_touch.cpp:47 -msgid "Large" -msgstr "" - -#. TRANSLATORS: touch settings tab -#: src/gui/widgets/tabs/setup_touch.cpp:69 -msgid "Touch" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:78 -msgid "Onscreen keyboard" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:82 -msgid "Show onscreen keyboard icon" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:87 -msgid "Keyboard icon action" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_touch.cpp:93 -msgid "Onscreen joystick" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:97 -msgid "Show onscreen joystick" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:102 -msgid "Joystick size" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_touch.cpp:108 -msgid "Onscreen buttons" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:112 -msgid "Show onscreen buttons" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:117 -msgid "Buttons format" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:122 -msgid "Buttons size" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_touch.cpp:131 -#, c-format -msgid "Button %u action" -msgstr "" - -#. TRANSLATORS: video settings checkbox -#: src/gui/widgets/tabs/setup_video.cpp:75 -msgid "Full screen" -msgstr "" - -#. TRANSLATORS: video settings checkbox -#: src/gui/widgets/tabs/setup_video.cpp:80 -msgid "FPS limit:" -msgstr "" - -#. TRANSLATORS: video settings label -#: src/gui/widgets/tabs/setup_video.cpp:86 -#: src/gui/widgets/tabs/setup_video.cpp:136 -#: src/gui/widgets/tabs/setup_video.cpp:353 -#: src/gui/widgets/tabs/setup_video.cpp:505 -msgid "Alt FPS limit: " -msgstr "" - -#. TRANSLATORS: video settings button -#: src/gui/widgets/tabs/setup_video.cpp:89 -msgid "Detect best mode" -msgstr "" - -#. TRANSLATORS: video settings checkbox -#: src/gui/widgets/tabs/setup_video.cpp:100 -msgid "High DPI" -msgstr "" - -#. TRANSLATORS: video settings checkbox -#: src/gui/widgets/tabs/setup_video.cpp:106 -msgid "Show cursor" -msgstr "" - -#. TRANSLATORS: video settings checkbox -#: src/gui/widgets/tabs/setup_video.cpp:109 -msgid "Custom cursor" -msgstr "" - -#. TRANSLATORS: video settings checkbox -#: src/gui/widgets/tabs/setup_video.cpp:114 -msgid "Enable resize" -msgstr "" - -#. TRANSLATORS: video settings checkbox -#: src/gui/widgets/tabs/setup_video.cpp:117 -msgid "No frame" -msgstr "" - -#. TRANSLATORS: video settings tab name -#. TRANSLATORS: video tab quick button -#: src/gui/widgets/tabs/setup_video.cpp:121 src/progs/dyecmd/client.cpp:556 -#: src/progs/manaplus/client.cpp:922 -msgid "Video" -msgstr "" - -#. TRANSLATORS: video settings label -#. TRANSLATORS: video settings label value -#. TRANSLATORS: video settings label -#: src/gui/widgets/tabs/setup_video.cpp:133 -#: src/gui/widgets/tabs/setup_video.cpp:138 -#: src/gui/widgets/tabs/setup_video.cpp:351 -#: src/gui/widgets/tabs/setup_video.cpp:489 -#: src/gui/widgets/tabs/setup_video.cpp:502 -msgid "None" -msgstr "" - -#. TRANSLATORS: video error message -#: src/gui/widgets/tabs/setup_video.cpp:253 -msgid "" -"Failed to switch to windowed mode and restoration of old mode also failed!" -msgstr "" - -#. TRANSLATORS: video error message -#: src/gui/widgets/tabs/setup_video.cpp:260 -msgid "" -"Failed to switch to fullscreen mode and restoration of old mode also failed!" -msgstr "" - -#. TRANSLATORS: video settings warning -#: src/gui/widgets/tabs/setup_video.cpp:273 -msgid "Switching to Full Screen" -msgstr "" - -#. TRANSLATORS: video settings warning -#: src/gui/widgets/tabs/setup_video.cpp:275 -msgid "Restart needed for changes to take effect." -msgstr "" - -#. TRANSLATORS: video settings warning -#: src/gui/widgets/tabs/setup_video.cpp:302 -msgid "Changing to OpenGL" -msgstr "" - -#. TRANSLATORS: video settings warning -#: src/gui/widgets/tabs/setup_video.cpp:304 -msgid "Applying change to OpenGL requires restart." -msgstr "" - -#. TRANSLATORS: resolution question dialog -#: src/gui/widgets/tabs/setup_video.cpp:397 -msgid "Custom resolution (example: 1024x768)" -msgstr "" - -#. TRANSLATORS: resolution question dialog -#: src/gui/widgets/tabs/setup_video.cpp:399 -msgid "Enter new resolution: " -msgstr "" - -#. TRANSLATORS: video settings warning -#: src/gui/widgets/tabs/setup_video.cpp:428 -#: src/gui/widgets/tabs/setup_video.cpp:446 -msgid "Screen Resolution Changed" -msgstr "" - -#. TRANSLATORS: video settings warning -#: src/gui/widgets/tabs/setup_video.cpp:432 -msgid "Some windows may be moved to fit the lowered resolution." -msgstr "" - -#. TRANSLATORS: speach type -#: src/gui/widgets/tabs/setup_visual.cpp:43 -msgid "No text" -msgstr "" - -#. TRANSLATORS: speach type -#: src/gui/widgets/tabs/setup_visual.cpp:45 -msgid "Text" -msgstr "" - -#. TRANSLATORS: speach type -#: src/gui/widgets/tabs/setup_visual.cpp:47 -msgid "Bubbles, no names" -msgstr "" - -#. TRANSLATORS: speach type -#: src/gui/widgets/tabs/setup_visual.cpp:49 -msgid "Bubbles with names" -msgstr "" - -#. TRANSLATORS: ambient effect type -#. TRANSLATORS: vsync type -#: src/gui/widgets/tabs/setup_visual.cpp:57 -#: src/gui/widgets/tabs/setup_visual.cpp:83 -msgid "off" -msgstr "" - -#. TRANSLATORS: patricle effects type -#: src/gui/widgets/tabs/setup_visual.cpp:69 -msgid "best quality" -msgstr "" - -#. TRANSLATORS: patricle effects type -#: src/gui/widgets/tabs/setup_visual.cpp:71 -msgid "normal" -msgstr "" - -#. TRANSLATORS: patricle effects type -#: src/gui/widgets/tabs/setup_visual.cpp:73 -msgid "best performance" -msgstr "" - -#. TRANSLATORS: vsync type -#: src/gui/widgets/tabs/setup_visual.cpp:85 -msgid "on" -msgstr "" - -#. TRANSLATORS: settings tab name -#: src/gui/widgets/tabs/setup_visual.cpp:98 -msgid "Visual" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:107 -#: src/gui/widgets/tabs/setup_visual.cpp:116 -msgid "Scale" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:121 -msgid "Notifications" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:125 -msgid "Show pickup notifications in chat" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:130 -msgid "Show pickup notifications as particle effects" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:135 -msgid "Effects" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:140 -msgid "Grab mouse and keyboard input" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:146 -msgid "Blurring textures (OpenGL)" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:151 -msgid "Gui opacity" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:157 -msgid "Enable gui opacity" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:163 -msgid "Overhead text" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:169 -msgid "Ambient FX" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:174 -msgid "Show particle effects" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:179 -msgid "Show particle effects from maps" -msgstr "" - -#. TRANSLATORS: particle details -#: src/gui/widgets/tabs/setup_visual.cpp:190 -msgid "max" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:192 -msgid "Particle detail" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:201 -msgid "Particle physics" -msgstr "" - -#. TRANSLATORS: settings group -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:207 -#: src/gui/widgets/tabs/setup_visual.cpp:216 -msgid "Gamma" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:211 -msgid "Enable gamma control" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:228 -msgid "Vsync" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:234 -msgid "Center game window" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:240 -msgid "Allow screensaver to run" -msgstr "" - -#. TRANSLATORS: settings group -#: src/gui/widgets/tabs/setup_visual.cpp:246 -msgid "Screenshots" -msgstr "" - -#. TRANSLATORS: settings option -#: src/gui/widgets/tabs/setup_visual.cpp:250 -msgid "Add water mark into screenshots" -msgstr "" - -#. TRANSLATORS: Attack filter tab name in social window. -#. TRANSLATORS: Should be small -#: src/gui/widgets/tabs/socialattacktab.h:49 -msgid "Atk" -msgstr "" - -#. TRANSLATORS: mobs group name in social window -#: src/gui/widgets/tabs/socialattacktab.h:66 -msgid "Priority mobs" -msgstr "" - -#. TRANSLATORS: mobs group name in social window -#: src/gui/widgets/tabs/socialattacktab.h:68 -msgid "Attack mobs" -msgstr "" - -#. TRANSLATORS: mobs group name in social window -#: src/gui/widgets/tabs/socialattacktab.h:70 -msgid "Ignore mobs" -msgstr "" - -#. TRANSLATORS: social window label -#: src/gui/widgets/tabs/socialfriendstab.h:116 -#, c-format -msgid "Friends: %u/%u" -msgstr "" - -#. TRANSLATORS: social window label -#: src/gui/widgets/tabs/socialguildtab2.h:99 -#: src/gui/widgets/tabs/socialguildtab.h:181 -#: src/gui/widgets/tabs/socialpartytab.h:174 -#, c-format -msgid "Players: %u/%u" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/widgets/tabs/socialguildtab.h:89 -#, c-format -msgid "Invited user %s to guild %s." -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/widgets/tabs/socialguildtab.h:109 -#, c-format -msgid "Guild %s quit requested." -msgstr "" - -#. TRANSLATORS: guild invite message -#: src/gui/widgets/tabs/socialguildtab.h:127 -msgid "Member Invite to Guild" -msgstr "" - -#. TRANSLATORS: guild invite message -#: src/gui/widgets/tabs/socialguildtab.h:129 -#, c-format -msgid "Who would you like to invite to guild %s?" -msgstr "" - -#. TRANSLATORS: guild leave message -#: src/gui/widgets/tabs/socialguildtab.h:141 -msgid "Leave Guild?" -msgstr "" - -#. TRANSLATORS: guild leave message -#: src/gui/widgets/tabs/socialguildtab.h:143 -#, c-format -msgid "Are you sure you want to leave guild %s?" -msgstr "" - -#. TRANSLATORS: social window label -#: src/gui/widgets/tabs/socialguildtab.h:157 -#, c-format -msgid "Members: %u/%u" -msgstr "" - -#. TRANSLATORS: Navigation tab name in social window. -#. TRANSLATORS: Should be small -#: src/gui/widgets/tabs/socialnavigationtab.h:60 -msgid "Nav" -msgstr "" - -#. TRANSLATORS: social window label -#: src/gui/widgets/tabs/socialnavigationtab.h:162 -#, c-format -msgid "Portals: %u/%u" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/widgets/tabs/socialpartytab.h:91 -#, c-format -msgid "Invited user %s to party." -msgstr "" - -#. TRANSLATORS: tab in social window -#: src/gui/widgets/tabs/socialpartytab.h:110 -#, c-format -msgid "Party %s quit requested." -msgstr "" - -#. TRANSLATORS: party invite message -#: src/gui/widgets/tabs/socialpartytab.h:128 -msgid "Member Invite to Party" -msgstr "" - -#. TRANSLATORS: party invite message -#: src/gui/widgets/tabs/socialpartytab.h:130 -#, c-format -msgid "Who would you like to invite to party %s?" -msgstr "" - -#. TRANSLATORS: party leave message -#: src/gui/widgets/tabs/socialpartytab.h:142 -msgid "Leave Party?" -msgstr "" - -#. TRANSLATORS: party leave message -#: src/gui/widgets/tabs/socialpartytab.h:144 -#, c-format -msgid "Are you sure you want to leave party %s?" -msgstr "" - -#. TRANSLATORS: Pickup filter tab name in social window. -#. TRANSLATORS: Should be small -#: src/gui/widgets/tabs/socialpickuptab.h:49 -msgid "Pik" -msgstr "" - -#. TRANSLATORS: items group name in social window -#: src/gui/widgets/tabs/socialpickuptab.h:66 -msgid "Pickup items" -msgstr "" - -#. TRANSLATORS: items group name in social window -#: src/gui/widgets/tabs/socialpickuptab.h:68 -msgid "Ignore items" -msgstr "" - -#. TRANSLATORS: social window label -#: src/gui/widgets/tabs/socialplayerstab.h:189 -#, c-format -msgid "Visible players: %d" -msgstr "" - -#. TRANSLATORS: debug window label, logic per second -#: src/gui/widgets/tabs/statdebugtab.cpp:42 -#: src/gui/widgets/tabs/statdebugtab.cpp:80 -#, c-format -msgid "LPS: %d" -msgstr "" - -#. TRANSLATORS: debug window stats reset button -#. TRANSLATORS: npc dialog button -#: src/gui/widgets/tabs/statdebugtab.cpp:44 src/gui/windows/npcdialog.cpp:138 -msgid "Reset" -msgstr "" - -#. TRANSLATORS: debug window stat label -#: src/gui/widgets/tabs/statdebugtab.cpp:64 -#: src/gui/widgets/tabs/statdebugtab.cpp:86 -#, c-format -msgid "stat%u: %d ms" -msgstr "" - -#. TRANSLATORS: debug window stat label -#: src/gui/widgets/tabs/statdebugtab.cpp:68 -#: src/gui/widgets/tabs/statdebugtab.cpp:91 -#, c-format -msgid "%d ms" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:37 -#: src/gui/widgets/tabs/targetdebugtab.cpp:97 -#: src/gui/widgets/tabs/targetdebugtab.cpp:168 -msgid "Target:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:39 -#: src/gui/widgets/tabs/targetdebugtab.cpp:103 -#: src/gui/widgets/tabs/targetdebugtab.cpp:170 -msgid "Target Id:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:42 -#: src/gui/widgets/tabs/targetdebugtab.cpp:106 -#: src/gui/widgets/tabs/targetdebugtab.cpp:172 -msgid "Target type:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:44 -msgid "Target level:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:46 -#: src/gui/widgets/tabs/targetdebugtab.cpp:122 -msgid "Target race:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:48 -msgid "Target party:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:50 -msgid "Target guild:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:52 -#: src/gui/widgets/tabs/targetdebugtab.cpp:156 -#: src/gui/widgets/tabs/targetdebugtab.cpp:162 -#: src/gui/widgets/tabs/targetdebugtab.cpp:180 -msgid "Attack delay:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:54 -#: src/gui/widgets/tabs/targetdebugtab.cpp:134 -#: src/gui/widgets/tabs/targetdebugtab.cpp:182 -msgid "Minimal hit:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:56 -#: src/gui/widgets/tabs/targetdebugtab.cpp:137 -#: src/gui/widgets/tabs/targetdebugtab.cpp:184 -msgid "Maximum hit:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:58 -#: src/gui/widgets/tabs/targetdebugtab.cpp:140 -#: src/gui/widgets/tabs/targetdebugtab.cpp:186 -msgid "Critical hit:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:60 -#: src/gui/widgets/tabs/targetdebugtab.cpp:143 -#: src/gui/widgets/tabs/targetdebugtab.cpp:188 -msgid "Karma:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:62 -#: src/gui/widgets/tabs/targetdebugtab.cpp:146 -#: src/gui/widgets/tabs/targetdebugtab.cpp:190 -msgid "Manner:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:64 -#: src/gui/widgets/tabs/targetdebugtab.cpp:149 -#: src/gui/widgets/tabs/targetdebugtab.cpp:192 -msgid "Effects:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:111 -#: src/gui/widgets/tabs/targetdebugtab.cpp:117 -#: src/gui/widgets/tabs/targetdebugtab.cpp:174 -msgid "Target Level:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:125 -#: src/gui/widgets/tabs/targetdebugtab.cpp:176 -msgid "Target Party:" -msgstr "" - -#. TRANSLATORS: debug window label -#: src/gui/widgets/tabs/targetdebugtab.cpp:129 -#: src/gui/widgets/tabs/targetdebugtab.cpp:178 -msgid "Target Guild:" -msgstr "" - -#. TRANSLATORS: short button name for who is online window. -#: src/gui/windowmenu.cpp:83 -msgid "ONL" -msgstr "" - -#. TRANSLATORS: long button name for who is online window. -#: src/gui/windowmenu.cpp:86 -msgid "Who is online" -msgstr "" - -#. TRANSLATORS: short button name for help window. -#: src/gui/windowmenu.cpp:89 -msgid "HLP" -msgstr "" - -#. TRANSLATORS: long button name for help window. -#. TRANSLATORS: help window name -#. TRANSLATORS: theme tab quick button -#: src/gui/windowmenu.cpp:92 src/gui/windows/helpwindow.cpp:57 -#: src/progs/dyecmd/client.cpp:565 src/progs/manaplus/client.cpp:931 -msgid "Help" -msgstr "" - -#. TRANSLATORS: short button name for quests window. -#: src/gui/windowmenu.cpp:95 -msgid "QE" -msgstr "" - -#. TRANSLATORS: long button name for quests window. -#. TRANSLATORS: quests window name -#: src/gui/windowmenu.cpp:98 src/gui/windows/questswindow.cpp:65 -msgid "Quests" -msgstr "" - -#. TRANSLATORS: short button name for kill stats window. -#: src/gui/windowmenu.cpp:101 -msgid "KS" -msgstr "" - -#. TRANSLATORS: long button name for kill stats window. -#. TRANSLATORS: kill stats window name -#: src/gui/windowmenu.cpp:104 src/gui/windows/killstats.cpp:49 -msgid "Kill stats" -msgstr "" - -#. TRANSLATORS: long button name for emotes window. -#: src/gui/windowmenu.cpp:109 -msgid "Smilies" -msgstr "" - -#. TRANSLATORS: short button name for chat window. -#: src/gui/windowmenu.cpp:112 -msgid "CH" -msgstr "" - -#. TRANSLATORS: short button name for status window. -#: src/gui/windowmenu.cpp:123 -msgid "STA" -msgstr "" - -#. TRANSLATORS: long button name for status window. -#: src/gui/windowmenu.cpp:126 -msgid "Status" -msgstr "" - -#. TRANSLATORS: short button name for equipment window. -#: src/gui/windowmenu.cpp:129 -msgid "EQU" -msgstr "" - -#. TRANSLATORS: long button name for equipment window. -#. TRANSLATORS: equipment window name -#. TRANSLATORS: equipment button tooltip -#: src/gui/windowmenu.cpp:132 src/gui/windows/equipmentwindow.cpp:67 -#: src/gui/windows/inventorywindow.cpp:271 -msgid "Equipment" -msgstr "" - -#. TRANSLATORS: short button name for inventory window. -#: src/gui/windowmenu.cpp:135 -msgid "INV" -msgstr "" - -#. TRANSLATORS: short button name for cart window. -#: src/gui/windowmenu.cpp:141 -msgid "CA" -msgstr "" - -#. TRANSLATORS: short button name for map window. -#: src/gui/windowmenu.cpp:147 -msgid "MAP" -msgstr "" - -#. TRANSLATORS: short button name for skills window. -#: src/gui/windowmenu.cpp:156 -msgid "SKI" -msgstr "" - -#. TRANSLATORS: long button name for skills window. -#. TRANSLATORS: skills dialog name -#: src/gui/windowmenu.cpp:159 src/gui/windows/skilldialog.cpp:85 -msgid "Skills" -msgstr "" - -#. TRANSLATORS: short button name for social window. -#: src/gui/windowmenu.cpp:164 -msgid "SOC" -msgstr "" - -#. TRANSLATORS: long button name for social window. -#. TRANSLATORS: social window name -#: src/gui/windowmenu.cpp:167 src/gui/windows/socialwindow.cpp:52 -msgid "Social" -msgstr "" - -#. TRANSLATORS: short button name for shortcuts window. -#: src/gui/windowmenu.cpp:170 -msgid "SH" -msgstr "" - -#. TRANSLATORS: short button name for spells window. -#: src/gui/windowmenu.cpp:176 -msgid "SP" -msgstr "" - -#. TRANSLATORS: short button name for drops window. -#: src/gui/windowmenu.cpp:182 -msgid "DR" -msgstr "" - -#. TRANSLATORS: short button name for did you know window. -#: src/gui/windowmenu.cpp:188 -msgid "YK" -msgstr "" - -#. TRANSLATORS: long button name for did you know window. -#: src/gui/windowmenu.cpp:191 -msgid "Did you know" -msgstr "" - -#. TRANSLATORS: short button name for shop window. -#: src/gui/windowmenu.cpp:194 -msgid "SHP" -msgstr "" - -#. TRANSLATORS: short button name for outfits window. -#: src/gui/windowmenu.cpp:200 -msgid "OU" -msgstr "" - -#. TRANSLATORS: short button name for updates window. -#: src/gui/windowmenu.cpp:206 -msgid "UP" -msgstr "" - -#. TRANSLATORS: long button name for updates window. -#: src/gui/windowmenu.cpp:209 -msgid "Updates" -msgstr "" - -#. TRANSLATORS: short button name for bank window. -#: src/gui/windowmenu.cpp:212 -msgid "BA" -msgstr "" - -#. TRANSLATORS: long button name for bank window. -#. TRANSLATORS: bank window name -#: src/gui/windowmenu.cpp:215 src/gui/windows/bankwindow.cpp:43 -msgid "Bank" -msgstr "" - -#. TRANSLATORS: short button name for mail window. -#: src/gui/windowmenu.cpp:218 -msgid "MA" -msgstr "" - -#. TRANSLATORS: long button name for mail window. -#. TRANSLATORS: mail window name -#. TRANSLATORS: inventory type name -#: src/gui/windowmenu.cpp:221 src/gui/windows/mailwindow.cpp:57 -#: src/resources/inventory/inventory.cpp:381 -msgid "Mail" -msgstr "" - -#. TRANSLATORS: short button name for clan window. -#: src/gui/windowmenu.cpp:224 -msgid "CL" -msgstr "" - -#. TRANSLATORS: short button name for server info window. -#: src/gui/windowmenu.cpp:230 -msgid "SI" -msgstr "" - -#. TRANSLATORS: long button name for server info window. -#. TRANSLATORS: servers dialog name -#: src/gui/windowmenu.cpp:233 src/gui/windows/serverinfowindow.cpp:41 -msgid "Server info" -msgstr "" - -#. TRANSLATORS: short button name for debug window. -#: src/gui/windowmenu.cpp:236 -msgid "DBG" -msgstr "" - -#. TRANSLATORS: short button name for windows list menu. -#: src/gui/windowmenu.cpp:247 -msgid "WIN" -msgstr "" - -#. TRANSLATORS: short button name for setup window. -#: src/gui/windowmenu.cpp:253 -msgid "SET" -msgstr "" - -#. TRANSLATORS: long button name for setup window. -#. TRANSLATORS: setup window name -#. TRANSLATORS: setup tab quick button -#: src/gui/windowmenu.cpp:256 src/gui/windows/setupwindow.cpp:67 -#: src/progs/dyecmd/client.cpp:550 src/progs/manaplus/client.cpp:916 -msgid "Setup" -msgstr "" - -#. TRANSLATORS: short key name -#. TRANSLATORS: outfits window label -#: src/gui/windowmenu.cpp:428 src/gui/windows/outfitwindow.cpp:80 -#: src/gui/windows/outfitwindow.cpp:631 -#, c-format -msgid "Key: %s" -msgstr "" - -#. TRANSLATORS: bank window money label -#: src/gui/windows/bankwindow.cpp:48 src/gui/windows/bankwindow.cpp:94 -#, c-format -msgid "Money in bank: %s" -msgstr "" - -#. TRANSLATORS: bank window button -#: src/gui/windows/bankwindow.cpp:52 -msgid "Withdraw" -msgstr "" - -#. TRANSLATORS: bank window button -#: src/gui/windows/bankwindow.cpp:55 -msgid "Deposit" -msgstr "" - -#. TRANSLATORS: buy dialog name -#: src/gui/windows/buydialog.cpp:191 -msgid "Create items" -msgstr "" - -#. TRANSLATORS: buy dialog label -#: src/gui/windows/buydialog.cpp:328 -msgid "Amount:" -msgstr "" - -#. TRANSLATORS: buy dialog button -#. TRANSLATORS: char create dialog button -#. TRANSLATORS: char select dialog. button. -#: src/gui/windows/buydialog.cpp:339 src/gui/windows/charcreatedialog.cpp:113 -#: src/gui/windows/charselectdialog.cpp:654 -msgid "Create" -msgstr "" - -#. TRANSLATORS: buy dialog label -#: src/gui/windows/buydialog.cpp:397 -msgid "Filter:" -msgstr "" - -#. TRANSLATORS: change email dialog header -#. TRANSLATORS: button in change email dialog -#: src/gui/windows/changeemaildialog.cpp:48 -#: src/gui/windows/changeemaildialog.cpp:55 -msgid "Change Email Address" -msgstr "" - -#. TRANSLATORS: label in change email dialog -#. TRANSLATORS: change password dialog label -#: src/gui/windows/changeemaildialog.cpp:63 -#: src/gui/windows/changepassworddialog.cpp:64 -#, c-format -msgid "Account: %s" -msgstr "" - -#. TRANSLATORS: label in change email dialog -#: src/gui/windows/changeemaildialog.cpp:67 -msgid "Type new email address twice:" -msgstr "" - -#. TRANSLATORS: change email error -#: src/gui/windows/changeemaildialog.cpp:139 -#, c-format -msgid "The new email address needs to be at least %u characters long." -msgstr "" - -#. TRANSLATORS: change email error -#: src/gui/windows/changeemaildialog.cpp:147 -#, c-format -msgid "The new email address needs to be less than %u characters long." -msgstr "" - -#. TRANSLATORS: change email error -#: src/gui/windows/changeemaildialog.cpp:155 -msgid "The email address entries mismatch." -msgstr "" - -#. TRANSLATORS: change email error header -#. TRANSLATORS: change password error header -#. TRANSLATORS: char creation error -#. TRANSLATORS: error header -#. TRANSLATORS: edit server dialog error header -#. TRANSLATORS: error message -#. TRANSLATORS: error message header -#. TRANSLATORS: error header -#. TRANSLATORS: ok dialog button -#. TRANSLATORS: error header -#. TRANSLATORS: error dialog header -#. TRANSLATORS: error message header -#: src/gui/windows/changeemaildialog.cpp:168 -#: src/gui/windows/changepassworddialog.cpp:156 -#: src/gui/windows/charcreatedialog.cpp:504 -#: src/gui/windows/charselectdialog.cpp:326 -#: src/gui/windows/editserverdialog.cpp:212 -#: src/gui/windows/registerdialog.cpp:253 src/net/ea/charserverrecv.cpp:105 -#: src/net/eathena/charserverrecv.cpp:412 -#: src/net/eathena/charserverrecv.cpp:416 -#: src/net/eathena/charserverrecv.cpp:498 src/net/tmwa/charserverrecv.cpp:291 -#: src/progs/manaplus/client.cpp:1423 src/progs/manaplus/client.cpp:1442 -#: src/progs/manaplus/client.cpp:1648 -msgid "Error" -msgstr "" - -#. TRANSLATORS: change password window name -#. TRANSLATORS: change password dialog button -#: src/gui/windows/changepassworddialog.cpp:49 -#: src/gui/windows/changepassworddialog.cpp:55 -msgid "Change Password" -msgstr "" - -#. TRANSLATORS: change password dialog label -#. TRANSLATORS: login dialog label -#. TRANSLATORS: register dialog. label. -#: src/gui/windows/changepassworddialog.cpp:68 -#: src/gui/windows/logindialog.cpp:121 src/gui/windows/registerdialog.cpp:77 -msgid "Password:" -msgstr "" - -#. TRANSLATORS: change password dialog label -#: src/gui/windows/changepassworddialog.cpp:71 -msgid "Type new password twice:" -msgstr "" - -#. TRANSLATORS: change password error -#: src/gui/windows/changepassworddialog.cpp:118 -msgid "Enter the old password first." -msgstr "" - -#. TRANSLATORS: change password error -#: src/gui/windows/changepassworddialog.cpp:125 -#, c-format -msgid "The new password needs to be at least %u characters long." -msgstr "" - -#. TRANSLATORS: change password error -#: src/gui/windows/changepassworddialog.cpp:133 -#, c-format -msgid "The new password needs to be less than %u characters long." -msgstr "" - -#. TRANSLATORS: change password error -#: src/gui/windows/changepassworddialog.cpp:141 -msgid "The new password entries mismatch." -msgstr "" - -#. TRANSLATORS: char create dialog name -#: src/gui/windows/charcreatedialog.cpp:78 -msgid "New Character" -msgstr "" - -#. TRANSLATORS: char create dialog label -#. TRANSLATORS: edit server dialog label -#. TRANSLATORS: login dialog label -#. TRANSLATORS: register dialog. label. -#: src/gui/windows/charcreatedialog.cpp:85 -#: src/gui/windows/editserverdialog.cpp:82 src/gui/windows/logindialog.cpp:119 -#: src/gui/windows/registerdialog.cpp:75 -msgid "Name:" -msgstr "" - -#. TRANSLATORS: char create dialog button -#: src/gui/windows/charcreatedialog.cpp:103 -msgid "^" -msgstr "" - -#. TRANSLATORS: char create dialog button -#. TRANSLATORS: This is a narrow symbol used to denote 'next'. -#. You may change this symbol if your language uses another. -#. TRANSLATORS: char create dialog button -#. TRANSLATORS: outfits window button -#: src/gui/windows/charcreatedialog.cpp:105 -#: src/gui/windows/charcreatedialog.cpp:198 -#: src/gui/windows/charcreatedialog.cpp:219 -#: src/gui/windows/charcreatedialog.cpp:238 -#: src/gui/windows/charcreatedialog.cpp:256 src/gui/windows/outfitwindow.cpp:66 -msgid ">" -msgstr "" - -#. TRANSLATORS: char create dialog label -#: src/gui/windows/charcreatedialog.cpp:111 -#: src/gui/windows/charcreatedialog.cpp:632 -#, c-format -msgid "Please distribute %d points" -msgstr "" - -#. TRANSLATORS: This is a narrow symbol used to denote 'previous'. -#. You may change this symbol if your language uses another. -#. TRANSLATORS: char create dialog button -#. TRANSLATORS: outfits window button -#: src/gui/windows/charcreatedialog.cpp:206 -#: src/gui/windows/charcreatedialog.cpp:225 -#: src/gui/windows/charcreatedialog.cpp:244 -#: src/gui/windows/charcreatedialog.cpp:262 src/gui/windows/outfitwindow.cpp:64 -msgid "<" -msgstr "" - -#. TRANSLATORS: char create dialog label -#: src/gui/windows/charcreatedialog.cpp:211 -msgid "Hair color:" -msgstr "" - -#. TRANSLATORS: char create dialog label -#: src/gui/windows/charcreatedialog.cpp:230 -msgid "Hair style:" -msgstr "" - -#. TRANSLATORS: char create dialog label -#: src/gui/windows/charcreatedialog.cpp:249 -msgid "Race:" -msgstr "" - -#. TRANSLATORS: char create dialog label -#: src/gui/windows/charcreatedialog.cpp:267 -msgid "Look:" -msgstr "" - -#. TRANSLATORS: one char size female character gender -#. TRANSLATORS: here F is title for friends tab in social window -#: src/gui/windows/charcreatedialog.cpp:285 src/gui/windows/socialwindow.cpp:70 -msgid "F" -msgstr "" - -#. TRANSLATORS: one char size male character gender -#: src/gui/windows/charcreatedialog.cpp:291 -#: src/gui/windows/charcreatedialog.cpp:298 -#: src/gui/windows/charcreatedialog.cpp:306 -msgid "M" -msgstr "" - -#. TRANSLATORS: one char size hidden character gender -#: src/gui/windows/charcreatedialog.cpp:293 -#: src/gui/windows/charcreatedialog.cpp:310 -msgid "H" -msgstr "" - -#. TRANSLATORS: one char size unknown character gender -#: src/gui/windows/charcreatedialog.cpp:300 -msgid "U" -msgstr "" - -#. TRANSLATORS: char creation error -#: src/gui/windows/charcreatedialog.cpp:506 -msgid "Your name needs to be at least 4 characters." -msgstr "" - -#. TRANSLATORS: char create dialog label -#: src/gui/windows/charcreatedialog.cpp:622 -msgid "Character stats OK" -msgstr "" - -#. TRANSLATORS: char create dialog label -#: src/gui/windows/charcreatedialog.cpp:638 -#, c-format -msgid "Please remove %d points" -msgstr "" - -#. TRANSLATORS: char deletion message -#: src/gui/windows/chardeleteconfirm.h:44 -msgid "Confirm Character Delete" -msgstr "" - -#. TRANSLATORS: char deletion message -#: src/gui/windows/chardeleteconfirm.h:46 -msgid "Are you sure you want to delete this character?" -msgstr "" - -#. TRANSLATORS: char select dialog name -#: src/gui/windows/charselectdialog.cpp:64 -#, c-format -msgid "Account %s (last login time %s)" -msgstr "" - -#. TRANSLATORS: char select dialog. button. -#: src/gui/windows/charselectdialog.cpp:73 -msgid "Switch" -msgstr "" - -#. TRANSLATORS: char select dialog. button. -#: src/gui/windows/charselectdialog.cpp:76 -msgid "Password" -msgstr "" - -#. TRANSLATORS: char select dialog. button. -#. TRANSLATORS: updater window button -#: src/gui/windows/charselectdialog.cpp:79 -#: src/gui/windows/charselectdialog.cpp:644 -#: src/gui/windows/updaterwindow.cpp:196 -msgid "Play" -msgstr "" - -#. TRANSLATORS: change pincode button -#: src/gui/windows/charselectdialog.cpp:128 -msgid "Change pin" -msgstr "" - -#. TRANSLATORS: char select dialog name -#: src/gui/windows/charselectdialog.cpp:165 -#, c-format -msgid "Account %s" -msgstr "" - -#. TRANSLATORS: character rename dialog header. -#: src/gui/windows/charselectdialog.cpp:239 -msgid "Please enter new name" -msgstr "" - -#. TRANSLATORS: char select dialog. player info message. -#: src/gui/windows/charselectdialog.cpp:264 -#, c-format -msgid "" -"Hp: %u/%u\n" -"Mp: %u/%u\n" -"Level: %u\n" -"Experience: %s\n" -"Money: %s" -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/charselectdialog.cpp:328 -msgid "Incorrect password" -msgstr "" - -#. TRANSLATORS: char deletion question. -#: src/gui/windows/charselectdialog.cpp:491 -msgid "Enter your email for deleting character" -msgstr "" - -#. TRANSLATORS: email label. -#: src/gui/windows/charselectdialog.cpp:493 -msgid "Enter email:" -msgstr "" - -#. TRANSLATORS: char deletion question. -#: src/gui/windows/charselectdialog.cpp:501 -msgid "Enter password for deleting character" -msgstr "" - -#. TRANSLATORS: email label. -#: src/gui/windows/charselectdialog.cpp:503 -msgid "Enter password:" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/chatwindow.cpp:719 -#, c-format -msgid "Present: %s; %d players are present." -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/chatwindow.cpp:1188 -#, c-format -msgid "Whispering to %s: %s" -msgstr "" - -#. TRANSLATORS: prefix for moved message to trade tab. -#: src/gui/windows/chatwindow.cpp:1621 -msgid "Moved: " -msgstr "" - -#. TRANSLATORS: moved message to trade tab warning. -#: src/gui/windows/chatwindow.cpp:1629 -msgid "Your message was moved to trade tab" -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/chatwindow.cpp:1654 -msgid "Broken nick detected: " -msgstr "" - -#. TRANSLATORS: clan window tab -#: src/gui/windows/clanwindow.cpp:67 -msgid "Ally" -msgstr "" - -#. TRANSLATORS: clan window tab -#: src/gui/windows/clanwindow.cpp:69 -msgid "Antagonist" -msgstr "" - -#. TRANSLATORS: confirm dialog button -#: src/gui/windows/confirmdialog.cpp:45 -msgid "Yes" -msgstr "" - -#. TRANSLATORS: debug window tab -#: src/gui/windows/debugwindow.cpp:72 -msgid "Net" -msgstr "" - -#. TRANSLATORS: debug window tab -#: src/gui/windows/debugwindow.cpp:74 -msgid "Stat" -msgstr "" - -#. TRANSLATORS: did you know window name -#: src/gui/windows/didyouknowwindow.cpp:55 -msgid "Did You Know?" -msgstr "" - -#. TRANSLATORS: did you know window button -#: src/gui/windows/didyouknowwindow.cpp:63 -msgid "< Previous" -msgstr "" - -#. TRANSLATORS: did you know window button -#: src/gui/windows/didyouknowwindow.cpp:65 -msgid "Next >" -msgstr "" - -#. TRANSLATORS: did you know window checkbox -#: src/gui/windows/didyouknowwindow.cpp:67 -msgid "Auto open this window" -msgstr "" - -#. TRANSLATORS: edit server dialog name -#: src/gui/windows/editserverdialog.cpp:47 -msgid "Edit Server" -msgstr "" - -#. TRANSLATORS: edit server dialog button -#. TRANSLATORS: servers dialog button -#: src/gui/windows/editserverdialog.cpp:63 src/gui/windows/serverdialog.cpp:110 -msgid "Connect" -msgstr "" - -#. TRANSLATORS: edit server dialog label -#: src/gui/windows/editserverdialog.cpp:70 -msgid "Use same ip" -msgstr "" - -#. TRANSLATORS: edit server dialog label -#: src/gui/windows/editserverdialog.cpp:84 -msgid "Address:" -msgstr "" - -#. TRANSLATORS: edit server dialog label -#: src/gui/windows/editserverdialog.cpp:86 -msgid "Port:" -msgstr "" - -#. TRANSLATORS: edit server dialog label -#: src/gui/windows/editserverdialog.cpp:88 -msgid "Server type:" -msgstr "" - -#. TRANSLATORS: edit server dialog label -#: src/gui/windows/editserverdialog.cpp:90 -msgid "Description:" -msgstr "" - -#. TRANSLATORS: edit server dialog label -#: src/gui/windows/editserverdialog.cpp:92 -msgid "Online list url:" -msgstr "" - -#. TRANSLATORS: edit server dialog label -#: src/gui/windows/editserverdialog.cpp:94 -msgid "Packet version:" -msgstr "" - -#. TRANSLATORS: edit server dialog error message -#: src/gui/windows/editserverdialog.cpp:214 -msgid "Please at least type both the address and the port of the server." -msgstr "" - -#. TRANSLATORS: egg selection dialog name -#: src/gui/windows/eggselectiondialog.cpp:42 -#: src/gui/windows/eggselectiondialog.cpp:44 -msgid "Select egg" -msgstr "" - -#. TRANSLATORS: egg selection dialog button -#. TRANSLATORS: input action name -#: src/gui/windows/eggselectiondialog.cpp:51 src/input/pages/gui.cpp:91 -msgid "Select" -msgstr "" - -#. TRANSLATORS: font size -#: src/gui/windows/emotewindow.cpp:54 -msgid "Normal font" -msgstr "" - -#. TRANSLATORS: emotes tab name -#: src/gui/windows/emotewindow.cpp:134 -msgid "Fonts" -msgstr "" - -#. TRANSLATORS: emotes tab name -#: src/gui/windows/emotewindow.cpp:137 -msgid "T" -msgstr "" - -#. TRANSLATORS: unknown equipment page name -#. TRANSLATORS: unknown hosts group name -#. TRANSLATORS: unknown skills tab name -#. TRANSLATORS: Skill type -#: src/gui/windows/equipmentwindow.cpp:675 src/gui/windows/serverdialog.cpp:497 -#: src/gui/windows/skilldialog.cpp:147 src/resources/skill/skillinfo.cpp:125 -msgid "Unknown" -msgstr "" - -#. TRANSLATORS: help window. button. -#: src/gui/windows/helpwindow.cpp:61 -msgid "Did you know..." -msgstr "" - -#. TRANSLATORS: insert card dialog name -#: src/gui/windows/insertcarddialog.cpp:45 -msgid "Insert card" -msgstr "" - -#. TRANSLATORS: insert card dialog name -#: src/gui/windows/insertcarddialog.cpp:49 -#: src/gui/windows/insertcarddialog.cpp:55 -#, c-format -msgid "Insert card %s" -msgstr "" - -#. TRANSLATORS: insert card dialog button -#. TRANSLATORS: input action name -#. TRANSLATORS: inventory button -#: src/gui/windows/insertcarddialog.cpp:63 src/input/pages/gui.cpp:121 -#: src/resources/itemtypemapdata.h:97 -msgid "Insert" -msgstr "" - -#. TRANSLATORS: inventory button -#. TRANSLATORS: outfits window button -#. TRANSLATORS: popup menu item -#. TRANSLATORS: inventory button -#: src/gui/windows/inventorywindow.cpp:208 src/gui/windows/outfitwindow.cpp:68 -#: src/resources/db/itemdb.cpp:702 src/resources/itemtypemapdata.h:45 -#: src/resources/itemtypemapdata.h:49 src/resources/itemtypemapdata.h:53 -#: src/resources/itemtypemapdata.h:57 src/resources/itemtypemapdata.h:61 -#: src/resources/itemtypemapdata.h:65 src/resources/itemtypemapdata.h:69 -#: src/resources/itemtypemapdata.h:73 src/resources/itemtypemapdata.h:77 -#: src/resources/itemtypemapdata.h:81 src/resources/itemtypemapdata.h:85 -#: src/resources/itemtypemapdata.h:89 src/resources/itemtypemapdata.h:93 -msgid "Equip" -msgstr "" - -#. TRANSLATORS: inventory outfits button -#: src/gui/windows/inventorywindow.cpp:236 -msgid "O" -msgstr "" - -#. TRANSLATORS: inventory cart button -#: src/gui/windows/inventorywindow.cpp:242 -msgid "C" -msgstr "" - -#. TRANSLATORS: inventory shop button -#: src/gui/windows/inventorywindow.cpp:248 -msgid "S" -msgstr "" - -#. TRANSLATORS: inventory equipment button -#: src/gui/windows/inventorywindow.cpp:254 -msgid "E" -msgstr "" - -#. TRANSLATORS: question dialog title -#: src/gui/windows/inventorywindow.cpp:1128 -msgid "Insert card request" -msgstr "" - -#. TRANSLATORS: question dialog message -#: src/gui/windows/inventorywindow.cpp:1130 -#, c-format -msgid "Insert %s into %s?" -msgstr "" - -#. TRANSLATORS: item amount window button -#: src/gui/windows/itemamountwindow.cpp:227 -msgid "All" -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:293 -msgid "Select amount of items to trade." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:297 -msgid "Select amount of items to drop." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:301 -msgid "Select amount of items to store." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:305 -msgid "Select amount of items to send." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:309 -msgid "Select amount of items to craft." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:313 -msgid "Select amount of items to store to cart." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:317 -msgid "Select amount of items to retrieve." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:321 -msgid "Select amount of items to retrieve from cart." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:325 -msgid "Select amount of items to split." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:329 -msgid "Add to buy shop." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:333 -msgid "Add to sell shop." -msgstr "" - -#. TRANSLATORS: amount window message -#: src/gui/windows/itemamountwindow.cpp:337 -msgid "Unknown." -msgstr "" - -#. TRANSLATORS: kill stats window button -#: src/gui/windows/killstats.cpp:54 -msgid "Reset stats" -msgstr "" - -#. TRANSLATORS: kill stats window button -#: src/gui/windows/killstats.cpp:57 -msgid "Reset timer" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:63 src/gui/windows/killstats.cpp:179 -#: src/gui/windows/killstats.cpp:293 src/gui/windows/killstats.cpp:463 -#, c-format -msgid "Kills: %s, total exp: %s" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:66 src/gui/windows/killstats.cpp:181 -#: src/gui/windows/killstats.cpp:270 src/gui/windows/killstats.cpp:285 -#: src/gui/windows/killstats.cpp:465 -#, c-format -msgid "Avg Exp: %s" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:68 src/gui/windows/killstats.cpp:184 -#: src/gui/windows/killstats.cpp:275 src/gui/windows/killstats.cpp:289 -#: src/gui/windows/killstats.cpp:468 -#, c-format -msgid "No. of avg mob to next level: %s" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:71 src/gui/windows/killstats.cpp:195 -#: src/gui/windows/killstats.cpp:298 src/gui/windows/killstats.cpp:471 -#, c-format -msgid "Kills/Min: %s, Exp/Min: %s" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:75 src/gui/windows/killstats.cpp:80 -#: src/gui/windows/killstats.cpp:85 src/gui/windows/killstats.cpp:369 -#: src/gui/windows/killstats.cpp:391 src/gui/windows/killstats.cpp:414 -#, c-format -msgid "Exp speed per %d min: %s" -msgid_plural "Exp speed per %d min: %s" -msgstr[0] "" -msgstr[1] "" - -#: src/gui/windows/killstats.cpp:77 src/gui/windows/killstats.cpp:82 -#: src/gui/windows/killstats.cpp:88 -#, c-format -msgid "Time for next level per %d min: %s" -msgid_plural "Time for next level per %d min: %s" -msgstr[0] "" -msgstr[1] "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:91 src/gui/windows/killstats.cpp:304 -msgid "Last kill exp:" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:124 src/gui/windows/killstats.cpp:248 -#, c-format -msgid "Level: %d at %f%%" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:133 src/gui/windows/killstats.cpp:257 -#, c-format -msgid "Exp: %s/%s Left: %s" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:139 src/gui/windows/killstats.cpp:265 -#: src/gui/windows/killstats.cpp:280 -#, c-format -msgid "1%% = %s exp, avg mob for 1%%: %s" -msgstr "" - -#. TRANSLATORS: kill stats window label -#: src/gui/windows/killstats.cpp:377 src/gui/windows/killstats.cpp:387 -#: src/gui/windows/killstats.cpp:400 src/gui/windows/killstats.cpp:409 -#: src/gui/windows/killstats.cpp:422 src/gui/windows/killstats.cpp:431 -#, c-format -msgid " Time for next level: %s" -msgstr "" - -#. TRANSLATORS: login dialog name -#. TRANSLATORS: login dialog button -#: src/gui/windows/logindialog.cpp:69 src/gui/windows/logindialog.cpp:89 -msgid "Login" -msgstr "" - -#. TRANSLATORS: login dialog label -#: src/gui/windows/logindialog.cpp:78 -msgid "Remember username" -msgstr "" - -#. TRANSLATORS: login dialog label -#: src/gui/windows/logindialog.cpp:81 -msgid "Update:" -msgstr "" - -#. TRANSLATORS: login dialog button -#: src/gui/windows/logindialog.cpp:86 -msgid "Change Server" -msgstr "" - -#. TRANSLATORS: login dialog button -#. TRANSLATORS: register dialog name -#. TRANSLATORS: register dialog. button. -#. TRANSLATORS: server info comment -#: src/gui/windows/logindialog.cpp:92 src/gui/windows/registerdialog.cpp:53 -#: src/gui/windows/registerdialog.cpp:63 -#: src/gui/windows/serverinfowindow.cpp:128 -msgid "Register" -msgstr "" - -#. TRANSLATORS: login dialog checkbox -#: src/gui/windows/logindialog.cpp:95 -msgid "Custom update host" -msgstr "" - -#. TRANSLATORS: login dialog label -#: src/gui/windows/logindialog.cpp:115 -msgid "Server:" -msgstr "" - -#. TRANSLATORS: question dialog -#: src/gui/windows/logindialog.cpp:257 -msgid "Open register url" -msgstr "" - -#. TRANSLATORS: update hosts group default name -#: src/gui/windows/logindialog.cpp:407 -msgid "default updates" -msgstr "" - -#. TRANSLATORS: mail edit window name -#: src/gui/windows/maileditwindow.cpp:53 -msgid "Edit mail" -msgstr "" - -#. TRANSLATORS: mail edit window button -#: src/gui/windows/maileditwindow.cpp:57 -msgid "Send" -msgstr "" - -#. TRANSLATORS: mail edit window label -#: src/gui/windows/maileditwindow.cpp:63 -msgid "To:" -msgstr "" - -#. TRANSLATORS: mail edit window label -#. TRANSLATORS: mail view window label -#: src/gui/windows/maileditwindow.cpp:65 src/gui/windows/mailviewwindow.cpp:76 -msgid "Subject:" -msgstr "" - -#. TRANSLATORS: mail edit window label -#. TRANSLATORS: mail view window label -#: src/gui/windows/maileditwindow.cpp:67 src/gui/windows/mailviewwindow.cpp:115 -#: src/gui/windows/mailviewwindow.cpp:275 -msgid "Money:" -msgstr "" - -#. TRANSLATORS: mail edit window label -#: src/gui/windows/maileditwindow.cpp:69 -msgid "Item:" -msgstr "" - -#. TRANSLATORS: mail edit window label -#. TRANSLATORS: mail view window label -#: src/gui/windows/maileditwindow.cpp:71 src/gui/windows/mailviewwindow.cpp:79 -msgid "Message:" -msgstr "" - -#. TRANSLATORS: empty mail message subject -#: src/gui/windows/maileditwindow.cpp:218 -msgid "empty subject" -msgstr "" - -#. TRANSLATORS: mail view window name -#: src/gui/windows/mailviewwindow.cpp:52 -msgid "View mail" -msgstr "" - -#. TRANSLATORS: mail view attach / items button -#: src/gui/windows/mailviewwindow.cpp:57 -msgid "Get items" -msgstr "" - -#: src/gui/windows/mailviewwindow.cpp:57 -msgid "Get attach" -msgstr "" - -#. TRANSLATORS: mail view window button -#: src/gui/windows/mailviewwindow.cpp:67 -msgid "Reply" -msgstr "" - -#. TRANSLATORS: mail view window label -#: src/gui/windows/mailviewwindow.cpp:69 -msgid "Time:" -msgstr "" - -#. TRANSLATORS: mail view window label -#: src/gui/windows/mailviewwindow.cpp:73 -msgid "From:" -msgstr "" - -#. TRANSLATORS: mail view attached money button -#: src/gui/windows/mailviewwindow.cpp:126 -msgid "Get money" -msgstr "" - -#. TRANSLATORS: mail window button -#: src/gui/windows/mailwindow.cpp:68 -msgid "Refresh" -msgstr "" - -#. TRANSLATORS: mail window button -#: src/gui/windows/mailwindow.cpp:71 -msgid "New" -msgstr "" - -#. TRANSLATORS: mail window button -#: src/gui/windows/mailwindow.cpp:76 -msgid "Get old" -msgstr "" - -#: src/gui/windows/mailwindow.cpp:76 -msgid "Return" -msgstr "" - -#. TRANSLATORS: mail window button -#: src/gui/windows/mailwindow.cpp:79 -msgid "Open" -msgstr "" - -#. TRANSLATORS: expired mail message prefix -#: src/gui/windows/mailwindow.cpp:200 -msgid "(expired)" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:73 -msgid "health bar" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:83 -msgid "mana bar" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:88 -msgid "experience bar" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:94 -msgid "weight bar" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:100 -msgid "inventory slots bar" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:105 -msgid "money bar" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:110 -msgid "arrows bar" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:116 -msgid "status bar" -msgstr "" - -#. TRANSLATORS: status bar name -#: src/gui/windows/ministatuswindow.cpp:144 -msgid "job bar" -msgstr "" - -#. TRANSLATORS: status bar label -#: src/gui/windows/ministatuswindow.cpp:375 -#, c-format -msgid "Level: %d (GM %d)" -msgstr "" - -#. TRANSLATORS: status bar label -#: src/gui/windows/ministatuswindow.cpp:407 -#: src/gui/windows/ministatuswindow.cpp:455 -msgid "Need" -msgstr "" - -#. TRANSLATORS: job bar label -#: src/gui/windows/ministatuswindow.cpp:438 -#, c-format -msgid "Job level: %d" -msgstr "" - -#. TRANSLATORS: npc dialog button -#: src/gui/windows/npcdialog.cpp:84 -msgid "Stop waiting" -msgstr "" - -#. TRANSLATORS: npc dialog button -#: src/gui/windows/npcdialog.cpp:86 -msgid "Next" -msgstr "" - -#. TRANSLATORS: npc dialog button -#: src/gui/windows/npcdialog.cpp:90 -msgid "Submit" -msgstr "" - -#. TRANSLATORS: sell confirmation header -#: src/gui/windows/npcselldialog.cpp:75 -msgid "sell item" -msgstr "" - -#. TRANSLATORS: sell confirmation message -#: src/gui/windows/npcselldialog.cpp:77 -#, c-format -msgid "Do you really want to sell %s?" -msgstr "" - -#. TRANSLATORS: outfits window label -#: src/gui/windows/outfitwindow.cpp:70 src/gui/windows/outfitwindow.cpp:625 -#, c-format -msgid "Outfit: %d" -msgstr "" - -#. TRANSLATORS: outfits window checkbox -#: src/gui/windows/outfitwindow.cpp:72 -msgid "Unequip first" -msgstr "" - -#. TRANSLATORS: outfits window checkbox -#: src/gui/windows/outfitwindow.cpp:76 -msgid "Away outfit" -msgstr "" - -#. TRANSLATORS: quest reward -#: src/gui/windows/questswindow.cpp:343 -msgid "Reward:" -msgstr "" - -#. TRANSLATORS: quest giver name -#: src/gui/windows/questswindow.cpp:351 -msgid "Quest Giver:" -msgstr "" - -#. TRANSLATORS: quest npc name -#: src/gui/windows/questswindow.cpp:359 -msgid "Npc:" -msgstr "" - -#. TRANSLATORS: quest coordinates -#: src/gui/windows/questswindow.cpp:368 -msgid "Coordinates:" -msgstr "" - -#. TRANSLATORS: quit dialog button -#: src/gui/windows/quitdialog.cpp:61 -msgid "Switch server" -msgstr "" - -#. TRANSLATORS: quit dialog button -#: src/gui/windows/quitdialog.cpp:64 -msgid "Switch character" -msgstr "" - -#. TRANSLATORS: register dialog. label. -#: src/gui/windows/registerdialog.cpp:79 -msgid "Confirm:" -msgstr "" - -#. TRANSLATORS: register dialog. button. -#: src/gui/windows/registerdialog.cpp:96 -msgid "Male" -msgstr "" - -#. TRANSLATORS: register dialog. button. -#: src/gui/windows/registerdialog.cpp:98 -msgid "Female" -msgstr "" - -#. TRANSLATORS: register dialog. label. -#: src/gui/windows/registerdialog.cpp:108 -msgid "Email:" -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/registerdialog.cpp:184 -#, c-format -msgid "The username needs to be at least %u characters long." -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/registerdialog.cpp:193 -#, c-format -msgid "The username needs to be less than %u characters long." -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/registerdialog.cpp:202 -#, c-format -msgid "The password needs to be at least %u characters long." -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/registerdialog.cpp:211 -#, c-format -msgid "The password needs to be less than %u characters long." -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/registerdialog.cpp:219 -msgid "Passwords do not match." -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/registerdialog.cpp:226 src/net/ea/loginrecv.cpp:121 -#: src/net/eathena/loginrecv.cpp:120 -msgid "Incorrect email." -msgstr "" - -#. TRANSLATORS: error message -#: src/gui/windows/registerdialog.cpp:233 -msgid "Email too long." -msgstr "" - -#. TRANSLATORS: servers dialog name -#: src/gui/windows/serverdialog.cpp:99 -msgid "Choose Your Server" -msgstr "" - -#. TRANSLATORS: servers dialog button -#: src/gui/windows/serverdialog.cpp:120 -msgid "Load" -msgstr "" - -#. TRANSLATORS: servers dialog name -#: src/gui/windows/serverdialog.cpp:134 -msgid "Choose Your Server *** SAFE MODE ***" -msgstr "" - -#. TRANSLATORS: servers dialog name -#: src/gui/windows/serverdialog.cpp:140 -msgid "Choose Your Server *** SOFTWARE RENDER MODE ***" -msgstr "" - -#. TRANSLATORS: servers dialog checkbox -#: src/gui/windows/serverdialog.cpp:150 -msgid "Use same ip for game sub servers" -msgstr "" - -#. TRANSLATORS: servers dialog label -#: src/gui/windows/serverdialog.cpp:436 -#, c-format -msgid "Downloading server list...%2.2f%%" -msgstr "" - -#. TRANSLATORS: servers dialog label -#: src/gui/windows/serverdialog.cpp:442 -msgid "Waiting for server..." -msgstr "" - -#. TRANSLATORS: servers dialog label -#: src/gui/windows/serverdialog.cpp:447 -msgid "Preparing download" -msgstr "" - -#. TRANSLATORS: servers dialog label -#: src/gui/windows/serverdialog.cpp:452 -msgid "Error retreiving server list!" -msgstr "" - -#. TRANSLATORS: servers dialog label -#: src/gui/windows/serverdialog.cpp:618 -msgid "requires a newer version" -msgstr "" - -#. TRANSLATORS: servers dialog label -#: src/gui/windows/serverdialog.cpp:623 -#, c-format -msgid "requires v%s" -msgstr "" - -#. TRANSLATORS: server info comment -#: src/gui/windows/serverinfowindow.cpp:103 -msgid "##BServer with free license." -msgstr "" - -#. TRANSLATORS: server info comment -#: src/gui/windows/serverinfowindow.cpp:109 -msgid "##BServer with non free license." -msgstr "" - -#. TRANSLATORS: server info comment -#: src/gui/windows/serverinfowindow.cpp:116 -msgid "##BServer unknown license." -msgstr "" - -#. TRANSLATORS: server info comment -#: src/gui/windows/serverinfowindow.cpp:122 -msgid "Server" -msgstr "" - -#. TRANSLATORS: server info comment -#. TRANSLATORS: Skill type -#: src/gui/windows/serverinfowindow.cpp:125 -#: src/resources/skill/skilltypelist.h:43 -msgid "Support" -msgstr "" - -#. TRANSLATORS: server info non free comment -#: src/gui/windows/serverinfowindow.cpp:132 -msgid "##BNon free sources" -msgstr "" - -#. TRANSLATORS: server info free comment -#: src/gui/windows/serverinfowindow.cpp:135 -msgid "##BFree sources" -msgstr "" - -#. TRANSLATORS: server info documentation comment -#: src/gui/windows/serverinfowindow.cpp:138 -msgid "##BDocumentation" -msgstr "" - -#. TRANSLATORS: setup button -#: src/gui/windows/setupwindow.cpp:104 -msgid "Apply" -msgstr "" - -#. TRANSLATORS: setup button -#: src/gui/windows/setupwindow.cpp:110 -msgid "Reset Windows" -msgstr "" - -#. TRANSLATORS: shop window name -#: src/gui/windows/shopwindow.cpp:106 src/gui/windows/shopwindow.cpp:1153 -msgid "Personal Shop" -msgstr "" - -#. TRANSLATORS: shop window button -#. TRANSLATORS: publish shop button -#: src/gui/windows/shopwindow.cpp:196 src/gui/windows/shopwindow.cpp:459 -#: src/gui/windows/shopwindow.cpp:484 -msgid "Publish" -msgstr "" - -#. TRANSLATORS: shop window button -#: src/gui/windows/shopwindow.cpp:213 -msgid "Announce" -msgstr "" - -#. TRANSLATORS: shop window checkbox -#: src/gui/windows/shopwindow.cpp:218 -msgid "Show links in announce" -msgstr "" - -#. TRANSLATORS: shop rename dialog title -#: src/gui/windows/shopwindow.cpp:388 -msgid "Please enter new shop name" -msgstr "" - -#. TRANSLATORS: unpublish shop button -#: src/gui/windows/shopwindow.cpp:454 src/gui/windows/shopwindow.cpp:479 -msgid "Unpublish" -msgstr "" - -#. TRANSLATORS: error buy/sell shop request -#: src/gui/windows/shopwindow.cpp:951 -msgid "error: player busy" -msgstr "" - -#. TRANSLATORS: error buy/sell shop request -#: src/gui/windows/shopwindow.cpp:1000 -msgid "error: Can't sell this item" -msgstr "" - -#. TRANSLATORS: error buy/sell shop request -#: src/gui/windows/shopwindow.cpp:1012 -msgid "error: Can't buy this item" -msgstr "" - -#. TRANSLATORS: buy shop request (nick, item) -#: src/gui/windows/shopwindow.cpp:1032 -#, c-format -msgid "%s wants to buy %s do you accept?" -msgstr "" - -#. TRANSLATORS: sell shop request (nick, item) -#: src/gui/windows/shopwindow.cpp:1039 -#, c-format -msgid "%s wants to sell %s do you accept?" -msgstr "" - -#. TRANSLATORS: shop window dialog -#. TRANSLATORS: trade message -#: src/gui/windows/shopwindow.cpp:1046 src/net/ea/traderecv.cpp:165 -msgid "Request for Trade" -msgstr "" - -#. TRANSLATORS: shop window name -#: src/gui/windows/shopwindow.cpp:1158 -#, c-format -msgid "Personal Shop - %s" -msgstr "" - -#. TRANSLATORS: skills dialog button -#: src/gui/windows/skilldialog.cpp:95 -msgid "Up" -msgstr "" - -#. TRANSLATORS: skills dialog label -#: src/gui/windows/skilldialog.cpp:243 -#, c-format -msgid "Skill points available: %d" -msgstr "" - -#. TRANSLATORS: skills dialog default skill tab -#: src/gui/windows/skilldialog.cpp:399 -#, c-format -msgid "Skill Set %d" -msgstr "" - -#. TRANSLATORS: skills dialog. skill id -#: src/gui/windows/skilldialog.cpp:512 -#, c-format -msgid "Skill %d" -msgstr "" - -#. TRANSLATORS: skills dialog. skill id -#: src/gui/windows/skilldialog.cpp:564 -#, c-format -msgid "Skill %u" -msgstr "" - -#. TRANSLATORS: skills dialog. skill level -#. TRANSLATORS: skill level -#: src/gui/windows/skilldialog.cpp:783 src/resources/skill/skillinfo.cpp:108 -#, c-format -msgid "Lvl: %d" -msgstr "" - -#. TRANSLATORS: skill error message -#: src/gui/windows/skilldialog.cpp:790 -#, c-format -msgid "Failed skill: %s" -msgstr "" - -#. TRANSLATORS: text skill dialog header -#: src/gui/windows/skilldialog.cpp:1164 src/gui/windows/skilldialog.cpp:1230 -#: src/gui/windows/skilldialog.cpp:1351 -#, c-format -msgid "Add text to skill %s" -msgstr "" - -#. TRANSLATORS: text skill dialog field -#: src/gui/windows/skilldialog.cpp:1167 src/gui/windows/skilldialog.cpp:1233 -#: src/gui/windows/skilldialog.cpp:1354 -msgid "Text: " -msgstr "" - -#. TRANSLATORS: here P is title for visible players tab in social window -#: src/gui/windows/socialwindow.cpp:65 -msgid "P" -msgstr "" - -#. TRANSLATORS: social window button -#: src/gui/windows/socialwindow.cpp:73 -msgid "Menu" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/socialwindow.cpp:277 -#, c-format -msgid "Accepted party invite from %s." -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/socialwindow.cpp:291 -#, c-format -msgid "Rejected party invite from %s." -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/socialwindow.cpp:311 -#, c-format -msgid "Accepted guild invite from %s." -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/socialwindow.cpp:333 -#, c-format -msgid "Rejected guild invite from %s." -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/socialwindow.cpp:393 -msgid "Received guild request, but one already exists." -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/socialwindow.cpp:404 -#, c-format -msgid "%s has invited you to join the guild %s." -msgstr "" - -#. TRANSLATORS: guild invite message -#: src/gui/windows/socialwindow.cpp:417 -msgid "Accept Guild Invite" -msgstr "" - -#. TRANSLATORS: chat message -#: src/gui/windows/socialwindow.cpp:437 -msgid "Received party request, but one already exists." -msgstr "" - -#. TRANSLATORS: party invite message -#: src/gui/windows/socialwindow.cpp:452 -msgid "You have been invited you to join a party." -msgstr "" - -#. TRANSLATORS: party invite message -#: src/gui/windows/socialwindow.cpp:457 -#, c-format -msgid "You have been invited to join the %s party." -msgstr "" - -#. TRANSLATORS: party invite message -#: src/gui/windows/socialwindow.cpp:466 -#, c-format -msgid "%s has invited you to join their party." -msgstr "" - -#. TRANSLATORS: party invite message -#: src/gui/windows/socialwindow.cpp:472 -#, c-format -msgid "%s has invited you to join the %s party." -msgstr "" - -#. TRANSLATORS: party invite message -#: src/gui/windows/socialwindow.cpp:488 -msgid "Accept Party Invite" -msgstr "" - -#. TRANSLATORS: status window label -#: src/gui/windows/statuswindow.cpp:78 -msgid "HP:" -msgstr "" - -#. TRANSLATORS: status window label -#: src/gui/windows/statuswindow.cpp:81 -msgid "Exp:" -msgstr "" - -#. TRANSLATORS: status window label -#: src/gui/windows/statuswindow.cpp:148 -msgid "MP:" -msgstr "" - -#. TRANSLATORS: status window label -#: src/gui/windows/statuswindow.cpp:186 src/gui/windows/statuswindow.cpp:378 -#, c-format -msgid "Job: %d" -msgstr "" - -#. TRANSLATORS: status window label -#: src/gui/windows/statuswindow.cpp:188 -msgid "Job:" -msgstr "" - -#. TRANSLATORS: status window label -#: src/gui/windows/statuswindow.cpp:274 -#, c-format -msgid "Level: %d (%s %d)" -msgstr "" - -#. TRANSLATORS: command editor name -#: src/gui/windows/textcommandeditor.cpp:56 -msgid "Command Editor" -msgstr "" - -#. TRANSLATORS: command editor button -#: src/gui/windows/textcommandeditor.cpp:65 -msgid "magic" -msgstr "" - -#. TRANSLATORS: command editor button -#: src/gui/windows/textcommandeditor.cpp:67 -msgid "other" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:70 -msgid "Symbol:" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:74 -msgid "Command:" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:78 -msgid "Comment:" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:83 -msgid "Target Type:" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:88 -msgid "Icon:" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:93 -msgid "Mana:" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:96 -msgid "Magic level:" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:100 -msgid "Magic School:" -msgstr "" - -#. TRANSLATORS: command editor label -#: src/gui/windows/textcommandeditor.cpp:104 -msgid "School level:" -msgstr "" - -#. TRANSLATORS: command editor button -#: src/gui/windows/textcommandeditor.cpp:110 -msgid "Save" -msgstr "" - -#. TRANSLATORS: trade window button -#: src/gui/windows/tradewindow.cpp:67 -msgid "Propose trade" -msgstr "" - -#. TRANSLATORS: trade window button -#: src/gui/windows/tradewindow.cpp:69 -msgid "Confirmed. Waiting..." -msgstr "" - -#. TRANSLATORS: trade window button -#: src/gui/windows/tradewindow.cpp:71 -msgid "Agree trade" -msgstr "" - -#. TRANSLATORS: trade window button -#: src/gui/windows/tradewindow.cpp:73 -msgid "Agreed. Waiting..." -msgstr "" - -#. TRANSLATORS: trade window caption -#: src/gui/windows/tradewindow.cpp:77 -msgid "Trade: You" -msgstr "" - -#. TRANSLATORS: trade window money label -#: src/gui/windows/tradewindow.cpp:87 src/gui/windows/tradewindow.cpp:196 -#, c-format -msgid "You get %s" -msgstr "" - -#. TRANSLATORS: trade window money change button -#: src/gui/windows/tradewindow.cpp:93 -msgid "Change" -msgstr "" - -#. TRANSLATORS: trade window money label -#: src/gui/windows/tradewindow.cpp:140 -msgid "You give:" -msgstr "" - -#. TRANSLATORS: trade error -#: src/gui/windows/tradewindow.cpp:448 -msgid "You don't have enough money." -msgstr "" - -#. TRANSLATORS: trade error -#: src/gui/windows/tradewindow.cpp:539 -msgid "Failed adding item. You can not overlap one kind of item on the window." -msgstr "" - -#. TRANSLATORS: trade error -#: src/gui/windows/tradewindow.cpp:554 -msgid "Failed adding item. You can not trade equipped items." -msgstr "" - -#. TRANSLATORS: updater window name -#: src/gui/windows/updaterwindow.cpp:174 -msgid "Updating..." -msgstr "" - -#. TRANSLATORS: updater window label -#: src/gui/windows/updaterwindow.cpp:192 -msgid "Connecting..." -msgstr "" - -#. TRANSLATORS: updater window checkbox -#: src/gui/windows/updaterwindow.cpp:420 -msgid "Show all news (can be slow)" -msgstr "" - -#. TRANSLATORS: update message -#: src/gui/windows/updaterwindow.cpp:864 -msgid "##1 The update process is incomplete." -msgstr "" - -#. TRANSLATORS: Continues "The update process is incomplete.". -#: src/gui/windows/updaterwindow.cpp:867 -msgid "##1 It is strongly recommended that" -msgstr "" - -#. TRANSLATORS: Begins "It is strongly recommended that". -#: src/gui/windows/updaterwindow.cpp:870 -msgid "##1 you try again later." -msgstr "" - -#. TRANSLATORS: updater window label -#: src/gui/windows/updaterwindow.cpp:1059 -msgid "Completed" -msgstr "" - -#. TRANSLATORS: who is online window name -#: src/gui/windows/whoisonline.cpp:101 src/gui/windows/whoisonline.cpp:673 -msgid "Who Is Online - Updating" -msgstr "" - -#. TRANSLATORS: who is online. button. -#: src/gui/windows/whoisonline.cpp:114 -msgid "Update" -msgstr "" - -#. TRANSLATORS: who is online window name -#: src/gui/windows/whoisonline.cpp:246 -msgid "Who Is Online - " -msgstr "" - -#. TRANSLATORS: who is online window name -#: src/gui/windows/whoisonline.cpp:689 -msgid "Who Is Online - error" -msgstr "" - -#. TRANSLATORS: who is online window name -#: src/gui/windows/whoisonline.cpp:736 -msgid "Who Is Online - Update" -msgstr "" - -#. TRANSLATORS: world select dialog name -#: src/gui/windows/worldselectdialog.cpp:47 -msgid "Select World" -msgstr "" - -#. TRANSLATORS: world dialog button -#: src/gui/windows/worldselectdialog.cpp:53 -msgid "Change Login" -msgstr "" - -#. TRANSLATORS: world dialog button -#: src/gui/windows/worldselectdialog.cpp:56 -msgid "Choose World" -msgstr "" - -#. TRANSLATORS: long key name. must be short. -#. TRANSLATORS: short key name. must be very short. -#. TRANSLATORS: long key name, should be short -#: src/input/inputmanager.cpp:406 src/input/inputmanager.cpp:449 -#: src/input/keyboardconfig.cpp:95 -#, c-format -msgid "key_%d" -msgstr "" - -#. TRANSLATORS: long joystick button name. must be short. -#: src/input/inputmanager.cpp:412 -#, c-format -msgid "JButton%d" -msgstr "" - -#. TRANSLATORS: unknown long key type -#: src/input/inputmanager.cpp:426 -msgid "unknown key" -msgstr "" - -#. TRANSLATORS: short joystick button name. muse be very short -#: src/input/inputmanager.cpp:455 -#, c-format -msgid "JB%d" -msgstr "" - -#. TRANSLATORS: unknown short key type. must be short -#. TRANSLATORS: Unknown key short string. -#. TRANSLATORS: This string must be maximum 5 chars -#: src/input/inputmanager.cpp:469 src/input/keyboardconfig.cpp:139 -msgid "u key" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:34 -msgid "Target and attack keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:46 -msgid "Target & attack closest monster" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:52 -msgid "Target & attack closest player" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:58 -msgid "Move to Target" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:64 -msgid "Change Move to Target type" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:70 -msgid "Move to Home location" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:76 -msgid "Set home location" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:82 -msgid "Move to navigation point" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:94 -msgid "Stop Attack / Modifier key" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:100 -msgid "Untarget" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:106 -msgid "Target monster" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:112 -msgid "Target closest monster (without filters)" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:118 -msgid "Target NPC" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:124 -msgid "Target Player" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:130 -msgid "Target mercenary" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:136 -msgid "Target skill unit" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:142 -msgid "Change targeting type" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:148 -msgid "Target pet" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:154 -msgid "Catch pet" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:160 -msgid "Other Keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:166 -msgid "Pickup" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:172 -msgid "Change Pickup Type" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:178 -msgid "Sit" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:184 -msgid "Screenshot" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:190 -msgid "Enable/Disable Trading" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:196 -msgid "Open trade window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:202 -msgid "Start trade with target" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:208 -msgid "Follow selected player" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:214 -msgid "Change Map View Mode" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:220 -msgid "Select OK" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:232 -msgid "Stop or sit" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:238 -msgid "Return to safe video mode" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:244 -msgid "Fire your homunculus" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/basic.cpp:262 -msgid "Open context menu" -msgstr "" - -#. TRANSLATORS: input action group -#: src/input/pages/chat.cpp:31 -msgid "Main" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:37 -msgid "Toggle Chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:43 -msgid "Chat modifier key" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:49 -msgid "Scroll Chat Up" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:55 -msgid "Scroll Chat Down" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:67 -msgid "Previous Chat Tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:73 -msgid "Next Chat Tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:79 -msgid "Clear current chat tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:85 -msgid "Close current Chat Tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:91 -msgid "Close all chat tabs" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:97 -msgid "Select general tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:103 -msgid "Select debug tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:109 -msgid "Select trade tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:115 -msgid "Select battle tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:121 -msgid "Select gm tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:127 -msgid "Select lang tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:133 -msgid "Select party tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:139 -msgid "Select guild tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:151 -msgid "Ignore all whispers" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:157 -msgid "Ignore all whispers on server side" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:163 -msgid "Unignore all whispers on server side" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:169 -msgid "Previous chat line" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:175 -msgid "Next chat line" -msgstr "" - -#. TRANSLATORS: input action group -#: src/input/pages/chat.cpp:181 -msgid "Smiles" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/chat.cpp:187 -msgid "Show smiles" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/craft.cpp:32 src/input/pages/craft.cpp:38 -#: src/input/pages/craft.cpp:44 src/input/pages/craft.cpp:50 -#: src/input/pages/craft.cpp:56 src/input/pages/craft.cpp:62 -#: src/input/pages/craft.cpp:68 src/input/pages/craft.cpp:74 -#: src/input/pages/craft.cpp:80 -#, c-format -msgid "Craft shortcut %d" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/emotes.cpp:35 -msgid "Emote modifiers keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/emotes.cpp:41 -msgid "Emote modifier key" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/emotes.cpp:47 -msgid "Pet emote modifier key" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/emotes.cpp:53 -msgid "Homunculus / mercenary emote modifier key" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/emotes.cpp:59 -msgid "Emote shortcuts" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/emotes.cpp:65 src/input/pages/emotes.cpp:71 -#: src/input/pages/emotes.cpp:77 src/input/pages/emotes.cpp:83 -#: src/input/pages/emotes.cpp:89 src/input/pages/emotes.cpp:95 -#: src/input/pages/emotes.cpp:101 src/input/pages/emotes.cpp:107 -#: src/input/pages/emotes.cpp:113 src/input/pages/emotes.cpp:119 -#: src/input/pages/emotes.cpp:125 src/input/pages/emotes.cpp:131 -#: src/input/pages/emotes.cpp:137 src/input/pages/emotes.cpp:143 -#: src/input/pages/emotes.cpp:149 src/input/pages/emotes.cpp:155 -#: src/input/pages/emotes.cpp:161 src/input/pages/emotes.cpp:167 -#: src/input/pages/emotes.cpp:173 src/input/pages/emotes.cpp:179 -#: src/input/pages/emotes.cpp:185 src/input/pages/emotes.cpp:191 -#: src/input/pages/emotes.cpp:197 src/input/pages/emotes.cpp:203 -#: src/input/pages/emotes.cpp:209 src/input/pages/emotes.cpp:215 -#: src/input/pages/emotes.cpp:221 src/input/pages/emotes.cpp:227 -#: src/input/pages/emotes.cpp:233 src/input/pages/emotes.cpp:239 -#: src/input/pages/emotes.cpp:245 src/input/pages/emotes.cpp:251 -#: src/input/pages/emotes.cpp:257 src/input/pages/emotes.cpp:263 -#: src/input/pages/emotes.cpp:269 src/input/pages/emotes.cpp:275 -#: src/input/pages/emotes.cpp:281 src/input/pages/emotes.cpp:287 -#: src/input/pages/emotes.cpp:293 src/input/pages/emotes.cpp:299 -#: src/input/pages/emotes.cpp:305 src/input/pages/emotes.cpp:311 -#: src/input/pages/emotes.cpp:317 src/input/pages/emotes.cpp:323 -#: src/input/pages/emotes.cpp:329 src/input/pages/emotes.cpp:335 -#: src/input/pages/emotes.cpp:341 src/input/pages/emotes.cpp:347 -#, c-format -msgid "Emote Shortcut %d" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/emotes.cpp:358 -msgid "Pet emote shortcuts" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/emotes.cpp:364 src/input/pages/emotes.cpp:370 -#: src/input/pages/emotes.cpp:376 src/input/pages/emotes.cpp:382 -#: src/input/pages/emotes.cpp:388 src/input/pages/emotes.cpp:394 -#: src/input/pages/emotes.cpp:400 src/input/pages/emotes.cpp:406 -#: src/input/pages/emotes.cpp:412 src/input/pages/emotes.cpp:418 -#: src/input/pages/emotes.cpp:424 src/input/pages/emotes.cpp:430 -#: src/input/pages/emotes.cpp:436 src/input/pages/emotes.cpp:442 -#: src/input/pages/emotes.cpp:448 src/input/pages/emotes.cpp:454 -#: src/input/pages/emotes.cpp:460 src/input/pages/emotes.cpp:466 -#: src/input/pages/emotes.cpp:472 src/input/pages/emotes.cpp:478 -#: src/input/pages/emotes.cpp:484 src/input/pages/emotes.cpp:490 -#: src/input/pages/emotes.cpp:496 src/input/pages/emotes.cpp:502 -#: src/input/pages/emotes.cpp:508 src/input/pages/emotes.cpp:514 -#: src/input/pages/emotes.cpp:520 src/input/pages/emotes.cpp:526 -#: src/input/pages/emotes.cpp:532 src/input/pages/emotes.cpp:538 -#: src/input/pages/emotes.cpp:544 src/input/pages/emotes.cpp:550 -#: src/input/pages/emotes.cpp:556 src/input/pages/emotes.cpp:562 -#: src/input/pages/emotes.cpp:568 src/input/pages/emotes.cpp:574 -#: src/input/pages/emotes.cpp:580 src/input/pages/emotes.cpp:586 -#: src/input/pages/emotes.cpp:592 src/input/pages/emotes.cpp:598 -#: src/input/pages/emotes.cpp:604 src/input/pages/emotes.cpp:610 -#: src/input/pages/emotes.cpp:616 src/input/pages/emotes.cpp:622 -#: src/input/pages/emotes.cpp:628 src/input/pages/emotes.cpp:634 -#: src/input/pages/emotes.cpp:640 src/input/pages/emotes.cpp:646 -#, c-format -msgid "Pet emote shortcut %d" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:31 -msgid "Move & selection" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:37 -msgid "Move Up" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:43 -msgid "Move Down" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:49 -msgid "Move Left" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:55 -msgid "Move Right" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:61 -msgid "Move Home" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:67 -msgid "Move End" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:73 -msgid "Page up" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:79 -msgid "Page down" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:97 -msgid "Select2" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:115 -msgid "Backspace" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:127 -msgid "Tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:133 -msgid "Mod" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/gui.cpp:139 -msgid "Ctrl" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:35 -msgid "Move Keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:41 -msgid "Move player up" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:47 -msgid "Move player down" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:53 -msgid "Move player left" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:59 -msgid "Move player right" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:65 -msgid "Move player forward" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:71 -msgid "Move pet up" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:77 -msgid "Move pet down" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:83 -msgid "Move pet left" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:89 -msgid "Move pet right" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:95 -msgid "Move homunculus to master" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:101 -msgid "Move mercenary to master" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:107 -msgid "Move to navigation point shortcuts" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/move.cpp:113 src/input/pages/move.cpp:119 -#: src/input/pages/move.cpp:125 src/input/pages/move.cpp:131 -#: src/input/pages/move.cpp:137 src/input/pages/move.cpp:143 -#: src/input/pages/move.cpp:149 src/input/pages/move.cpp:155 -#: src/input/pages/move.cpp:161 src/input/pages/move.cpp:167 -#: src/input/pages/move.cpp:173 src/input/pages/move.cpp:179 -#: src/input/pages/move.cpp:185 src/input/pages/move.cpp:191 -#: src/input/pages/move.cpp:197 src/input/pages/move.cpp:203 -#: src/input/pages/move.cpp:209 src/input/pages/move.cpp:215 -#: src/input/pages/move.cpp:221 src/input/pages/move.cpp:227 -#: src/input/pages/move.cpp:233 src/input/pages/move.cpp:239 -#: src/input/pages/move.cpp:245 src/input/pages/move.cpp:251 -#: src/input/pages/move.cpp:257 src/input/pages/move.cpp:263 -#: src/input/pages/move.cpp:269 src/input/pages/move.cpp:275 -#: src/input/pages/move.cpp:281 src/input/pages/move.cpp:287 -#: src/input/pages/move.cpp:293 src/input/pages/move.cpp:299 -#: src/input/pages/move.cpp:305 src/input/pages/move.cpp:311 -#: src/input/pages/move.cpp:317 src/input/pages/move.cpp:323 -#: src/input/pages/move.cpp:329 src/input/pages/move.cpp:335 -#: src/input/pages/move.cpp:341 src/input/pages/move.cpp:347 -#: src/input/pages/move.cpp:353 src/input/pages/move.cpp:359 -#: src/input/pages/move.cpp:365 src/input/pages/move.cpp:371 -#: src/input/pages/move.cpp:377 src/input/pages/move.cpp:383 -#: src/input/pages/move.cpp:389 src/input/pages/move.cpp:395 -#, c-format -msgid "Move to point Shortcut %d" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:34 -msgid "Input ignore" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:40 -msgid "Ignore input 1" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:46 -msgid "Ignore input 2" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:52 -msgid "Direction keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:58 -msgid "Player direct up" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:64 -msgid "Player direct down" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:70 -msgid "Player direct left" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:76 -msgid "Player direct right" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:82 -msgid "Pet direct up" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:88 -msgid "Pet direct down" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:94 -msgid "Pet direct left" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:100 -msgid "Pet direct right" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:112 -msgid "Crazy moves" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:118 -msgid "Change Crazy Move mode" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:124 -msgid "Quick Drop N Items from 0 slot" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:130 -msgid "Quick Drop N Items" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:136 -msgid "Switch Quick Drop Counter" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:142 -msgid "Quick heal target or self" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:148 -msgid "Heal the most injured player" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:154 -msgid "Use #itenplz spell" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:160 -msgid "Use magic attack" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:166 -msgid "Switch magic attack" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:172 -msgid "Switch pvp attack" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:178 -msgid "Change move type" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:184 -msgid "Change Attack Weapon Type" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:190 -msgid "Change Attack Type" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:196 -msgid "Change Follow mode" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:202 -msgid "Change Imitation mode" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:208 -msgid "Disable / Enable Game modifier keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:214 -msgid "On / Off audio" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:220 -msgid "Enable / Disable away mode" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:226 -msgid "Emulate right click from keyboard" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:232 -msgid "Toggle camera mode" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:238 -msgid "Toggle ipc mode" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:244 -msgid "Show information about position in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:250 -msgid "Show online players number in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:256 -msgid "Show onscreen keyboard" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:262 -msgid "Clean cached graphics" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:268 -msgid "Clean cached fonts" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:274 -msgid "Print visible players in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:280 -msgid "Print all visible beings in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:286 -msgid "Load shop items list from disk" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:292 -msgid "Save shop items list to disk" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:298 -msgid "Print debug cache info" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:304 -msgid "Undress selected player" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:310 -msgid "Quick disconnect from server" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:316 -msgid "Disable debug particle" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:322 -msgid "Create items (for gms)" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:328 -msgid "Print configured directories in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:334 -msgid "Print client uptime in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:340 -msgid "Dump debug information" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:346 -msgid "Crash client" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:352 -msgid "Dump graphics info into chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:358 -msgid "Dump tests info into chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:364 -msgid "Print OpenGL version in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:370 -msgid "Print enabled mods in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:376 -msgid "Dump environments into log" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:382 -msgid "Dump OpenGL state into log" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:389 -msgid "Test SDL font speed" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:396 -msgid "Upload main config" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:402 -msgid "Upload server config" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:414 -msgid "Fire your mercenary" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:420 -msgid "Pet ai start" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:426 -msgid "Pet ai stop" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:432 -msgid "Feed homunculus" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:438 -msgid "Feed pet" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:444 -msgid "Drop pet's loot" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:450 -msgid "Return pet to egg" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/other.cpp:456 -msgid "Unequip pet" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/outfits.cpp:35 -msgid "Outfits keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/outfits.cpp:41 -msgid "Wear outfit" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/outfits.cpp:53 -msgid "Copy Outfit to other outfit" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/outfits.cpp:59 -msgid "Copy outfit to chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/outfits.cpp:65 -msgid "Copy equipped to outfit" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/outfits.cpp:71 -msgid "Show hat in chat" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/outfits.cpp:77 -msgid "Outfits shortcuts" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/outfits.cpp:83 src/input/pages/outfits.cpp:89 -#: src/input/pages/outfits.cpp:95 src/input/pages/outfits.cpp:101 -#: src/input/pages/outfits.cpp:107 src/input/pages/outfits.cpp:113 -#: src/input/pages/outfits.cpp:119 src/input/pages/outfits.cpp:125 -#: src/input/pages/outfits.cpp:131 src/input/pages/outfits.cpp:137 -#: src/input/pages/outfits.cpp:143 src/input/pages/outfits.cpp:149 -#: src/input/pages/outfits.cpp:155 src/input/pages/outfits.cpp:161 -#: src/input/pages/outfits.cpp:167 src/input/pages/outfits.cpp:173 -#: src/input/pages/outfits.cpp:179 src/input/pages/outfits.cpp:185 -#: src/input/pages/outfits.cpp:191 src/input/pages/outfits.cpp:197 -#: src/input/pages/outfits.cpp:203 src/input/pages/outfits.cpp:209 -#: src/input/pages/outfits.cpp:215 src/input/pages/outfits.cpp:221 -#: src/input/pages/outfits.cpp:227 src/input/pages/outfits.cpp:233 -#: src/input/pages/outfits.cpp:239 src/input/pages/outfits.cpp:245 -#: src/input/pages/outfits.cpp:251 src/input/pages/outfits.cpp:257 -#: src/input/pages/outfits.cpp:263 src/input/pages/outfits.cpp:269 -#: src/input/pages/outfits.cpp:275 src/input/pages/outfits.cpp:281 -#: src/input/pages/outfits.cpp:287 src/input/pages/outfits.cpp:293 -#: src/input/pages/outfits.cpp:299 src/input/pages/outfits.cpp:305 -#: src/input/pages/outfits.cpp:311 src/input/pages/outfits.cpp:317 -#: src/input/pages/outfits.cpp:323 src/input/pages/outfits.cpp:329 -#: src/input/pages/outfits.cpp:335 src/input/pages/outfits.cpp:341 -#: src/input/pages/outfits.cpp:347 src/input/pages/outfits.cpp:353 -#: src/input/pages/outfits.cpp:359 src/input/pages/outfits.cpp:365 -#, c-format -msgid "Outfit Shortcut %d" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/shortcuts.cpp:35 -msgid "Shortcuts modifiers keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/shortcuts.cpp:41 -msgid "Item Shortcuts Key" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/shortcuts.cpp:47 -msgid "Shortcuts keys" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/shortcuts.cpp:53 src/input/pages/shortcuts.cpp:59 -#: src/input/pages/shortcuts.cpp:65 src/input/pages/shortcuts.cpp:71 -#: src/input/pages/shortcuts.cpp:77 src/input/pages/shortcuts.cpp:83 -#: src/input/pages/shortcuts.cpp:89 src/input/pages/shortcuts.cpp:95 -#: src/input/pages/shortcuts.cpp:101 src/input/pages/shortcuts.cpp:107 -#: src/input/pages/shortcuts.cpp:113 src/input/pages/shortcuts.cpp:119 -#: src/input/pages/shortcuts.cpp:125 src/input/pages/shortcuts.cpp:131 -#: src/input/pages/shortcuts.cpp:137 src/input/pages/shortcuts.cpp:143 -#: src/input/pages/shortcuts.cpp:149 src/input/pages/shortcuts.cpp:155 -#: src/input/pages/shortcuts.cpp:161 src/input/pages/shortcuts.cpp:167 -#, c-format -msgid "Item Shortcut %d" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:40 -msgid "Show Windows Menu" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:46 -msgid "Hide Windows" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:52 -msgid "About Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:58 -msgid "Bank Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:64 -msgid "Help Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:70 -msgid "Server Info Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:76 -msgid "Status Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:82 -msgid "Inventory Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:88 -msgid "Equipment Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:94 -msgid "Skill Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:100 -msgid "Minimap Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:106 -msgid "Chat Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:112 -msgid "Item Shortcut Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:118 -msgid "Setup Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:124 -msgid "Debug Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:130 -msgid "Social Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:136 -msgid "Emote Shortcut Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:142 -msgid "Outfits Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:148 -msgid "Shop Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:154 -msgid "Quick drop Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:160 -msgid "Kill Stats Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:166 -msgid "Commands Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:172 -msgid "Who Is Online Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:178 -msgid "Did you know Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:184 -msgid "Quests Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:190 -msgid "Updates Window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:196 -msgid "Cart window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:202 -msgid "Quick settings window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:208 -msgid "Clan window" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:220 -msgid "Previous Social Tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:226 -msgid "Next Social Tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:232 -msgid "Previous Shortcuts tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:238 -msgid "Next Shortcuts tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:244 -msgid "Previous Commands tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:250 -msgid "Next Commands tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:256 -msgid "Previous inventory tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:262 -msgid "Next inventory tab" -msgstr "" - -#. TRANSLATORS: input action name -#: src/input/pages/windows.cpp:268 -msgid "Clear drops window" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:50 -msgid "Access denied. Most likely, there are too many players on this server." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:55 -msgid "Cannot use this ID." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:59 -msgid "Unknown char-server failure." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:75 -msgid "Failed to create character. Most likely the name is already taken." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:80 src/net/ea/loginrecv.cpp:117 -#: src/net/eathena/loginrecv.cpp:115 -msgid "Wrong name." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:84 -msgid "Incorrect stats." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:88 -msgid "Incorrect hair." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:92 -msgid "Incorrect slot." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:96 -msgid "Incorrect race." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/charserverrecv.cpp:100 -msgid "Incorrect look." -msgstr "" - -#. TRANSLATORS: info message -#: src/net/ea/charserverrecv.cpp:132 -msgid "Character deleted." -msgstr "" - -#. TRANSLATORS: chat message -#: src/net/ea/chatrecv.cpp:94 -#, c-format -msgid "Whisper could not be sent, %s is offline." -msgstr "" - -#. TRANSLATORS: chat message -#: src/net/ea/chatrecv.cpp:104 -#, c-format -msgid "Whisper could not be sent, ignored by %s." -msgstr "" - -#. TRANSLATORS: chat message -#: src/net/ea/chatrecv.cpp:114 -msgid "Whisper could not be sent, you ignored by all players." -msgstr "" - -#. TRANSLATORS: error header -#: src/net/ea/gamerecv.cpp:67 -msgid "Game" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/gamerecv.cpp:69 -msgid "Request to quit denied!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:76 src/net/eathena/loginrecv.cpp:69 -msgid "Unregistered ID." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:80 src/net/eathena/loginrecv.cpp:73 -msgid "Wrong password." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:85 src/net/eathena/loginrecv.cpp:78 -msgid "Account expired." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:89 src/net/eathena/loginrecv.cpp:82 -msgid "Rejected from server." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:93 src/net/eathena/loginrecv.cpp:86 -msgid "" -"You have been permanently banned from the game. Please contact the GM team." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:98 src/net/eathena/loginrecv.cpp:91 -msgid "" -"Client too old or wrong server type.\n" -"Please update client on http://manaplus.org" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:103 src/net/eathena/loginrecv.cpp:96 -#, c-format -msgid "" -"You have been temporarily banned from the game until %s.\n" -"Please contact the GM team via the forums." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:109 src/net/eathena/loginrecv.cpp:105 -msgid "Server overpopulated." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:113 src/net/eathena/loginrecv.cpp:110 -msgid "This user name is already taken." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:125 src/net/eathena/loginrecv.cpp:125 -msgid "Username permanently erased." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/loginrecv.cpp:129 src/net/eathena/loginrecv.cpp:129 -#: src/net/eathena/loginrecv.cpp:235 src/net/tmwa/loginrecv.cpp:130 -msgid "Unknown error." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/network.cpp:111 -msgid "Empty address given to Network::connect()!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/network.cpp:216 -msgid "Unable to resolve host \"" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/ea/network.cpp:297 -msgid "Connection to server terminated. " -msgstr "" - -#. TRANSLATORS: error message -#. TRANSLATORS: char rename error -#: src/net/eathena/charserverrecv.cpp:414 -#: src/net/eathena/charserverrecv.cpp:462 -msgid "Character rename error." -msgstr "" - -#. TRANSLATORS: info message -#: src/net/eathena/charserverrecv.cpp:437 -msgid "Character renamed." -msgstr "" - -#. TRANSLATORS: char rename error -#: src/net/eathena/charserverrecv.cpp:453 -msgid "Rename not allowed." -msgstr "" - -#. TRANSLATORS: char rename error -#: src/net/eathena/charserverrecv.cpp:457 -msgid "New name is not set." -msgstr "" - -#. TRANSLATORS: char rename error -#: src/net/eathena/charserverrecv.cpp:466 -msgid "Character not found." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/charserverrecv.cpp:500 src/net/tmwa/charserverrecv.cpp:293 -msgid "Failed to delete character." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/chatrecv.cpp:138 -msgid "Can't cast skill in this area." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/chatrecv.cpp:142 -msgid "Can't use item in this area." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/chatrecv.cpp:146 -msgid "Can't equip. Wrong level." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/chatrecv.cpp:150 -msgid "Can't use. Wrong level." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/chatrecv.cpp:154 -msgid "Work in progress." -msgstr "" - -#. TRANSLATORS: chat message -#: src/net/eathena/chatrecv.cpp:380 -#, c-format -msgid "Message could not be sent, channel %s is not exists." -msgstr "" - -#. TRANSLATORS: chat message -#: src/net/eathena/chatrecv.cpp:506 -#, c-format -msgid "Can't open channel. Channel %s is not exists." -msgstr "" - -#. TRANSLATORS: adopt child message -#: src/net/eathena/familyrecv.cpp:75 -msgid "Request parents" -msgstr "" - -#. TRANSLATORS: adopt child message -#: src/net/eathena/familyrecv.cpp:77 -#, c-format -msgid "Do you accept %s and %s as parents?" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalhandler.cpp:227 src/net/tmwa/generalhandler.cpp:230 -msgid "Got disconnected from server!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:50 src/net/tmwa/generalrecv.cpp:50 -msgid "Authentication failed." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:54 src/net/tmwa/generalrecv.cpp:54 -msgid "No servers available." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:60 src/net/tmwa/generalrecv.cpp:60 -msgid "Someone else is trying to use this account." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:66 src/net/tmwa/generalrecv.cpp:66 -msgid "This account is already logged in." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:71 src/net/tmwa/generalrecv.cpp:71 -msgid "Speed hack detected." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:75 -msgid "Server full." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:79 -msgid "Sorry, you are underaged." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:83 src/net/tmwa/generalrecv.cpp:75 -msgid "Duplicated login." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:87 -msgid "To many connections from same ip." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:91 -msgid "Not paid for this time." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:95 -msgid "Pay suspended." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:99 -msgid "Pay changed." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:103 -msgid "Pay wrong ip." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:107 -msgid "Pay game room." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:111 -msgid "Disconnect forced by GM." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:116 -msgid "Ban japan refuse." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:120 -msgid "Remained other account." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:124 -msgid "Ip unfair." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:128 -msgid "Ip count all." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:132 -msgid "Ip count." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:137 -msgid "Memory." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:141 -msgid "Han valid." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:145 -msgid "Ip limited access." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:149 -msgid "Over characters list." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:153 -msgid "Ip blocked." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:157 -msgid "Invalid password count." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:161 -msgid "Not allowed race." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:165 -msgid "Access restricted in hours 00:00 to 06:00." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:169 -msgid "You was banned." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:173 src/net/tmwa/generalrecv.cpp:79 -msgid "Unknown connection error." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/generalrecv.cpp:184 -msgid "Map not found" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:130 -#, c-format -msgid "Guild name: %s" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:138 -#, c-format -msgid "Guild master: %s" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:145 -#, c-format -msgid "Guild level: %d" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:150 -#, c-format -msgid "Online members: %d" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:155 -#, c-format -msgid "Max members: %d" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:160 -#, c-format -msgid "Average level: %d" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:165 -#, c-format -msgid "Guild exp: %d" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:170 -#, c-format -msgid "Guild next exp: %d" -msgstr "" - -#. TRANSLATORS: guild info message -#: src/net/eathena/guildrecv.cpp:175 -#, c-format -msgid "Guild castle: %s" -msgstr "" - -#. TRANSLATORS: notification message -#: src/net/eathena/inventoryrecv.cpp:878 -#, c-format -msgid "Left %s rental time for item %s." -msgstr "" - -#. TRANSLATORS: unknown item -#. TRANSLATORS: unknown item message -#. TRANSLATORS: unknown item name -#. TRANSLATORS: item name -#: src/net/eathena/inventoryrecv.cpp:1247 -#: src/net/eathena/inventoryrecv.cpp:1382 src/net/eathena/mail2recv.cpp:204 -#: src/resources/db/itemdb.cpp:171 -msgid "Unknown item" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/loginrecv.cpp:223 src/net/tmwa/loginrecv.cpp:118 -msgid "Account was not found. Please re-login." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/loginrecv.cpp:227 src/net/tmwa/loginrecv.cpp:122 -msgid "Old password incorrect." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/loginrecv.cpp:231 src/net/tmwa/loginrecv.cpp:126 -msgid "New password too short." -msgstr "" - -#. TRANSLATORS: mail message notification -#: src/net/eathena/mailrecv.cpp:203 -#, c-format -msgid "You have new mail from %s with subject %s" -msgstr "" - -#. TRANSLATORS: player killed message -#: src/net/eathena/playerrecv.cpp:509 -msgid "You were killed by unknown source." -msgstr "" - -#. TRANSLATORS: skill error message -#: src/net/eathena/skillrecv.cpp:306 -#, c-format -msgid "Unknown skill error: %d" -msgstr "" - -#. TRANSLATORS: skill error message -#: src/net/eathena/skillrecv.cpp:319 -#, c-format -msgid "Unknown skill error: %d." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:328 src/net/tmwa/skillrecv.cpp:146 -msgid "You have not yet reached a high enough lvl!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:332 src/net/tmwa/skillrecv.cpp:150 -msgid "Insufficient HP!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:336 src/net/tmwa/skillrecv.cpp:154 -msgid "Insufficient SP!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:340 src/net/tmwa/skillrecv.cpp:158 -msgid "You have no memos!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:344 src/net/tmwa/skillrecv.cpp:162 -msgid "You cannot do that right now!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:348 src/net/tmwa/skillrecv.cpp:166 -msgid "Seems you need more money... ;-)" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:352 src/net/tmwa/skillrecv.cpp:170 -msgid "You cannot use this skill with that kind of weapon!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:357 src/net/tmwa/skillrecv.cpp:175 -msgid "You need another red gem!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:361 src/net/tmwa/skillrecv.cpp:179 -msgid "You need another blue gem!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:365 src/net/tmwa/skillrecv.cpp:183 -msgid "You're carrying to much to do this!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:369 -msgid "Fail summon." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:373 -msgid "Need spirits." -msgstr "" - -#. TRANSLATORS: skill error message -#: src/net/eathena/skillrecv.cpp:382 -#, c-format -msgid "Need equipment %s." -msgstr "" - -#. TRANSLATORS: skill error message -#: src/net/eathena/skillrecv.cpp:388 -#, c-format -msgid "Need equipment %s and amount %d" -msgstr "" - -#. TRANSLATORS: skill error message -#: src/net/eathena/skillrecv.cpp:401 -#, c-format -msgid "Need item %s." -msgstr "" - -#. TRANSLATORS: skill error message -#: src/net/eathena/skillrecv.cpp:407 -#, c-format -msgid "Need item %s and amount %d" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/eathena/skillrecv.cpp:416 -msgid "Skill failed!" -msgstr "" - -#. TRANSLATORS: warp select window name -#: src/net/eathena/skillrecv.cpp:434 src/net/eathena/skillrecv.cpp:452 -msgid "Select warp target" -msgstr "" - -#. TRANSLATORS: vending sold item message -#: src/net/eathena/vendingrecv.cpp:267 -#, c-format -msgid "Sold item %s amount %d. You got: %s" -msgstr "" - -#. TRANSLATORS: vending sold item message -#: src/net/eathena/vendingrecv.cpp:275 -#, c-format -msgid "Sold item %s amount %d" -msgstr "" - -#. TRANSLATORS: trade header -#: src/net/ea/traderecv.cpp:81 -#, c-format -msgid "Trade: You and %s" -msgstr "" - -#. TRANSLATORS: trade message -#: src/net/ea/traderecv.cpp:167 -#, c-format -msgid "%s wants to trade with you, do you accept?" -msgstr "" - -#. TRANSLATORS: playe stat -#: src/net/tmwa/charserverhandler.cpp:148 -msgid "Strength:" -msgstr "" - -#. TRANSLATORS: playe stat -#: src/net/tmwa/charserverhandler.cpp:150 -msgid "Agility:" -msgstr "" - -#. TRANSLATORS: playe stat -#: src/net/tmwa/charserverhandler.cpp:152 -msgid "Vitality:" -msgstr "" - -#. TRANSLATORS: playe stat -#: src/net/tmwa/charserverhandler.cpp:154 -msgid "Intelligence:" -msgstr "" - -#. TRANSLATORS: playe stat -#: src/net/tmwa/charserverhandler.cpp:156 -msgid "Dexterity:" -msgstr "" - -#. TRANSLATORS: playe stat -#: src/net/tmwa/charserverhandler.cpp:158 -msgid "Luck:" -msgstr "" - -#. TRANSLATORS: message about spam player -#: src/net/tmwa/chatrecv.cpp:262 -#, c-format -msgid "Detected spam from: %s" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:113 -msgid "Trade failed!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:117 -msgid "Emote failed!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:121 -msgid "Sit failed!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:125 -msgid "Chat creating failed!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:129 -msgid "Could not join party!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:133 -msgid "Cannot shout!" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:187 -msgid "Huh? What's that?" -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:198 -msgid "Warp failed..." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:202 -msgid "Could not steal anything..." -msgstr "" - -#. TRANSLATORS: error message -#: src/net/tmwa/skillrecv.cpp:206 -msgid "Poison had no effect..." -msgstr "" - -#. TRANSLATORS: dialog caption -#. TRANSLATORS: error header -#: src/pincodemanager.cpp:79 src/pincodemanager.cpp:144 -#: src/pincodemanager.cpp:203 -msgid "Pincode" -msgstr "" - -#. TRANSLATORS: dialog label -#: src/pincodemanager.cpp:81 -msgid "Enter pincode" -msgstr "" - -#. TRANSLATORS: dialog caption -#: src/pincodemanager.cpp:92 src/pincodemanager.cpp:128 -msgid "New pincode" -msgstr "" - -#. TRANSLATORS: dialog label -#: src/pincodemanager.cpp:94 src/pincodemanager.cpp:174 -msgid "Enter new pincode" -msgstr "" - -#. TRANSLATORS: dialog caption -#: src/pincodemanager.cpp:106 src/pincodemanager.cpp:172 -#: src/pincodemanager.cpp:186 -msgid "Change pincode" -msgstr "" - -#. TRANSLATORS: dialog label -#: src/pincodemanager.cpp:108 -msgid "Enter old pincode" -msgstr "" - -#. TRANSLATORS: dialog label -#: src/pincodemanager.cpp:130 src/pincodemanager.cpp:188 -msgid "Confirm new pincode" -msgstr "" - -#. TRANSLATORS: error message -#: src/pincodemanager.cpp:146 src/pincodemanager.cpp:205 -msgid "Wrong pincode confirmation!" -msgstr "" - -#. TRANSLATORS: theme tab quick button -#: src/progs/dyecmd/client.cpp:562 src/progs/manaplus/client.cpp:928 -msgid "About" -msgstr "" - -#. TRANSLATORS: command line help -#: src/progs/dyecmd/dyemain.cpp:62 -msgid "dyecmd srcfile dyestring dstfile" -msgstr "" - -#. TRANSLATORS: command line help -#: src/progs/dyecmd/dyemain.cpp:64 -msgid "or" -msgstr "" - -#. TRANSLATORS: command line help -#: src/progs/dyecmd/dyemain.cpp:66 -msgid "dyecmd srcdyestring dstfile" -msgstr "" - -#. TRANSLATORS: file uploaded message -#: src/progs/manaplus/actions/actions.cpp:175 -msgid "File uploaded" -msgstr "" - -#. TRANSLATORS: clear graphics command message -#. TRANSLATORS: clear fonts cache message -#: src/progs/manaplus/actions/actions.cpp:1113 -#: src/progs/manaplus/actions/actions.cpp:1128 -msgid "Cache cleared" -msgstr "" - -#. TRANSLATORS: uptime command -#: src/progs/manaplus/actions/actions.cpp:1326 -#: src/progs/manaplus/actions/actions.cpp:1334 -#, c-format -msgid "Client uptime: %s" -msgstr "" - -#. TRANSLATORS: dump command -#: src/progs/manaplus/actions/actions.cpp:1398 -#: src/progs/manaplus/actions/actions.cpp:1407 -msgid "Resource images:" -msgstr "" - -#. TRANSLATORS: dump command -#: src/progs/manaplus/actions/actions.cpp:1401 -#: src/progs/manaplus/actions/actions.cpp:1413 -msgid "Orphaned resource images:" -msgstr "" - -#. TRANSLATORS: dump environment command -#: src/progs/manaplus/actions/actions.cpp:1512 -msgid "Environment variables dumped" -msgstr "" - -#. TRANSLATORS: upload config chat message -#: src/progs/manaplus/actions/actions.cpp:1651 -msgid "Config uploaded to:" -msgstr "" - -#. TRANSLATORS: upload config chat message -#: src/progs/manaplus/actions/actions.cpp:1661 -msgid "Server config Uploaded to:" -msgstr "" - -#. TRANSLATORS: upload log chat message -#: src/progs/manaplus/actions/actions.cpp:1671 -msgid "Log uploaded to:" -msgstr "" - -#. TRANSLATORS: last seen disabled warning -#: src/progs/manaplus/actions/actions.cpp:1955 -msgid "" -"Last seen disabled. Enable in players / collect players ID and seen log." -msgstr "" - -#. TRANSLATORS: last seen error -#: src/progs/manaplus/actions/actions.cpp:1976 -msgid "You have never seen this nick." -msgstr "" - -#. TRANSLATORS: last seen message -#: src/progs/manaplus/actions/actions.cpp:1984 -#, c-format -msgid "Last seen for %s: %s" -msgstr "" - -#. TRANSLATORS: last seen error -#: src/progs/manaplus/actions/actions.cpp:1995 -msgid "You have not seen this nick before." -msgstr "" - -#. TRANSLATORS: whisper send -#: src/progs/manaplus/actions/chat.cpp:279 -msgid "Cannot send empty whisper or channel message!" -msgstr "" - -#. TRANSLATORS: new whisper or channel query -#: src/progs/manaplus/actions/chat.cpp:334 -#, c-format -msgid "Cannot create a whisper tab \"%s\"! It probably already exists." -msgstr "" - -#. TRANSLATORS: party invite message -#. TRANSLATORS: guild invite message -#. TRANSLATORS: party kick message -#. TRANSLATORS: change relation -#: src/progs/manaplus/actions/chat.cpp:407 -#: src/progs/manaplus/actions/chat.cpp:443 -#: src/progs/manaplus/actions/chat.cpp:451 -#: src/progs/manaplus/actions/chat.cpp:534 -#: src/progs/manaplus/actions/chat.cpp:571 -#: src/progs/manaplus/actions/commands.cpp:108 -msgid "Please specify a name." -msgstr "" - -#. TRANSLATORS: message from toggle chat command -#: src/progs/manaplus/actions/chat.cpp:474 -msgid "Return toggles chat." -msgstr "" - -#: src/progs/manaplus/actions/chat.cpp:474 -msgid "Message closes chat." -msgstr "" - -#. TRANSLATORS: message from toggle chat command -#: src/progs/manaplus/actions/chat.cpp:488 -msgid "Return now toggles chat." -msgstr "" - -#. TRANSLATORS: message from toggle chat command -#: src/progs/manaplus/actions/chat.cpp:500 -msgid "Message now closes chat." -msgstr "" - -#. TRANSLATORS: equipped hat chat message -#: src/progs/manaplus/actions/chat.cpp:661 -msgid "no hat equipped." -msgstr "" - -#. TRANSLATORS: equipped hat chat message -#: src/progs/manaplus/actions/chat.cpp:667 -#, c-format -msgid "equipped hat %s." -msgstr "" - -#. TRANSLATORS: dialog header -#: src/progs/manaplus/actions/chat.cpp:695 -msgid "Guild notice" -msgstr "" - -#. TRANSLATORS: translation error message -#: src/progs/manaplus/actions/chat.cpp:747 -#, c-format -msgid "No translation found for string: %s" -msgstr "" - -#. TRANSLATORS: change relation -#: src/progs/manaplus/actions/commands.cpp:158 -#, c-format -msgid "Player already %s!" -msgstr "" - -#. TRANSLATORS: change relation -#: src/progs/manaplus/actions/commands.cpp:174 -#, c-format -msgid "Player successfully %s!" -msgstr "" - -#. TRANSLATORS: change relation -#: src/progs/manaplus/actions/commands.cpp:176 -#, c-format -msgid "Player could not be %s!" -msgstr "" - -#. TRANSLATORS: unignore command -#: src/progs/manaplus/actions/commands.cpp:211 -msgid "Player wasn't ignored!" -msgstr "" - -#. TRANSLATORS: unignore command -#: src/progs/manaplus/actions/commands.cpp:222 -msgid "Player no longer ignored!" -msgstr "" - -#. TRANSLATORS: unignore command -#: src/progs/manaplus/actions/commands.cpp:224 -msgid "Player could not be unignored!" -msgstr "" - -#. TRANSLATORS: erase command -#: src/progs/manaplus/actions/commands.cpp:239 -msgid "Player already erased!" -msgstr "" - -#. TRANSLATORS: erase command -#: src/progs/manaplus/actions/commands.cpp:251 -msgid "Player no longer erased!" -msgstr "" - -#. TRANSLATORS: erase command -#: src/progs/manaplus/actions/commands.cpp:253 -msgid "Player could not be erased!" -msgstr "" - -#. TRANSLATORS: adding friend command -#: src/progs/manaplus/actions/commands.cpp:260 -msgid "friend" -msgstr "" - -#. TRANSLATORS: disregard command -#: src/progs/manaplus/actions/commands.cpp:267 -msgid "disregarded" -msgstr "" - -#. TRANSLATORS: neutral command -#: src/progs/manaplus/actions/commands.cpp:274 -msgid "neutral" -msgstr "" - -#. TRANSLATORS: blacklist command -#: src/progs/manaplus/actions/commands.cpp:281 -msgid "blacklisted" -msgstr "" - -#. TRANSLATORS: enemy command -#: src/progs/manaplus/actions/commands.cpp:288 -msgid "enemy" -msgstr "" - -#. TRANSLATORS: quick mail message caption -#: src/progs/manaplus/actions/commands.cpp:590 -#: src/progs/manaplus/actions/commands.cpp:597 -msgid "Quick message" -msgstr "" - -#. TRANSLATORS: dialog header -#: src/progs/manaplus/actions/commands.cpp:947 -msgid "Rename your homun" -msgstr "" - -#. TRANSLATORS: result from command /confget -#: src/progs/manaplus/actions/commands.cpp:1125 -#, c-format -msgid "Config value: %s" -msgstr "" - -#. TRANSLATORS: result from command /serverconfget -#: src/progs/manaplus/actions/commands.cpp:1138 -#, c-format -msgid "Server config value: %s" -msgstr "" - -#. TRANSLATORS: chat message -#. TRANSLATORS: notification message -#: src/progs/manaplus/actions/commands.cpp:1798 -#: src/resources/notifications.h:212 -msgid "Item sharing enabled." -msgstr "" - -#. TRANSLATORS: chat message -#. TRANSLATORS: notification message -#: src/progs/manaplus/actions/commands.cpp:1805 -#: src/resources/notifications.h:216 -msgid "Item sharing disabled." -msgstr "" - -#. TRANSLATORS: chat message -#. TRANSLATORS: notification message -#: src/progs/manaplus/actions/commands.cpp:1812 -#: src/resources/notifications.h:220 -msgid "Item sharing not possible." -msgstr "" - -#. TRANSLATORS: chat message -#: src/progs/manaplus/actions/commands.cpp:1819 -msgid "Item sharing unknown." -msgstr "" - -#. TRANSLATORS: chat message -#. TRANSLATORS: notification message -#: src/progs/manaplus/actions/commands.cpp:1874 -#: src/resources/notifications.h:200 -msgid "Experience sharing enabled." -msgstr "" - -#. TRANSLATORS: chat message -#. TRANSLATORS: notification message -#: src/progs/manaplus/actions/commands.cpp:1881 -#: src/resources/notifications.h:204 -msgid "Experience sharing disabled." -msgstr "" - -#. TRANSLATORS: chat message -#. TRANSLATORS: notification message -#: src/progs/manaplus/actions/commands.cpp:1888 -#: src/resources/notifications.h:208 -msgid "Experience sharing not possible." -msgstr "" - -#. TRANSLATORS: chat message -#: src/progs/manaplus/actions/commands.cpp:1895 -msgid "Experience sharing unknown." -msgstr "" - -#. TRANSLATORS: chat message -#: src/progs/manaplus/actions/commands.cpp:1950 -msgid "Auto item sharing enabled." -msgstr "" - -#. TRANSLATORS: chat message -#: src/progs/manaplus/actions/commands.cpp:1957 -msgid "Auto item sharing disabled." -msgstr "" - -#. TRANSLATORS: chat message -#: src/progs/manaplus/actions/commands.cpp:1964 -msgid "Auto item sharing not possible." -msgstr "" - -#. TRANSLATORS: chat message -#: src/progs/manaplus/actions/commands.cpp:1971 -msgid "Auto item sharing unknown." -msgstr "" - -#. TRANSLATORS: dialog header -#: src/progs/manaplus/actions/pets.cpp:87 -msgid "Rename your pet" -msgstr "" - -#. TRANSLATORS: disable trades message -#: src/progs/manaplus/actions/statusbar.cpp:180 -msgid "Ignoring incoming trade requests" -msgstr "" - -#. TRANSLATORS: enable trades message -#: src/progs/manaplus/actions/statusbar.cpp:192 -msgid "Accepting incoming trade requests" -msgstr "" - -#. TRANSLATORS: connection dialog header -#: src/progs/manaplus/client.cpp:1139 -msgid "Connecting to server" -msgstr "" - -#. TRANSLATORS: connection dialog header -#: src/progs/manaplus/client.cpp:1198 src/unittests/gui/windowmanager.cc:830 -msgid "Logging in" -msgstr "" - -#. TRANSLATORS: connection dialog header -#: src/progs/manaplus/client.cpp:1248 -msgid "Entering game world" -msgstr "" - -#. TRANSLATORS: connection dialog header -#: src/progs/manaplus/client.cpp:1309 -msgid "Requesting characters" -msgstr "" - -#. TRANSLATORS: connection dialog header -#: src/progs/manaplus/client.cpp:1353 -msgid "Connecting to the game server" -msgstr "" - -#. TRANSLATORS: connection dialog header -#: src/progs/manaplus/client.cpp:1365 -msgid "Changing game servers" -msgstr "" - -#. TRANSLATORS: connection dialog header -#: src/progs/manaplus/client.cpp:1461 -msgid "Requesting registration details" -msgstr "" - -#. TRANSLATORS: password change message header -#: src/progs/manaplus/client.cpp:1508 -msgid "Password Change" -msgstr "" - -#. TRANSLATORS: password change message text -#: src/progs/manaplus/client.cpp:1510 -msgid "Password changed successfully!" -msgstr "" - -#. TRANSLATORS: email change message header -#: src/progs/manaplus/client.cpp:1543 -msgid "Email Change" -msgstr "" - -#. TRANSLATORS: email change message text -#: src/progs/manaplus/client.cpp:1545 -msgid "Email changed successfully!" -msgstr "" - -#. TRANSLATORS: draw backend -#: src/render/rendererslistsdl2.h:45 src/render/rendererslistsdl2.h:80 -#: src/render/rendererslistsdl2.h:120 src/render/rendererslistsdl2.h:163 -#: src/render/rendererslistsdl.h:48 src/render/rendererslistsdl.h:80 -#: src/render/rendererslistsdl.h:117 src/render/rendererslistsdl.h:157 -msgid "Software" -msgstr "" - -#. TRANSLATORS: draw backend -#: src/render/rendererslistsdl2.h:47 src/render/rendererslistsdl2.h:82 -#: src/render/rendererslistsdl2.h:122 src/render/rendererslistsdl2.h:165 -msgid "SDL2 default" -msgstr "" - -#. TRANSLATORS: draw backend -#: src/render/rendererslistsdl2.h:49 src/render/rendererslistsdl2.h:128 -#: src/render/rendererslistsdl.h:50 src/render/rendererslistsdl.h:123 -msgid "Mobile OpenGL ES" -msgstr "" - -#. TRANSLATORS: draw backend -#: src/render/rendererslistsdl2.h:84 src/render/rendererslistsdl2.h:126 -#: src/render/rendererslistsdl.h:82 src/render/rendererslistsdl.h:121 -msgid "Safe OpenGL" -msgstr "" - -#. TRANSLATORS: draw backend -#: src/render/rendererslistsdl2.h:86 src/render/rendererslistsdl2.h:132 -#: src/render/rendererslistsdl.h:84 src/render/rendererslistsdl.h:127 -msgid "Mobile OpenGL ES 2" -msgstr "" - -#. TRANSLATORS: draw backend -#: src/render/rendererslistsdl2.h:124 src/render/rendererslistsdl.h:119 -msgid "Normal OpenGL" -msgstr "" - -#. TRANSLATORS: draw backend -#: src/render/rendererslistsdl2.h:130 src/render/rendererslistsdl.h:125 -msgid "Modern OpenGL" -msgstr "" - -#. TRANSLATORS: being info default name -#. TRANSLATORS: unknown info name -#. TRANSLATORS: unknown clan name -#. TRANSLATORS: unknown info name -#. TRANSLATORS: item info name -#. TRANSLATORS: unknown info name -#. TRANSLATORS: being info default name -#: src/resources/beinginfo.cpp:63 src/resources/db/avatardb.cpp:95 -#: src/resources/db/clandb.cpp:102 src/resources/db/homunculusdb.cpp:99 -#: src/resources/db/itemdb.cpp:414 src/resources/db/itemdb.cpp:418 -#: src/resources/db/mercenarydb.cpp:101 src/resources/db/moddb.cpp:80 -#: src/resources/db/monsterdb.cpp:103 src/resources/modinfo.cpp:29 -msgid "unnamed" -msgstr "" - -#. TRANSLATORS: unknown info name -#: src/resources/db/petdb.cpp:103 -msgid "pet" -msgstr "" - -#. TRANSLATORS: unknown info name -#: src/resources/db/skillunitdb.cpp:102 -msgid "skill" -msgstr "" - -#. TRANSLATORS: player stat -#: src/resources/db/statdb.cpp:48 -msgid "Strength" -msgstr "" - -#. TRANSLATORS: player stat -#: src/resources/db/statdb.cpp:52 -msgid "Agility" -msgstr "" - -#. TRANSLATORS: player stat -#: src/resources/db/statdb.cpp:56 -msgid "Vitality" -msgstr "" - -#. TRANSLATORS: player stat -#: src/resources/db/statdb.cpp:60 -msgid "Intelligence" -msgstr "" - -#. TRANSLATORS: player stat -#: src/resources/db/statdb.cpp:64 -msgid "Dexterity" -msgstr "" - -#. TRANSLATORS: player stat -#: src/resources/db/statdb.cpp:68 -msgid "Luck" -msgstr "" - -#. TRANSLATORS: stats page name -#: src/resources/db/statdb.cpp:203 -msgid "Extended" -msgstr "" - -#. TRANSLATORS: inventory type name -#: src/resources/inventory/inventory.cpp:370 -msgid "Npc" -msgstr "" - -#. TRANSLATORS: memory usage chat message -#: src/resources/memorymanager.cpp:95 -#, c-format -msgid "Calculated memory usage: %d" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:40 -msgid "Thanks for buying." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:44 -msgid "Unable to buy." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:48 -msgid "Unable to buy. You don't have enough money." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:52 -msgid "Unable to buy. It is too heavy." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:56 -msgid "Unable to buy. You have too many items." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:60 -msgid "Nothing to sell." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:64 -msgid "Thanks for selling." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:68 -msgid "Unable to sell." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:72 -msgid "Unable to sell while trading." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:76 -msgid "Unable to sell unsellable item." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:80 -#, c-format -msgid "Online users: %d" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:84 -msgid "Guild created." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:88 -msgid "You are already in a guild." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:92 -msgid "Emperium check failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:96 -msgid "Unknown server response." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:100 -msgid "You have left the guild." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:104 -msgid "Could not invite user to guild." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:108 -msgid "User rejected guild invite." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:112 -msgid "User is now part of your guild." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:116 -msgid "Your guild is full." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:120 -msgid "Unknown guild invite response." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:124 -#, c-format -msgid "%s has left your guild." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:128 -msgid "You were kicked from guild." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:132 -#, c-format -msgid "%s has been kicked from your guild." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:136 -msgid "Failed to use item." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:140 -msgid "Unable to equip." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:144 -msgid "Unable to equip because you have wrong level." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:148 -msgid "Unable to unequip." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:152 -msgid "Couldn't create party." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:156 -msgid "Party successfully created." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:160 -msgid "You have left the party." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:164 -msgid "You can't leave party on this map." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:168 -msgid "You were kicked from party." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:172 -msgid "You can't be kicked from party on this map." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:176 -#, c-format -msgid "%s has joined your party." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:180 -#, c-format -msgid "%s is already a member of a party." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:184 -#, c-format -msgid "%s refused your invitation." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:188 -#, c-format -msgid "%s is now a member of your party." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:192 -#, c-format -msgid "%s can't join your party because party is full." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:196 -#, c-format -msgid "QQQ Unknown invite response for %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:224 -#, c-format -msgid "%s has left your party." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:228 src/resources/notifications.h:236 -#, c-format -msgid "%s can't be kicked from party on this map." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:232 -#, c-format -msgid "%s has kicked from your party." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:240 -#, c-format -msgid "An unknown member tried to say: %s" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:244 -#, c-format -msgid "%s is not in your party!" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:248 -#, c-format -msgid "You picked up %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:252 -#, c-format -msgid "You spent %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:256 -msgid "Cannot raise skill!" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:260 -msgid "Equip ammunition first." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:264 -#, c-format -msgid "Trading with %s isn't possible. Trade partner is too far away." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:269 -#, c-format -msgid "Trading with %s isn't possible. Character doesn't exist." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:273 -msgid "Trade cancelled due to an unknown reason." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:277 -#, c-format -msgid "Trade with %s cancelled." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:281 -#, c-format -msgid "Trade with %s cancelled, because player is busy" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:285 -#, c-format -msgid "Unhandled trade cancel packet with %s" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:289 -msgid "Failed adding item. Trade partner is over weighted." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:293 -msgid "Failed adding item. Trade partner has no free slot." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:297 -msgid "Failed adding item. You can't trade this item." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:301 -msgid "Failed adding item for unknown reason." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:305 -msgid "Trade canceled." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:309 -msgid "Trade completed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:313 -msgid "Kick failed!" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:317 -msgid "Kick succeeded!" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:321 -#, c-format -msgid "MVP player: %s" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:325 -msgid "All whispers ignored." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:329 -msgid "All whispers ignore failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:333 -msgid "All whispers unignored." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:337 -msgid "All whispers unignore failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:344 -msgid "pvp off, gvg off" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:348 -msgid "pvp on" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:352 -msgid "gvg on" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:356 -msgid "pvp on, gvg on" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:360 -msgid "unknown pvp" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:364 -#, c-format -msgid "Char from account %s is already in your party!" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:368 -#, c-format -msgid "%s blocked invite!" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:372 -msgid "Char is not online!" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:376 -msgid "Pet catch failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:380 -msgid "Pet caught." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:384 -#, c-format -msgid "Pet catch unknown error: %d." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:388 -msgid "Your mercenary duty hour is over." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:392 -msgid "Your mercenary was killed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:396 -msgid "Your mercenary was fired." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:400 -msgid "Your mercenary run away." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:404 -msgid "Mercenary unknown state." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:408 -msgid "You feed your homunculus." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:412 -#, c-format -msgid "You can't feed homunculus, because you don't have any %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:416 -msgid "Card insert failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:420 -msgid "Card inserted." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:424 -msgid "Bank check failed. Bank probably disabled." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:428 -msgid "" -"Deposit failed. You probably don't have this amount of money with you right " -"now." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:433 -msgid "" -"Withdraw failed. You probably don't have this amount of money in the bank " -"right now." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:438 -msgid "Buying store create failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:442 -msgid "Buying store create failed. Too many weight." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:446 -msgid "Buying store create failed. No items in store." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:450 -msgid "All items within the buy limit were purchased." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:454 -msgid "All items were purchased." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:458 -msgid "Buying item failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:462 -msgid "The deal has failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:466 -msgid "" -"The trade failed, because the entered amount of item is higher, than the " -"buyer is willing to buy." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:471 -msgid "The trade failed, because the buyer is lacking required balance." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:476 -msgid "Selling item failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:481 -msgid "Items searching failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:485 -msgid "No matching stores were found." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:489 -msgid "There are too many results. Please enter more detailed search term." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:494 -msgid "You cannot search anymore." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:498 -msgid "You cannot search yet." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:502 -msgid "No store information available." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:506 -msgid "Pet feeding success." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:510 -msgid "Pet feeding error." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:514 -msgid "A manner point has been successfully aligned." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:518 -#, c-format -msgid "You got positive manner points from %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:522 -#, c-format -msgid "You got negative manner points from %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:526 -msgid "Chat room limit exceeded" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:530 -msgid "Chat room already exists" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:534 -#, c-format -msgid "%s joined room." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:538 -#, c-format -msgid "%s left room." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:542 -#, c-format -msgid "%s kicked from room." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:546 -#, c-format -msgid "%s role changed to room owner." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:550 -msgid "Room join failed. Room full." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:554 -msgid "Room join failed. Wrong password." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:558 -msgid "Room join failed. Kicked from room." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:562 -msgid "Room join failed. Not enough money." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:566 -msgid "Room join failed. Too low level." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:570 -msgid "Room join failed. Too high level." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:574 -msgid "Room join failed. Wrong race." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:578 -#, c-format -msgid "Left %d seconds until you can use item." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:582 -msgid "Message successfully sent." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:586 -msgid "Message send failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:590 -msgid "Item attach failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:594 -msgid "Money attach failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:598 -msgid "Message return failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:602 -msgid "Message return success." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:606 -msgid "Message deletion failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:610 -msgid "Message successfully deleted." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:614 -msgid "You got attach successfully." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:618 -msgid "Error on getting attach successfully." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:622 -msgid "Can't get attach. Too many items." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:629 -msgid "You enter battle field." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:636 -#, c-format -msgid "Rental time for %s expired" -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:640 -#, c-format -msgid "Refine success for item %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:644 -#, c-format -msgid "Refine failure for item %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:648 -#, c-format -msgid "Refine failure. Item %s downgraded." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:652 -#, c-format -msgid "Refine unknown for item %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:656 -msgid "You can't add item to card because weight too high." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:660 -msgid "You can't add item to card because too many items." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:664 -#, c-format -msgid "Item %s bound to you." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:668 -msgid "End all negative status." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:672 -msgid "Immunity to all status." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:676 -msgid "Max hp +100%." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:680 -msgid "Max sp +100%." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:684 -msgid "All stats +20." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:688 -msgid "Enchant weapon with holy element." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:692 -msgid "Enchant armor with holy element." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:696 -msgid "Def +25%." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:700 -msgid "Atk +100%." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:704 -msgid "Flee +50." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:708 -msgid "Full strip failed because of coating." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:712 -msgid "Unknown skill message." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:716 -msgid "Player successfully ignored." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:720 -msgid "Player ignore failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:724 -msgid "Player ignore failed. Because too many ignores." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:728 -msgid "Unknown player ignore failure." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:732 -msgid "Player successfully unignored." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:736 -msgid "Player unignore failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:740 -msgid "Unknown player unignore failure." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:744 -msgid "Unknown ignore type." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:748 -msgid "Pet catch started." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:782 -#, c-format -msgid "Player %s died." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:786 -#, c-format -msgid "Player %s logged out." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:790 -#, c-format -msgid "Player %s warped." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:794 -#, c-format -msgid "Player %s trick dead." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:798 -#, c-format -msgid "Player %s unknown remove." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:802 -#, c-format -msgid "You and %s are now divorced." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:806 -msgid "You were called by your partner." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:810 -#, c-format -msgid "You are calling your partner, %s." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:814 -msgid "Child adoption failed. You already have a baby." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:818 -msgid "Child adoption failed. Your level is too low." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:822 -msgid "" -"Child adoption failed. This player is already married and can't be a baby." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:827 -msgid "Saved location for warp skill." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:831 -msgid "Error saving location. Not enough skill level." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:835 -msgid "Error saving location. You do not have warp skill." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:839 -msgid "Unable to buy while trading." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:846 -msgid "Unable to buy. Npc not found." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:850 -msgid "Unable to buy. Shop system error." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:854 -msgid "Unable to buy. Wrong items selected." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:858 -#, c-format -msgid "Mail destination name %s is wrong." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:862 -msgid "Item attach failed. Weight too big." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:866 -msgid "Item attach failed. Fatal error." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:870 -msgid "Item attach failed. No more space." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:874 -msgid "Item attach failed. Item on tradeable." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:878 -msgid "Item attach failed. Unknown error." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:882 -#, c-format -msgid "Item %s remove failed." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:886 -msgid "Mail send failed. Fatal error." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:890 -msgid "Mail send failed. Too many mails sent." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:894 -msgid "Mail send failed. Wrong attach found." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:898 -msgid "Mail send failed. Receiver name wrong or not checked." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:902 -msgid "Error on getting attach. No space or weight too high." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:906 -msgid "You got money from mail." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:910 -msgid "Error on getting money attach." -msgstr "" - -#. TRANSLATORS: notification message -#: src/resources/notifications.h:914 -msgid "Error on getting money attach. Too many money." -msgstr "" - -#. TRANSLATORS: skill level -#: src/resources/skill/skillinfo.cpp:113 -#, c-format -msgid "Lvl: %d / %d" -msgstr "" - -#. TRANSLATORS: skill type -#: src/resources/skill/skillinfo.cpp:120 -#, c-format -msgid "Type: %s" -msgstr "" - -#. TRANSLATORS: Skill type -#: src/resources/skill/skillinfo.cpp:144 -msgid "Unknown:" -msgstr "" - -#. TRANSLATORS: skill mana -#: src/resources/skill/skillinfo.cpp:151 -#, c-format -msgid " / Mana: -%d" -msgstr "" - -#. TRANSLATORS: skill range -#: src/resources/skill/skillinfo.cpp:159 -#, c-format -msgid "Range: %d" -msgstr "" - -#. TRANSLATORS: Skill type -#: src/resources/skill/skilltypelist.h:37 -msgid "Ground" -msgstr "" - -#. TRANSLATORS: Skill type -#: src/resources/skill/skilltypelist.h:41 -msgid "Unused" -msgstr "" - -#. TRANSLATORS: Skill type -#: src/resources/skill/skilltypelist.h:45 -msgid "TargetTrap" -msgstr "" - -#. TRANSLATORS: chat option changed message -#: src/utils/booleanoptions.h:29 -#, c-format -msgid "Options to /%s are \"yes\", \"no\", \"true\", \"false\", \"1\", \"0\"." -msgstr "" - -#. TRANSLATORS: uptime command -#: src/utils/stringutils.cpp:960 -#, c-format -msgid "%d week" -msgstr "" - -#: src/utils/stringutils.cpp:960 -#, c-format -msgid "%d weeks" -msgstr "" - -#. TRANSLATORS: uptime command -#: src/utils/stringutils.cpp:971 -#, c-format -msgid "%d day" -msgstr "" - -#: src/utils/stringutils.cpp:971 -#, c-format -msgid "%d days" -msgstr "" - -#. TRANSLATORS: uptime command -#: src/utils/stringutils.cpp:981 -#, c-format -msgid "%d hour" -msgstr "" - -#: src/utils/stringutils.cpp:981 -#, c-format -msgid "%d hours" -msgstr "" - -#. TRANSLATORS: uptime command -#: src/utils/stringutils.cpp:991 -#, c-format -msgid "%d minute" -msgstr "" - -#: src/utils/stringutils.cpp:991 -#, c-format -msgid "%d minutes" -msgstr "" - -#. TRANSLATORS: uptime command -#: src/utils/stringutils.cpp:1001 src/utils/stringutils.cpp:1007 -#, c-format -msgid "%d second" -msgstr "" - -#: src/utils/stringutils.cpp:1001 src/utils/stringutils.cpp:1007 -#, c-format -msgid "%d seconds" -msgstr "" diff --git a/po/manaverse.pot b/po/manaverse.pot new file mode 100644 index 000000000..f4256aca5 --- /dev/null +++ b/po/manaverse.pot @@ -0,0 +1,11437 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The ManaPlus Developers +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: akaras@inbox.ru\n" +"POT-Creation-Date: 2019-03-23 22:01+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#. TRANSLATORS: visible beings on map +#: src/actormanager.cpp:1589 +msgid "Visible on map" +msgstr "" + +#. TRANSLATORS: default race name +#: src/being/being.cpp:486 +msgid "Human" +msgstr "" + +#. TRANSLATORS: dodge or miss message in attacks +#: src/being/being.cpp:779 +msgid "dodge" +msgstr "" + +#: src/being/being.cpp:779 +msgid "miss" +msgstr "" + +#. TRANSLATORS: this away status writed in player nick +#: src/being/being.cpp:2567 src/gui/windows/whoisonline.cpp:910 +msgid "A" +msgstr "" + +#. TRANSLATORS: this inactive status writed in player nick +#: src/being/being.cpp:2572 src/gui/windows/whoisonline.cpp:915 +msgid "I" +msgstr "" + +#. TRANSLATORS: chat message after death +#. TRANSLATORS: player killed message +#: src/being/localplayer.cpp:406 src/net/eathena/playerrecv.cpp:520 +#, c-format +msgid "You were killed by %s." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:898 +msgid "Tried to pick up nonexistent item." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:902 +msgid "Item is too heavy." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:906 +msgid "Item is too far away." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:910 +msgid "Inventory is full." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:914 +msgid "Stack is too big." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:918 +msgid "Item belongs to someone else." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:922 +msgid "You can't pickup this amount of items." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:926 +msgid "Your item stack has max amount." +msgstr "" + +#. TRANSLATORS: pickup error message +#: src/being/localplayer.cpp:933 +msgid "Unknown problem picking up item." +msgstr "" + +#. TRANSLATORS: %d is number, +#. [@@%d|%s@@] - here player can see link to item +#: src/being/localplayer.cpp:969 +#, c-format +msgid "You picked up %d [@@%d|%s@@]." +msgid_plural "You picked up %d [@@%d|%s@@]." +msgstr[0] "" +msgstr[1] "" + +#. TRANSLATORS: this is normal experience +#. TRANSLATORS: get xp message +#: src/being/localplayer.cpp:1183 src/being/localplayer.cpp:1185 +#: src/being/localplayer.cpp:1221 src/being/localplayer.cpp:1235 +msgid "xp" +msgstr "" + +#. TRANSLATORS: this is job experience +#: src/being/localplayer.cpp:1191 src/being/localplayer.cpp:1199 +#: src/being/localplayer.cpp:1208 +msgid "job" +msgstr "" + +#. TRANSLATORS: get homunculus xp message +#: src/being/localplayer.cpp:1232 +msgid "Homun" +msgstr "" + +#. TRANSLATORS: get hp message +#: src/being/localplayer.cpp:1245 +msgid "hp" +msgstr "" + +#. TRANSLATORS: get hp message +#: src/being/localplayer.cpp:1255 +msgid "mana" +msgstr "" + +#. TRANSLATORS: follow command message +#: src/being/localplayer.cpp:2349 +#, c-format +msgid "Follow: %s" +msgstr "" + +#. TRANSLATORS: follow command message +#. TRANSLATORS: cancel follow message +#: src/being/localplayer.cpp:2355 src/being/localplayer.cpp:2380 +msgid "Follow canceled" +msgstr "" + +#. TRANSLATORS: imitate command message +#: src/being/localplayer.cpp:2365 +#, c-format +msgid "Imitation: %s" +msgstr "" + +#. TRANSLATORS: imitate command message +#. TRANSLATORS: cancel follow message +#: src/being/localplayer.cpp:2371 src/being/localplayer.cpp:2385 +msgid "Imitation canceled" +msgstr "" + +#. TRANSLATORS: wait player/monster message +#: src/being/localplayer.cpp:2769 +#, c-format +msgid "You see %s" +msgstr "" + +#. TRANSLATORS: ignore/unignore action +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player to completle ignore list +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player to ignore list +#: src/being/playerrelations.cpp:488 src/gui/popups/popupmenu.cpp:2531 +#: src/gui/popups/popupmenu.cpp:2573 +msgid "Completely ignore" +msgstr "" + +#. TRANSLATORS: ignore/unignore action +#: src/being/playerrelations.cpp:507 +msgid "Print '...'" +msgstr "" + +#. TRANSLATORS: ignore/unignore action +#: src/being/playerrelations.cpp:532 +msgid "Blink name" +msgstr "" + +#. TRANSLATORS: ignore strategi +#: src/being/playerrelations.cpp:583 +msgid "Floating '...' bubble" +msgstr "" + +#. TRANSLATORS: ignore strategi +#: src/being/playerrelations.cpp:587 +msgid "Floating bubble" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:44 +msgid "manaplus [options] [manaplus-file]" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:47 +msgid "[manaplus-file] : The manaplus file is an XML file (.manaplus)" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:50 +msgid " used to set custom parameters" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:53 +msgid " to the manaplus client." +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:56 +msgid "Options:" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:59 +msgid " -l --log-file : Log file to use" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:61 +msgid " -a --chat-log-dir : Chat log dir to use" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:63 +msgid " -v --version : Display the version" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:65 +msgid " -h --help : Display this help" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:67 +msgid " -C --config-dir : Configuration directory to use" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:70 +msgid " -U --username : Login with this username" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:73 +msgid " -P --password : Login with this password" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:76 +msgid " -c --character : Login with this character" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:79 +msgid " -s --server : Login server name or IP" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:82 +msgid " -y --server-type : Login server type" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:85 +msgid " -p --port : Login server port" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:88 +msgid " -H --update-host : Use this update host" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:91 +msgid " -D --default : Choose default character server and character" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:95 +msgid " -u --skip-update : Skip the update downloads" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:98 +msgid " -d --data : Directory to load game data from" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:101 +msgid " -L --localdata-dir : Directory to use as local data directory" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:105 +msgid " --screenshot-dir : Directory to store screenshots" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:108 +msgid " --safemode : Start game in safe mode" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:111 +msgid " --renderer : Set renderer type" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:114 +msgid " -T --tests : Start testing drivers and auto configuring" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:118 +msgid " -V --validate : Start validating client data" +msgstr "" + +#. TRANSLATORS: command line help +#: src/commandline.cpp:123 +msgid " -O --no-opengl : Disable OpenGL for this session" +msgstr "" + +#. TRANSLATORS: directory creation error +#: src/configmanager.cpp:62 src/dirs.cpp:372 src/dirs.cpp:387 src/dirs.cpp:437 +#, c-format +msgid "%s doesn't exist and can't be created! Exiting." +msgstr "" + +#. TRANSLATORS: update server initialisation error +#: src/dirs.cpp:484 +#, c-format +msgid "Invalid update host: %s." +msgstr "" + +#. TRANSLATORS: update server initialisation error +#: src/dirs.cpp:517 src/dirs.cpp:526 +msgid "Error creating updates directory!" +msgstr "" + +#. TRANSLATORS: directory creation error +#: src/dirs.cpp:548 src/dirs.cpp:569 +#, c-format +msgid "Error: %s doesn't exist and can't be created! Exiting." +msgstr "" + +#. TRANSLATORS: directory creation error +#: src/dirs.cpp:600 src/dirs.cpp:608 src/dirs.cpp:616 +#, c-format +msgid "%s doesn't exist and can't be created!" +msgstr "" + +#. TRANSLATORS: chat tab header +#. TRANSLATORS: chat tab name +#: src/game.cpp:293 src/gui/windows/chatwindow.cpp:2207 +msgid "General" +msgstr "" + +#. TRANSLATORS: chat tab header +#. TRANSLATORS: long button name for debug window. +#. TRANSLATORS: debug window name +#: src/game.cpp:300 src/gui/windowmanager.cpp:144 src/gui/windowmenu.cpp:239 +#: src/gui/windows/debugwindow.cpp:46 +msgid "Debug" +msgstr "" + +#. TRANSLATORS: save file message +#: src/game.cpp:637 +#, c-format +msgid "Screenshot saved as %s" +msgstr "" + +#. TRANSLATORS: save file message +#: src/game.cpp:650 +msgid "Saving screenshot failed!" +msgstr "" + +#. TRANSLATORS: error message text +#: src/game.cpp:738 +msgid "The connection to the server was lost." +msgstr "" + +#. TRANSLATORS: error message header +#: src/game.cpp:741 +msgid "Network Error" +msgstr "" + +#. TRANSLATORS: auto adjust settings message +#: src/game.cpp:832 +msgid "Auto disable Show beings transparency" +msgstr "" + +#. TRANSLATORS: auto adjust settings message +#: src/game.cpp:853 +msgid "Auto lower Particle effects" +msgstr "" + +#. TRANSLATORS: auto adjust settings message +#: src/game.cpp:874 +msgid "Auto enable opacity cache" +msgstr "" + +#. TRANSLATORS: move type in status bar +#: src/gamemodifiers.cpp:149 +msgid "(D) default moves" +msgstr "" + +#. TRANSLATORS: move type in status bar +#: src/gamemodifiers.cpp:151 +msgid "(I) invert moves" +msgstr "" + +#. TRANSLATORS: move type in status bar +#: src/gamemodifiers.cpp:153 +msgid "(c) moves with some crazy moves" +msgstr "" + +#. TRANSLATORS: move type in status bar +#: src/gamemodifiers.cpp:155 +msgid "(C) moves with crazy moves" +msgstr "" + +#. TRANSLATORS: move type in status bar +#: src/gamemodifiers.cpp:157 +msgid "(d) double normal + crazy" +msgstr "" + +#. TRANSLATORS: move type in status bar +#: src/gamemodifiers.cpp:159 +msgid "(?) unknown move" +msgstr "" + +#. TRANSLATORS: crazy move type in status bar +#: src/gamemodifiers.cpp:184 +#, c-format +msgid "(%u) crazy move number %u" +msgstr "" + +#. TRANSLATORS: crazy move type in status bar +#: src/gamemodifiers.cpp:190 +msgid "(a) custom crazy move" +msgstr "" + +#. TRANSLATORS: crazy move type in status bar +#: src/gamemodifiers.cpp:195 +msgid "(?) crazy move" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:202 +msgid "(0) default moves to target" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:204 +msgid "(1) moves to target in distance 1" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:206 +msgid "(2) moves to target in distance 2" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:208 +msgid "(3) moves to target in distance 3" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:210 +msgid "(4) moves to target in distance 4" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:212 +msgid "(5) moves to target in distance 5" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:214 +msgid "(6) moves to target in distance 6" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:216 +msgid "(7) moves to target in distance 7" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:218 +msgid "(8) moves to target in distance 8" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:220 +msgid "(9) moves to target in distance 9" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:222 +msgid "(A) moves to target in attack range" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:224 +msgid "(a) archer attack range" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:226 +msgid "(B) moves to target in attack range - 1" +msgstr "" + +#. TRANSLATORS: move to target type in status bar +#: src/gamemodifiers.cpp:228 +msgid "(?) move to target" +msgstr "" + +#. TRANSLATORS: folow mode in status bar +#: src/gamemodifiers.cpp:234 +msgid "(D) default follow" +msgstr "" + +#. TRANSLATORS: folow mode in status bar +#: src/gamemodifiers.cpp:236 +msgid "(R) relative follow" +msgstr "" + +#. TRANSLATORS: folow mode in status bar +#: src/gamemodifiers.cpp:238 +msgid "(M) mirror follow" +msgstr "" + +#. TRANSLATORS: folow mode in status bar +#: src/gamemodifiers.cpp:240 +msgid "(P) pet follow" +msgstr "" + +#. TRANSLATORS: folow mode in status bar +#: src/gamemodifiers.cpp:242 +msgid "(?) unknown follow" +msgstr "" + +#. TRANSLATORS: switch attack type in status bar +#. TRANSLATORS: attack type in status bar +#: src/gamemodifiers.cpp:248 src/gamemodifiers.cpp:256 +#: src/gamemodifiers.cpp:270 +msgid "(?) attack" +msgstr "" + +#. TRANSLATORS: switch attack type in status bar +#. TRANSLATORS: attack type in status bar +#: src/gamemodifiers.cpp:250 src/gamemodifiers.cpp:262 +msgid "(D) default attack" +msgstr "" + +#. TRANSLATORS: switch attack type in status bar +#: src/gamemodifiers.cpp:252 +msgid "(s) switch attack without shield" +msgstr "" + +#. TRANSLATORS: switch attack type in status bar +#: src/gamemodifiers.cpp:254 +msgid "(S) switch attack with shield" +msgstr "" + +#. TRANSLATORS: attack type in status bar +#: src/gamemodifiers.cpp:264 +msgid "(G) go and attack" +msgstr "" + +#. TRANSLATORS: attack type in status bar +#: src/gamemodifiers.cpp:266 +msgid "(A) go, attack, pickup" +msgstr "" + +#. TRANSLATORS: attack type in status bar +#: src/gamemodifiers.cpp:268 +msgid "(d) without auto attack" +msgstr "" + +#. TRANSLATORS: targeting type in status bar +#: src/gamemodifiers.cpp:276 +msgid "(D) don't switch target" +msgstr "" + +#. TRANSLATORS: targeting type in status bar +#: src/gamemodifiers.cpp:278 +msgid "(C) always attack closest" +msgstr "" + +#. TRANSLATORS: targeting type in status bar +#: src/gamemodifiers.cpp:280 +msgid "(?) targeting" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:311 +msgid "(S) small pick up 1x1 cells" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:313 +msgid "(D) default pick up 2x1 cells" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:315 +msgid "(F) forward pick up 2x3 cells" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:317 +msgid "(3) pick up 3x3 cells" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:319 +msgid "(g) go and pick up in distance 4" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:321 +msgid "(G) go and pick up in distance 8" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:323 +msgid "(A) go and pick up in max distance" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:325 +msgid "(?) pick up" +msgstr "" + +#. TRANSLATORS: magic attack in status bar +#: src/gamemodifiers.cpp:331 +msgid "(f) use #flar for magic attack" +msgstr "" + +#. TRANSLATORS: magic attack in status bar +#: src/gamemodifiers.cpp:333 +msgid "(c) use #chiza for magic attack" +msgstr "" + +#. TRANSLATORS: magic attack in status bar +#: src/gamemodifiers.cpp:335 +msgid "(I) use #ingrav for magic attack" +msgstr "" + +#. TRANSLATORS: magic attack in status bar +#: src/gamemodifiers.cpp:337 +msgid "(F) use #frillyar for magic attack" +msgstr "" + +#. TRANSLATORS: magic attack in status bar +#: src/gamemodifiers.cpp:339 +msgid "(U) use #upmarmu for magic attack" +msgstr "" + +#. TRANSLATORS: magic attack in status bar +#: src/gamemodifiers.cpp:341 +msgid "(?) magic attack" +msgstr "" + +#. TRANSLATORS: player attack type in status bar +#: src/gamemodifiers.cpp:347 +msgid "(a) attack all players" +msgstr "" + +#. TRANSLATORS: player attack type in status bar +#: src/gamemodifiers.cpp:349 +msgid "(f) attack all except friends" +msgstr "" + +#. TRANSLATORS: player attack type in status bar +#: src/gamemodifiers.cpp:351 +msgid "(b) attack bad relations" +msgstr "" + +#. TRANSLATORS: player attack type in status bar +#: src/gamemodifiers.cpp:353 +msgid "(d) don't attack players" +msgstr "" + +#. TRANSLATORS: player attack type in status bar +#: src/gamemodifiers.cpp:355 +msgid "(?) pvp attack" +msgstr "" + +#. TRANSLATORS: imitation type in status bar +#: src/gamemodifiers.cpp:361 +msgid "(D) default imitation" +msgstr "" + +#. TRANSLATORS: imitation type in status bar +#: src/gamemodifiers.cpp:363 +msgid "(O) outfits imitation" +msgstr "" + +#. TRANSLATORS: imitation type in status bar +#: src/gamemodifiers.cpp:365 +msgid "(?) imitation" +msgstr "" + +#. TRANSLATORS: game modifiers state in status bar +#: src/gamemodifiers.cpp:371 +msgid "Game modifiers are enabled" +msgstr "" + +#. TRANSLATORS: game modifiers state in status bar +#: src/gamemodifiers.cpp:373 +msgid "Game modifiers are disabled" +msgstr "" + +#. TRANSLATORS: game modifiers state in status bar +#: src/gamemodifiers.cpp:375 +msgid "Game modifiers are unknown" +msgstr "" + +#. TRANSLATORS: map view type in status bar +#: src/gamemodifiers.cpp:389 +msgid "(N) normal map view" +msgstr "" + +#. TRANSLATORS: map view type in status bar +#: src/gamemodifiers.cpp:391 +msgid "(D) debug map view" +msgstr "" + +#. TRANSLATORS: map view type in status bar +#: src/gamemodifiers.cpp:393 +msgid "(u) ultra map view" +msgstr "" + +#. TRANSLATORS: map view type in status bar +#: src/gamemodifiers.cpp:395 +msgid "(U) ultra map view 2" +msgstr "" + +#. TRANSLATORS: map view type in status bar +#: src/gamemodifiers.cpp:397 +msgid "(e) empty map view with collision" +msgstr "" + +#. TRANSLATORS: map view type in status bar +#: src/gamemodifiers.cpp:399 +msgid "(E) empty map view" +msgstr "" + +#. TRANSLATORS: map view type in status bar +#: src/gamemodifiers.cpp:401 +msgid "(b) black & white map view" +msgstr "" + +#. TRANSLATORS: pickup size in status bar +#: src/gamemodifiers.cpp:403 +msgid "(?) map view" +msgstr "" + +#. TRANSLATORS: away type in status bar +#: src/gamemodifiers.cpp:415 +msgid "(O) on keyboard" +msgstr "" + +#. TRANSLATORS: away type in status bar +#: src/gamemodifiers.cpp:417 +msgid "(A) away" +msgstr "" + +#. TRANSLATORS: away type in status bar +#. TRANSLATORS: camera mode in status bar +#: src/gamemodifiers.cpp:419 src/gamemodifiers.cpp:479 +msgid "(?) away" +msgstr "" + +#. TRANSLATORS: away message box header +#: src/gamemodifiers.cpp:445 +msgid "Away" +msgstr "" + +#. TRANSLATORS: ok dialog button +#. TRANSLATORS: edit dialog label +#. TRANSLATORS: edit server dialog button +#. TRANSLATORS: ok dialog button +#. TRANSLATORS: item amount window button +#. TRANSLATORS: text dialog button +#. TRANSLATORS: quit dialog button +#. TRANSLATORS: text dialog button +#. TRANSLATORS: ok dialog button +#: src/gamemodifiers.cpp:448 src/gui/dialogsmanager.cpp:202 +#: src/gui/dialogsmanager.cpp:221 src/gui/widgets/tabs/setup_input.cpp:170 +#: src/gui/widgets/tabs/setup_theme.cpp:326 +#: src/gui/widgets/tabs/setup_theme.cpp:362 +#: src/gui/widgets/tabs/setup_video.cpp:277 +#: src/gui/widgets/tabs/setup_video.cpp:306 +#: src/gui/widgets/tabs/setup_video.cpp:435 +#: src/gui/widgets/tabs/setup_video.cpp:451 +#: src/gui/windows/changeemaildialog.cpp:171 +#: src/gui/windows/changepassworddialog.cpp:159 +#: src/gui/windows/charcreatedialog.cpp:508 +#: src/gui/windows/charselectdialog.cpp:281 +#: src/gui/windows/charselectdialog.cpp:330 src/gui/windows/editdialog.cpp:53 +#: src/gui/windows/editserverdialog.cpp:66 +#: src/gui/windows/editserverdialog.cpp:217 +#: src/gui/windows/itemamountwindow.cpp:215 +#: src/gui/windows/pincodedialog.cpp:47 src/gui/windows/quitdialog.cpp:67 +#: src/gui/windows/registerdialog.cpp:253 src/gui/windows/textdialog.cpp:53 +#: src/net/ea/charserverrecv.cpp:108 src/net/ea/charserverrecv.cpp:134 +#: src/net/ea/gamerecv.cpp:71 src/net/eathena/charserverrecv.cpp:439 +#: src/net/eathena/charserverrecv.cpp:474 +#: src/net/eathena/charserverrecv.cpp:502 src/net/tmwa/charserverrecv.cpp:295 +#: src/pincodemanager.cpp:148 src/pincodemanager.cpp:207 +#: src/progs/manaplus/actions/actions.cpp:178 +#: src/progs/manaplus/client.cpp:1512 src/progs/manaplus/client.cpp:1547 +msgid "OK" +msgstr "" + +#. TRANSLATORS: camera mode in status bar +#: src/gamemodifiers.cpp:475 +msgid "(G) game camera mode" +msgstr "" + +#. TRANSLATORS: camera mode in status bar +#: src/gamemodifiers.cpp:477 +msgid "(F) free camera mode" +msgstr "" + +#. TRANSLATORS: ok dialog button +#. TRANSLATORS: popup menu item +#. TRANSLATORS: popup menu item +#. TRANSLATORS: close chat tab +#. TRANSLATORS: popup menu item +#. TRANSLATORS: close window +#. TRANSLATORS: did you know window button +#. TRANSLATORS: storage button +#. TRANSLATORS: mail edit window button +#. TRANSLATORS: mail view window button +#. TRANSLATORS: npc dialog button +#. TRANSLATORS: quests window button +#. TRANSLATORS: shop window button +#. TRANSLATORS: close quick button +#. TRANSLATORS: ok dialog button +#: src/gui/dialogsmanager.cpp:120 src/gui/popups/popupmenu.cpp:842 +#: src/gui/popups/popupmenu.cpp:934 src/gui/popups/popupmenu.cpp:1194 +#: src/gui/windows/didyouknowwindow.cpp:85 +#: src/gui/windows/inventorywindow.cpp:309 +#: src/gui/windows/inventorywindow.cpp:343 +#: src/gui/windows/maileditwindow.cpp:59 src/gui/windows/mailviewwindow.cpp:63 +#: src/gui/windows/npcdialog.cpp:88 src/gui/windows/npcdialog.cpp:134 +#: src/gui/windows/questswindow.cpp:80 src/gui/windows/shopwindow.cpp:114 +#: src/progs/dyecmd/client.cpp:569 src/progs/manaplus/client.cpp:935 +#: src/progs/manaplus/client.cpp:1426 src/progs/manaplus/client.cpp:1445 +msgid "Close" +msgstr "" + +#. TRANSLATORS: error message question +#: src/gui/dialogsmanager.cpp:132 +msgid "Do you want to open support page?" +msgstr "" + +#. TRANSLATORS: ok dialog button +#. TRANSLATORS: popup menu item +#. TRANSLATORS: revive player +#: src/gui/dialogsmanager.cpp:151 src/gui/dialogsmanager.cpp:165 +#: src/gui/popups/popupmenu.cpp:2995 +msgid "Revive" +msgstr "" + +#. TRANSLATORS: ok dialog button +#: src/gui/dialogsmanager.cpp:153 +msgid "GM revive" +msgstr "" + +#. TRANSLATORS: weight message +#: src/gui/dialogsmanager.cpp:198 +msgid "" +"You are carrying more than half your weight. You are unable to regain health." +msgstr "" + +#. TRANSLATORS: weight message +#: src/gui/dialogsmanager.cpp:217 +msgid "You are carrying less than half your weight. You can regain health." +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: inventory sort mode +#. TRANSLATORS: screen density type +#. TRANSLATORS: sdl2 log level +#. TRANSLATORS: sdl driver name +#. TRANSLATORS: vsync type +#. TRANSLATORS: equipment window tab +#. TRANSLATORS: default hosts group name +#: src/gui/models/colorlistmodel.h:33 src/gui/models/sortlistmodelinv.h:32 +#: src/gui/widgets/tabs/setup_misc.cpp:79 +#: src/gui/widgets/tabs/setup_misc.cpp:100 +#: src/gui/widgets/tabs/setup_perfomance.cpp:74 +#: src/gui/widgets/tabs/setup_visual.cpp:81 +#: src/gui/windows/equipmentwindow.cpp:666 src/gui/windows/serverdialog.cpp:688 +msgid "default" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:35 src/gui/models/colormodel.cpp:77 +msgid "black" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:37 src/gui/models/colormodel.cpp:79 +msgid "red" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:39 src/gui/models/colormodel.cpp:81 +msgid "green" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:41 src/gui/models/colormodel.cpp:83 +msgid "blue" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:43 src/gui/models/colormodel.cpp:85 +msgid "gold" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:45 src/gui/models/colormodel.cpp:87 +msgid "yellow" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:47 src/gui/models/colormodel.cpp:89 +msgid "pink" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:49 src/gui/models/colormodel.cpp:91 +msgid "purple" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:51 src/gui/models/colormodel.cpp:93 +msgid "grey" +msgstr "" + +#. TRANSLATORS: chat color +#. TRANSLATORS: color name +#: src/gui/models/colorlistmodel.h:53 src/gui/models/colormodel.cpp:95 +msgid "brown" +msgstr "" + +#. TRANSLATORS: chat color +#: src/gui/models/colorlistmodel.h:55 +msgid "rainbow 1" +msgstr "" + +#. TRANSLATORS: chat color +#: src/gui/models/colorlistmodel.h:57 +msgid "rainbow 2" +msgstr "" + +#. TRANSLATORS: chat color +#: src/gui/models/colorlistmodel.h:59 +msgid "rainbow 3" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:35 +msgid "Very small (8)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:37 +msgid "Very small (9)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:39 +msgid "Tiny (10)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:41 +msgid "Small (11)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:43 +msgid "Medium (12)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:45 +msgid "Normal (13)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:47 +msgid "Large (14)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:49 +msgid "Large (15)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:51 +msgid "Large (16)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:53 +msgid "Big (17)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:55 +msgid "Big (18)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:57 +msgid "Big (19)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:59 +msgid "Very big (20)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:61 +msgid "Very big (21)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:63 +msgid "Very big (22)" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/models/fontsizechoicelistmodel.h:65 +msgid "Huge (23)" +msgstr "" + +#. TRANSLATORS: language +#. TRANSLATORS: popup menu header +#: src/gui/models/langlistmodel.h:47 src/gui/popups/popupmenu.cpp:2037 +#: src/gui/popups/popupmenu.cpp:2120 src/gui/widgets/tabs/socialtabbase.h:50 +msgid "(default)" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:49 +msgid "Catalan" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:51 +msgid "Chinese (China)" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:53 +msgid "Chinese (Hong Kong)" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:55 +msgid "Czech" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:57 +msgid "Dutch (Belgium/Flemish)" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:59 +msgid "English" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:61 +msgid "Finnish" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:63 +msgid "French" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:65 +msgid "German" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:67 +msgid "Indonesian" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:69 +msgid "Italian" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:71 +msgid "Japanese" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:73 +msgid "Polish" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:75 +msgid "Portuguese" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:77 +msgid "Portuguese (Brazilian)" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:79 +msgid "Russian" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:81 +msgid "Spanish (Castilian)" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:83 +msgid "Swedish (Sweden)" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:85 +msgid "Turkish" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:87 +msgid "Ukrainian" +msgstr "" + +#. TRANSLATORS: language +#: src/gui/models/langlistmodel.h:89 +msgid "Esperanto" +msgstr "" + +#. TRANSLATORS: magic school +#: src/gui/models/magicschoolmodel.h:35 +msgid "General Magic" +msgstr "" + +#. TRANSLATORS: magic school +#: src/gui/models/magicschoolmodel.h:37 +msgid "Life Magic" +msgstr "" + +#. TRANSLATORS: magic school +#: src/gui/models/magicschoolmodel.h:39 +msgid "War Magic" +msgstr "" + +#. TRANSLATORS: magic school +#: src/gui/models/magicschoolmodel.h:41 +msgid "Transmute Magic" +msgstr "" + +#. TRANSLATORS: magic school +#: src/gui/models/magicschoolmodel.h:43 +msgid "Nature Magic" +msgstr "" + +#. TRANSLATORS: magic school +#: src/gui/models/magicschoolmodel.h:45 +msgid "Astral Magic" +msgstr "" + +#. TRANSLATORS: relation type +#: src/gui/models/playerrelationlistmodel.h:35 +msgid "Neutral" +msgstr "" + +#. TRANSLATORS: relation type +#: src/gui/models/playerrelationlistmodel.h:37 +msgid "Friend" +msgstr "" + +#. TRANSLATORS: relation type +#: src/gui/models/playerrelationlistmodel.h:39 +msgid "Disregarded" +msgstr "" + +#. TRANSLATORS: relation type +#: src/gui/models/playerrelationlistmodel.h:41 +msgid "Ignored" +msgstr "" + +#. TRANSLATORS: relation type +#: src/gui/models/playerrelationlistmodel.h:43 +msgid "Erased" +msgstr "" + +#. TRANSLATORS: relation type +#: src/gui/models/playerrelationlistmodel.h:45 +msgid "Blacklisted" +msgstr "" + +#. TRANSLATORS: relation type +#. TRANSLATORS: palette color +#: src/gui/models/playerrelationlistmodel.h:47 src/gui/userpalette.cpp:175 +msgid "Enemy" +msgstr "" + +#. TRANSLATORS: server license comment +#: src/gui/models/serverslistmodel.h:76 +msgid "(NON FREE)" +msgstr "" + +#. TRANSLATORS: server license comment +#: src/gui/models/serverslistmodel.h:82 +msgid "(UNKNOWN)" +msgstr "" + +#. TRANSLATORS: buy dialog sort type. +#: src/gui/models/sortlistmodelbuy.h:33 +msgid "unsorted" +msgstr "" + +#. TRANSLATORS: buy dialog sort type. +#: src/gui/models/sortlistmodelbuy.h:35 +msgid "by price" +msgstr "" + +#. TRANSLATORS: buy dialog sort type. +#. TRANSLATORS: inventory sort mode +#: src/gui/models/sortlistmodelbuy.h:37 src/gui/models/sortlistmodelinv.h:34 +msgid "by name" +msgstr "" + +#. TRANSLATORS: buy dialog sort type. +#. TRANSLATORS: inventory sort mode +#: src/gui/models/sortlistmodelbuy.h:39 src/gui/models/sortlistmodelinv.h:36 +msgid "by id" +msgstr "" + +#. TRANSLATORS: buy dialog sort type. +#. TRANSLATORS: inventory sort mode +#: src/gui/models/sortlistmodelbuy.h:41 src/gui/models/sortlistmodelinv.h:38 +msgid "by weight" +msgstr "" + +#. TRANSLATORS: buy dialog sort type. +#. TRANSLATORS: inventory sort mode +#: src/gui/models/sortlistmodelbuy.h:43 src/gui/models/sortlistmodelinv.h:40 +msgid "by amount" +msgstr "" + +#. TRANSLATORS: buy dialog sort type. +#. TRANSLATORS: inventory sort mode +#: src/gui/models/sortlistmodelbuy.h:45 src/gui/models/sortlistmodelinv.h:42 +msgid "by type" +msgstr "" + +#. TRANSLATORS: target type +#: src/gui/models/targettypemodel.h:32 +msgid "No Target" +msgstr "" + +#. TRANSLATORS: target type +#: src/gui/models/targettypemodel.h:34 +msgid "Allow Target" +msgstr "" + +#. TRANSLATORS: target type +#: src/gui/models/targettypemodel.h:36 +msgid "Need Target" +msgstr "" + +#. TRANSLATORS: update type +#. TRANSLATORS: onscreen button size +#: src/gui/models/updatetypemodel.h:32 src/gui/widgets/tabs/setup_touch.cpp:43 +msgid "Normal" +msgstr "" + +#. TRANSLATORS: update type +#: src/gui/models/updatetypemodel.h:34 +msgid "Auto Close" +msgstr "" + +#. TRANSLATORS: update type +#: src/gui/models/updatetypemodel.h:36 +msgid "Skip" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:143 src/gui/popups/beingpopup.cpp:162 +#, c-format +msgid "Hungry: %d" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:149 src/gui/popups/beingpopup.cpp:168 +#, c-format +msgid "Intimacy: %d" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:182 +#, c-format +msgid "Group: %s (%d)" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:193 +#, c-format +msgid "Party: %s" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:203 +#, c-format +msgid "Guild: %s" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:213 +#, c-format +msgid "Clan: %s" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:223 +#, c-format +msgid "Pvp rank: %u" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:233 +#, c-format +msgid "Buy shop: %s" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:243 +#, c-format +msgid "Sell shop: %s" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:253 +#, c-format +msgid "Comment: %s" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:264 +#, c-format +msgid "Effects: %s" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:275 +#, c-format +msgid "Chat room: %s" +msgstr "" + +#. TRANSLATORS: being popup label +#. TRANSLATORS: popup menu item +#. TRANSLATORS: skill level +#. TRANSLATORS: status bar label +#. TRANSLATORS: status window label +#: src/gui/popups/beingpopup.cpp:287 src/gui/popups/popupmenu.cpp:2380 +#: src/gui/popups/skillpopup.cpp:154 src/gui/windows/ministatuswindow.cpp:382 +#: src/gui/windows/statuswindow.cpp:74 src/gui/windows/statuswindow.cpp:282 +#: src/gui/windows/statuswindow.cpp:322 +#, c-format +msgid "Level: %d" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:303 +#, c-format +msgid "Hp: %d/%d" +msgstr "" + +#. TRANSLATORS: being popup label +#: src/gui/popups/beingpopup.cpp:313 +#, c-format +msgid "Particles: %u" +msgstr "" + +#. TRANSLATORS: popup label +#: src/gui/popups/itempopup.cpp:276 +#, c-format +msgid "Weight: %s" +msgstr "" + +#. TRANSLATORS: named item description +#: src/gui/popups/itempopup.cpp:349 +#, c-format +msgid "Item named: %s" +msgstr "" + +#. TRANSLATORS: popup label +#: src/gui/popups/itempopup.cpp:376 +msgid "Cards: " +msgstr "" + +#. TRANSLATORS: popup label +#: src/gui/popups/itempopup.cpp:413 +msgid "Options: " +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: trade with player +#. TRANSLATORS: trade chat tab name +#. TRANSLATORS: inventory type name +#: src/gui/popups/popupmenu.cpp:234 src/gui/popups/popupmenu.cpp:1010 +#: src/gui/widgets/tabs/chat/tradetab.cpp:39 +#: src/resources/inventory/inventory.cpp:391 +msgid "Trade" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: trade attack player +#. TRANSLATORS: popup menu item +#. TRANSLATORS: attack monster +#. TRANSLATORS: popup menu item +#. TRANSLATORS: attack player +#. TRANSLATORS: input action name +#. TRANSLATORS: Skill type +#: src/gui/popups/popupmenu.cpp:237 src/gui/popups/popupmenu.cpp:366 +#: src/gui/popups/popupmenu.cpp:1013 src/input/pages/basic.cpp:40 +#: src/resources/skill/skilltypelist.h:35 +msgid "Attack" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: send whisper to player +#. TRANSLATORS: popup menu item +#. TRANSLATORS: whisper to npc +#. TRANSLATORS: popup menu item +#. TRANSLATORS: send whisper to player +#: src/gui/popups/popupmenu.cpp:240 src/gui/popups/popupmenu.cpp:340 +#: src/gui/popups/popupmenu.cpp:625 +msgid "Whisper" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: heal player +#: src/gui/popups/popupmenu.cpp:250 src/gui/popups/popupmenu.cpp:1018 +#: src/gui/popups/popupmenu.cpp:3073 +msgid "Heal" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: kick player from guild +#: src/gui/popups/popupmenu.cpp:272 src/gui/popups/popupmenu.cpp:289 +#: src/gui/popups/popupmenu.cpp:676 src/gui/popups/popupmenu.cpp:1047 +msgid "Kick from guild" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: change player position in guild +#: src/gui/popups/popupmenu.cpp:279 src/gui/popups/popupmenu.cpp:296 +#: src/gui/popups/popupmenu.cpp:683 src/gui/popups/popupmenu.cpp:1054 +msgid "Change pos in guild" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: invite player to guild +#: src/gui/popups/popupmenu.cpp:310 src/gui/popups/popupmenu.cpp:696 +#: src/gui/popups/popupmenu.cpp:1069 +msgid "Invite to guild" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: set player invisible for self by id +#. TRANSLATORS: popup menu item +#. TRANSLATORS: nuke player +#: src/gui/popups/popupmenu.cpp:317 src/gui/popups/popupmenu.cpp:3038 +msgid "Nuke" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move to player location +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move to npc location +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move to player position +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move to map item +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move to player position +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move to player location +#. TRANSLATORS: input tab sub tab name +#: src/gui/popups/popupmenu.cpp:320 src/gui/popups/popupmenu.cpp:354 +#: src/gui/popups/popupmenu.cpp:657 src/gui/popups/popupmenu.cpp:828 +#: src/gui/popups/popupmenu.cpp:1025 src/gui/popups/popupmenu.cpp:1096 +#: src/gui/setupinputpages.cpp:48 +msgid "Move" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: talk with npc +#. TRANSLATORS: input action name +#. TRANSLATORS: npc context menu item +#: src/gui/popups/popupmenu.cpp:332 src/input/pages/basic.cpp:88 +#: src/resources/db/npcdb.cpp:168 +msgid "Talk" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: buy from npc +#. TRANSLATORS: popup menu item +#. TRANSLATORS: buy item +#. TRANSLATORS: buy dialog name +#. TRANSLATORS: buy dialog button +#. TRANSLATORS: shop window button +#. TRANSLATORS: shop window tab name +#. TRANSLATORS: input action name +#. TRANSLATORS: npc context menu item +#: src/gui/popups/popupmenu.cpp:344 src/gui/popups/popupmenu.cpp:2604 +#: src/gui/windows/buydialog.cpp:214 src/gui/windows/buydialog.cpp:237 +#: src/gui/windows/buydialog.cpp:261 src/gui/windows/buydialog.cpp:339 +#: src/gui/windows/buydialog.cpp:347 src/gui/windows/buyselldialog.cpp:74 +#: src/gui/windows/shopwindow.cpp:171 src/input/pages/basic.cpp:250 +#: src/resources/db/npcdb.cpp:170 +msgid "Buy" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: sell to npc +#. TRANSLATORS: popup menu item +#. TRANSLATORS: sell item +#. TRANSLATORS: sell dialog name +#. TRANSLATORS: sell dialog button +#. TRANSLATORS: shop window button +#. TRANSLATORS: shop window tab name +#. TRANSLATORS: input action name +#. TRANSLATORS: npc context menu item +#: src/gui/popups/popupmenu.cpp:347 src/gui/popups/popupmenu.cpp:2616 +#: src/gui/widgets/selldialog.cpp:58 src/gui/widgets/selldialog.cpp:115 +#: src/gui/widgets/selldialog.cpp:171 src/gui/windows/buyselldialog.cpp:76 +#: src/gui/windows/shopwindow.cpp:173 src/input/pages/basic.cpp:256 +#: src/resources/db/npcdb.cpp:172 +msgid "Sell" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add comment to npc +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add comment to player +#: src/gui/popups/popupmenu.cpp:357 src/gui/popups/popupmenu.cpp:636 +#: src/gui/popups/popupmenu.cpp:2714 +msgid "Add comment" +msgstr "" + +#. TRANSLATORS: remove monster from attack list +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:381 +msgid "Remove from attack list" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add monster to priotiry attack list +#: src/gui/popups/popupmenu.cpp:388 +msgid "Add to priority attack list" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add monster to attack list +#: src/gui/popups/popupmenu.cpp:392 +msgid "Add to attack list" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add monster to ignore list +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add item to pickup list +#: src/gui/popups/popupmenu.cpp:396 src/gui/popups/popupmenu.cpp:2736 +msgid "Add to ignore list" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: Mercenary move to master +#. TRANSLATORS: popup menu item +#. TRANSLATORS: homunculus move to master +#: src/gui/popups/popupmenu.cpp:405 src/gui/popups/popupmenu.cpp:422 +msgid "Move to master" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: fire mercenary +#: src/gui/popups/popupmenu.cpp:410 +msgid "Fire" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: feed homunculus +#. TRANSLATORS: popup menu item +#. TRANSLATORS: feed pet +#: src/gui/popups/popupmenu.cpp:425 src/gui/popups/popupmenu.cpp:444 +msgid "Feed" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: pet rename item +#. TRANSLATORS: popup menu item +#. TRANSLATORS: rename map item +#. TRANSLATORS: character rename button +#. TRANSLATORS: shop window button +#: src/gui/popups/popupmenu.cpp:429 src/gui/popups/popupmenu.cpp:455 +#: src/gui/popups/popupmenu.cpp:784 src/gui/windows/charselectdialog.cpp:115 +#: src/gui/windows/shopwindow.cpp:202 +msgid "Rename" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: delete homunculus +#. TRANSLATORS: popup menu item +#. TRANSLATORS: kill player +#: src/gui/popups/popupmenu.cpp:433 src/gui/popups/popupmenu.cpp:3044 +msgid "Kill" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: pet drop loot +#: src/gui/popups/popupmenu.cpp:447 +msgid "Drop loot" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: pet unequip item +#. TRANSLATORS: equipment window button +#. TRANSLATORS: inventory button +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:450 src/gui/windows/equipmentwindow.cpp:74 +#: src/gui/windows/inventorywindow.cpp:212 src/resources/db/itemdb.cpp:707 +#: src/resources/itemtypemapdata.h:45 src/resources/itemtypemapdata.h:49 +#: src/resources/itemtypemapdata.h:53 src/resources/itemtypemapdata.h:57 +#: src/resources/itemtypemapdata.h:61 src/resources/itemtypemapdata.h:65 +#: src/resources/itemtypemapdata.h:69 src/resources/itemtypemapdata.h:73 +#: src/resources/itemtypemapdata.h:77 src/resources/itemtypemapdata.h:81 +#: src/resources/itemtypemapdata.h:85 src/resources/itemtypemapdata.h:89 +#: src/resources/itemtypemapdata.h:93 +msgid "Unequip" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: pet return to egg +#: src/gui/popups/popupmenu.cpp:470 src/resources/db/petdb.cpp:117 +msgid "Return to egg" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add being name to chat +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player name to chat +#: src/gui/popups/popupmenu.cpp:509 src/gui/popups/popupmenu.cpp:704 +msgid "Add name to chat" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: close menu +#. TRANSLATORS: shop window button +#. TRANSLATORS: button in change email dialog +#. TRANSLATORS: change password dialog button +#. TRANSLATORS: char create dialog button +#. TRANSLATORS: connection dialog button +#. TRANSLATORS: edit server dialog button +#. TRANSLATORS: item amount window button +#. TRANSLATORS: text dialog button +#. TRANSLATORS: quit dialog button +#. TRANSLATORS: register dialog. button. +#. TRANSLATORS: setup button +#. TRANSLATORS: command editor button +#. TRANSLATORS: text dialog button +#. TRANSLATORS: updater window button +#. TRANSLATORS: input action name +#: src/gui/popups/popupmenu.cpp:514 src/gui/popups/popupmenu.cpp:601 +#: src/gui/popups/popupmenu.cpp:708 src/gui/popups/popupmenu.cpp:763 +#: src/gui/popups/popupmenu.cpp:799 src/gui/popups/popupmenu.cpp:847 +#: src/gui/popups/popupmenu.cpp:881 src/gui/popups/popupmenu.cpp:907 +#: src/gui/popups/popupmenu.cpp:1111 src/gui/popups/popupmenu.cpp:1140 +#: src/gui/popups/popupmenu.cpp:1179 src/gui/popups/popupmenu.cpp:1245 +#: src/gui/popups/popupmenu.cpp:1742 src/gui/popups/popupmenu.cpp:1783 +#: src/gui/popups/popupmenu.cpp:1843 src/gui/popups/popupmenu.cpp:1894 +#: src/gui/popups/popupmenu.cpp:1938 src/gui/popups/popupmenu.cpp:2012 +#: src/gui/popups/popupmenu.cpp:2096 src/gui/popups/popupmenu.cpp:2133 +#: src/gui/popups/popupmenu.cpp:2167 src/gui/popups/popupmenu.cpp:2189 +#: src/gui/popups/popupmenu.cpp:2212 src/gui/popups/popupmenu.cpp:2239 +#: src/gui/popups/popupmenu.cpp:2258 src/gui/popups/popupmenu.cpp:2302 +#: src/gui/popups/popupmenu.cpp:2352 src/gui/popups/popupmenu.cpp:2389 +#: src/gui/popups/popupmenu.cpp:2433 src/gui/popups/popupmenu.cpp:2754 +#: src/gui/popups/popupmenu.cpp:2958 src/gui/popups/popupmenu.cpp:3229 +#: src/gui/popups/popupmenu.cpp:3443 src/gui/popups/popupmenu.cpp:3475 +#: src/gui/popups/popupmenu.cpp:3552 src/gui/popups/popupmenu.cpp:3566 +#: src/gui/popups/popupmenu.cpp:3576 src/gui/popups/popupmenu.cpp:3586 +#: src/gui/popups/popupmenu.cpp:3596 src/gui/popups/popupmenu.cpp:3606 +#: src/gui/popups/popupmenu.cpp:3616 src/gui/windows/buyselldialog.cpp:78 +#: src/gui/windows/changeemaildialog.cpp:58 +#: src/gui/windows/changepassworddialog.cpp:58 +#: src/gui/windows/charcreatedialog.cpp:115 +#: src/gui/windows/connectiondialog.cpp:52 +#: src/gui/windows/editserverdialog.cpp:68 +#: src/gui/windows/itemamountwindow.cpp:221 +#: src/gui/windows/pincodedialog.cpp:54 src/gui/windows/quitdialog.cpp:69 +#: src/gui/windows/registerdialog.cpp:66 src/gui/windows/setupwindow.cpp:106 +#: src/gui/windows/textcommandeditor.cpp:108 src/gui/windows/textdialog.cpp:61 +#: src/gui/windows/updaterwindow.cpp:194 src/input/pages/gui.cpp:103 +msgid "Cancel" +msgstr "" + +#. TRANSLATORS: popup menu header +#. TRANSLATORS: settings tab name +#: src/gui/popups/popupmenu.cpp:576 src/gui/widgets/tabs/setup_players.cpp:83 +msgid "Players" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: kick player from party +#: src/gui/popups/popupmenu.cpp:648 src/gui/popups/popupmenu.cpp:2657 +#: src/gui/popups/popupmenu.cpp:2682 +msgid "Kick from party" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: pickup item from ground +#: src/gui/popups/popupmenu.cpp:743 src/gui/popups/popupmenu.cpp:752 +msgid "Pick up" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add item name to chat +#. TRANSLATORS: popup menu item +#. TRANSLATORS: copy selected outfit to chat input +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add item name to chat +#: src/gui/popups/popupmenu.cpp:757 src/gui/popups/popupmenu.cpp:865 +#: src/gui/popups/popupmenu.cpp:1738 src/gui/popups/popupmenu.cpp:1828 +#: src/gui/popups/popupmenu.cpp:1878 src/gui/popups/popupmenu.cpp:2162 +msgid "Add to chat" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:781 src/gui/popups/popupmenu.cpp:818 +msgid "Map Item" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: remove map item +#. TRANSLATORS: popup menu item +#. TRANSLATORS: remove attack target +#. TRANSLATORS: popup menu item +#. TRANSLATORS: remove item from pickup filter +#: src/gui/popups/popupmenu.cpp:787 src/gui/popups/popupmenu.cpp:2092 +#: src/gui/popups/popupmenu.cpp:2129 +msgid "Remove" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: warp to map item +#. TRANSLATORS: warp select button +#: src/gui/popups/popupmenu.cpp:794 src/gui/popups/popupmenu.cpp:824 +#: src/net/eathena/skillrecv.cpp:436 src/net/eathena/skillrecv.cpp:454 +msgid "Warp" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move camera to map item +#: src/gui/popups/popupmenu.cpp:831 +msgid "Move camera" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: restore camera to default view +#: src/gui/popups/popupmenu.cpp:836 +msgid "Restore camera" +msgstr "" + +#. TRANSLATORS: popup menu header +#. TRANSLATORS: input tab sub tab name +#. TRANSLATORS: long button name for outfits window. +#. TRANSLATORS: outfits button tooltip +#. TRANSLATORS: outfits window name +#: src/gui/popups/popupmenu.cpp:862 src/gui/setupinputpages.cpp:58 +#: src/gui/windowmenu.cpp:203 src/gui/windows/inventorywindow.cpp:265 +#: src/gui/windows/outfitwindow.cpp:61 +msgid "Outfits" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: copy equipment from player to outfit +#: src/gui/popups/popupmenu.cpp:869 +msgid "Copy from player" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: clear selected outfit +#. TRANSLATORS: input action name +#: src/gui/popups/popupmenu.cpp:873 src/input/pages/outfits.cpp:47 +msgid "Clear outfit" +msgstr "" + +#. TRANSLATORS: popup menu header +#. TRANSLATORS: long button name for spells window. +#: src/gui/popups/popupmenu.cpp:900 src/gui/windowmenu.cpp:179 +msgid "Spells" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: edit selected spell +#: src/gui/popups/popupmenu.cpp:903 +msgid "Edit spell" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: remove all text from chat tab +#. TRANSLATORS: clear pin code button +#. TRANSLATORS: npc dialog button +#: src/gui/popups/popupmenu.cpp:939 src/gui/widgets/pincode.cpp:129 +#: src/gui/windows/npcdialog.cpp:131 +msgid "Clear" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: disable chat tab highlight +#: src/gui/popups/popupmenu.cpp:946 +msgid "Disable highlight" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: enable chat tab highlight +#: src/gui/popups/popupmenu.cpp:952 +msgid "Enable highlight" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: do not remove player names from chat tab +#: src/gui/popups/popupmenu.cpp:958 +msgid "Don't remove name" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: remove player names from chat tab +#: src/gui/popups/popupmenu.cpp:964 +msgid "Remove name" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: enable away messages in chat tab +#: src/gui/popups/popupmenu.cpp:970 +msgid "Enable away" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: disable away messages in chat tab +#: src/gui/popups/popupmenu.cpp:976 +msgid "Disable away" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: enable away messages in chat tab +#: src/gui/popups/popupmenu.cpp:983 +msgid "Leave" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: copy selected text to clipboard +#. TRANSLATORS: popup menu item +#. TRANSLATORS: copy link to clipboard +#. TRANSLATORS: popup menu item +#. TRANSLATORS: copy npc text to clipboard +#: src/gui/popups/popupmenu.cpp:988 src/gui/popups/popupmenu.cpp:2208 +#: src/gui/popups/popupmenu.cpp:2254 +msgid "Copy to clipboard" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:1121 +msgid "Change guild position" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:1173 +msgid "window" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: unlock window +#: src/gui/popups/popupmenu.cpp:1203 +msgid "Unlock" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: lock window +#: src/gui/popups/popupmenu.cpp:1209 +msgid "Lock" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:1221 +msgid "Show emotes for:" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show emotes for player +#. TRANSLATORS: settings group +#: src/gui/popups/popupmenu.cpp:1225 src/gui/widgets/tabs/setup_misc.cpp:280 +msgid "Player" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show emotes for pet +#: src/gui/popups/popupmenu.cpp:1229 +msgid "Pet" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show emotes for homuncules +#. TRANSLATORS: palette color +#: src/gui/popups/popupmenu.cpp:1235 src/gui/userpalette.cpp:223 +msgid "Homunculus" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show emotes for mercenary +#. TRANSLATORS: palette color +#: src/gui/popups/popupmenu.cpp:1239 src/gui/userpalette.cpp:217 +msgid "Mercenary" +msgstr "" + +#. TRANSLATORS: dialog caption +#. TRANSLATORS: number of chars in string should be near original +#: src/gui/popups/popupmenu.cpp:1293 +msgid "Rename map sign " +msgstr "" + +#. TRANSLATORS: label +#. TRANSLATORS: number of chars in string should be near original +#: src/gui/popups/popupmenu.cpp:1296 +msgid "Name: " +msgstr "" + +#. TRANSLATORS: dialog caption +#. TRANSLATORS: number of chars in string should be near original +#: src/gui/popups/popupmenu.cpp:1313 +msgid "Player comment " +msgstr "" + +#. TRANSLATORS: label +#. TRANSLATORS: number of chars in string should be near original +#: src/gui/popups/popupmenu.cpp:1316 +msgid "Comment: " +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add item to trade +#: src/gui/popups/popupmenu.cpp:1612 +msgid "Add to trade" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add 10 item amount to trade +#: src/gui/popups/popupmenu.cpp:1620 +msgid "Add to trade 10" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add half item amount to trade +#: src/gui/popups/popupmenu.cpp:1625 +msgid "Add to trade half" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add all amount except one item to trade +#: src/gui/popups/popupmenu.cpp:1629 +msgid "Add to trade all-1" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add all amount item to trade +#: src/gui/popups/popupmenu.cpp:1633 +msgid "Add to trade all" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add item to storage +#. TRANSLATORS: storage button +#. TRANSLATORS: inventory button +#. TRANSLATORS: setup button +#: src/gui/popups/popupmenu.cpp:1641 src/gui/popups/popupmenu.cpp:1824 +#: src/gui/popups/popupmenu.cpp:1873 src/gui/windows/inventorywindow.cpp:297 +#: src/gui/windows/inventorywindow.cpp:331 +#: src/gui/windows/inventorywindow.cpp:985 src/gui/windows/setupwindow.cpp:108 +msgid "Store" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add 10 item amount to storage +#: src/gui/popups/popupmenu.cpp:1649 +msgid "Store 10" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add half item amount to storage +#: src/gui/popups/popupmenu.cpp:1654 +msgid "Store half" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add all except one item to storage +#: src/gui/popups/popupmenu.cpp:1658 +msgid "Store all-1" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add all item amount to storage +#: src/gui/popups/popupmenu.cpp:1662 +msgid "Store all" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: sub menu for craft +#: src/gui/popups/popupmenu.cpp:1675 +msgid "Move to craft..." +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: get item from storage +#. TRANSLATORS: storage button +#: src/gui/popups/popupmenu.cpp:1685 src/gui/windows/inventorywindow.cpp:303 +#: src/gui/windows/inventorywindow.cpp:337 +msgid "Retrieve" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: get 10 item amount from storage +#: src/gui/popups/popupmenu.cpp:1693 +msgid "Retrieve 10" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: get half item amount from storage +#: src/gui/popups/popupmenu.cpp:1698 +msgid "Retrieve half" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: get all except one item amount from storage +#: src/gui/popups/popupmenu.cpp:1702 +msgid "Retrieve all-1" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: get all item amount from storage +#: src/gui/popups/popupmenu.cpp:1706 +msgid "Retrieve all" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: use item +#. TRANSLATORS: popup menu item +#. TRANSLATORS: inventory button +#. TRANSLATORS: default use button name +#. TRANSLATORS: skills dialog button +#. TRANSLATORS: inventory button +#. TRANSLATORS: popup menu item +#. TRANSLATORS: inventory button +#: src/gui/popups/popupmenu.cpp:1776 src/gui/popups/popupmenu.cpp:2808 +#: src/gui/windows/inventorywindow.cpp:210 +#: src/gui/windows/inventorywindow.cpp:882 src/gui/windows/skilldialog.cpp:93 +#: src/gui/windows/skilldialog.cpp:194 src/gui/windows/skilldialog.cpp:521 +#: src/gui/windows/skilldialog.cpp:788 src/gui/windows/skilldialog.cpp:903 +#: src/resources/db/itemdb.cpp:715 src/resources/db/itemdb.cpp:720 +#: src/resources/itemtypemapdata.h:37 src/resources/itemtypemapdata.h:41 +msgid "Use" +msgstr "" + +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:1890 +msgid "Clear drop window" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: popup menu item +#. TRANSLATORS: hide player +#. TRANSLATORS: popup menu item +#. TRANSLATORS: hide npc +#: src/gui/popups/popupmenu.cpp:1922 src/gui/popups/popupmenu.cpp:1987 +#: src/gui/popups/popupmenu.cpp:3063 src/gui/popups/popupmenu.cpp:3098 +#: src/gui/popups/popupmenu.cpp:3250 +msgid "Hide" +msgstr "" + +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:1930 src/gui/popups/popupmenu.cpp:1995 +msgid "Show" +msgstr "" + +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:2003 +msgid "Open yellow bar settings" +msgstr "" + +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:2005 +msgid "Reset yellow bar" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: copy status to chat +#. TRANSLATORS: status window button +#: src/gui/popups/popupmenu.cpp:2009 src/gui/windows/statuswindow.cpp:90 +msgid "Copy to chat" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move attack target up +#: src/gui/popups/popupmenu.cpp:2053 src/gui/popups/popupmenu.cpp:2073 +msgid "Move up" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move attack target down +#: src/gui/popups/popupmenu.cpp:2059 src/gui/popups/popupmenu.cpp:2080 +msgid "Move down" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: undress item from player +#. TRANSLATORS: popup menu item +#. TRANSLATORS: undress player +#: src/gui/popups/popupmenu.cpp:2159 src/gui/popups/popupmenu.cpp:2711 +msgid "Undress" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: copy text to clipboard +#. TRANSLATORS: debug window stats copy button +#: src/gui/popups/popupmenu.cpp:2182 src/gui/widgets/tabs/statdebugtab.cpp:46 +msgid "Copy" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: paste text from clipboard +#: src/gui/popups/popupmenu.cpp:2185 +msgid "Paste" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: open link in browser +#: src/gui/popups/popupmenu.cpp:2205 +msgid "Open link" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:2224 +msgid "Show window" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:2278 +msgid "Skill" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add skill to shortcurs tab +#: src/gui/popups/popupmenu.cpp:2282 +msgid "Add skill shortcut" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: set skill level +#: src/gui/popups/popupmenu.cpp:2287 +msgid "Skill level..." +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: set skill cast type +#: src/gui/popups/popupmenu.cpp:2291 +msgid "Skill cast type..." +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: set skill cast offset by x +#: src/gui/popups/popupmenu.cpp:2295 +msgid "Skill offset by x..." +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: set skill cast offset by y +#: src/gui/popups/popupmenu.cpp:2299 +msgid "Skill offset by y..." +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:2326 +msgid "Skill cast offset by x" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:2332 +msgid "Skill cast offset by y" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: skill level header +#: src/gui/popups/popupmenu.cpp:2374 +msgid "Select skill level" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: skill level +#: src/gui/popups/popupmenu.cpp:2385 +msgid "Max level" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: skill cast type header +#: src/gui/popups/popupmenu.cpp:2413 +msgid "Select skill cast type" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: skill cast type +#. TRANSLATORS: button in input settings tab +#: src/gui/popups/popupmenu.cpp:2417 src/gui/popups/skillpopup.cpp:171 +#: src/gui/widgets/tabs/setup_input.cpp:71 +msgid "Default" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: skill cast type +#. TRANSLATORS: debug window tab +#: src/gui/popups/popupmenu.cpp:2421 src/gui/popups/skillpopup.cpp:175 +#: src/gui/windows/debugwindow.cpp:70 +msgid "Target" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: skill cast type +#: src/gui/popups/popupmenu.cpp:2425 src/gui/popups/skillpopup.cpp:179 +msgid "Mouse position" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: skill cast type +#. TRANSLATORS: Skill type +#: src/gui/popups/popupmenu.cpp:2429 src/resources/skill/skilltypelist.h:39 +msgid "Self" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player to disregarded list +#: src/gui/popups/popupmenu.cpp:2477 src/gui/popups/popupmenu.cpp:2513 +#: src/gui/popups/popupmenu.cpp:2552 src/gui/popups/popupmenu.cpp:2570 +msgid "Disregard" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player to ignore list +#. TRANSLATORS: confirm dialog button +#: src/gui/popups/popupmenu.cpp:2480 src/gui/popups/popupmenu.cpp:2516 +#: src/gui/popups/popupmenu.cpp:2555 src/gui/windows/confirmdialog.cpp:93 +msgid "Ignore" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player to black list +#: src/gui/popups/popupmenu.cpp:2483 src/gui/popups/popupmenu.cpp:2558 +msgid "Black list" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player to enemy list +#: src/gui/popups/popupmenu.cpp:2486 src/gui/popups/popupmenu.cpp:2519 +msgid "Set as enemy" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player to erased list +#: src/gui/popups/popupmenu.cpp:2489 src/gui/popups/popupmenu.cpp:2522 +#: src/gui/popups/popupmenu.cpp:2534 src/gui/popups/popupmenu.cpp:2543 +#: src/gui/popups/popupmenu.cpp:2561 +msgid "Erase" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add player to friends list +#: src/gui/popups/popupmenu.cpp:2499 +msgid "Be friend" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: remove player from ignore list +#: src/gui/popups/popupmenu.cpp:2510 src/gui/popups/popupmenu.cpp:2528 +#: src/gui/popups/popupmenu.cpp:2540 src/gui/popups/popupmenu.cpp:2549 +#: src/gui/popups/popupmenu.cpp:2567 +msgid "Unignore" +msgstr "" + +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:2586 +msgid "Follow" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: imitate player +#: src/gui/popups/popupmenu.cpp:2590 +msgid "Imitate" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: buy item +#: src/gui/popups/popupmenu.cpp:2610 src/gui/popups/popupmenu.cpp:2634 +msgid "Buy (?)" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: sell item +#: src/gui/popups/popupmenu.cpp:2622 src/gui/popups/popupmenu.cpp:2637 +msgid "Sell (?)" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: invite player to party +#: src/gui/popups/popupmenu.cpp:2651 src/gui/popups/popupmenu.cpp:2676 +msgid "Invite to party" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: invite player to party +#: src/gui/popups/popupmenu.cpp:2700 +#, c-format +msgid "Join chat %s" +msgstr "" + +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:2708 +msgid "Show Items" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: remove item from pickup list +#: src/gui/popups/popupmenu.cpp:2725 +msgid "Remove from pickup list" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: popup menu item +#: src/gui/popups/popupmenu.cpp:2732 +msgid "Add to pickup list" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: remove protection from item +#: src/gui/popups/popupmenu.cpp:2784 +msgid "Unprotect item" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: add protection to item +#: src/gui/popups/popupmenu.cpp:2793 +msgid "Protect item" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: drop item +#. TRANSLATORS: inventory button +#: src/gui/popups/popupmenu.cpp:2874 src/gui/windows/inventorywindow.cpp:230 +#: src/gui/windows/inventorywindow.cpp:993 +msgid "Drop..." +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: drop all item amount +#: src/gui/popups/popupmenu.cpp:2877 +msgid "Drop all" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: drop item +#. TRANSLATORS: long button name for drops window. +#. TRANSLATORS: inventory button +#: src/gui/popups/popupmenu.cpp:2883 src/gui/windowmenu.cpp:185 +#: src/gui/windows/inventorywindow.cpp:998 +msgid "Drop" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm commands +#: src/gui/popups/popupmenu.cpp:2894 +msgid "GM..." +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:2902 +#, c-format +msgid "Show %s" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show player account info +#: src/gui/popups/popupmenu.cpp:2909 +msgid "Account info" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show player level +#: src/gui/popups/popupmenu.cpp:2915 +msgid "Level" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show player stats +#. TRANSLATORS: clan window tab +#: src/gui/popups/popupmenu.cpp:2921 src/gui/windows/clanwindow.cpp:65 +msgid "Stats" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show player inventory list +#. TRANSLATORS: long button name for inventory window. +#. TRANSLATORS: inventory window name +#. TRANSLATORS: inventory type name +#: src/gui/popups/popupmenu.cpp:2927 src/gui/windowmenu.cpp:138 +#: src/gui/windows/inventorywindow.cpp:154 +#: src/resources/inventory/inventory.cpp:360 +msgid "Inventory" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show player storage list +#. TRANSLATORS: inventory type name +#: src/gui/popups/popupmenu.cpp:2933 src/resources/inventory/inventory.cpp:365 +msgid "Storage" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show player cart list +#. TRANSLATORS: long button name for cart window. +#. TRANSLATORS: cart button tooltip +#. TRANSLATORS: inventory type name +#: src/gui/popups/popupmenu.cpp:2939 src/gui/windowmenu.cpp:144 +#: src/gui/windows/inventorywindow.cpp:267 +#: src/resources/inventory/inventory.cpp:375 +msgid "Cart" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm commands +#. TRANSLATORS: settings option +#: src/gui/popups/popupmenu.cpp:2945 src/gui/widgets/tabs/setup_chat.cpp:93 +msgid "Commands" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm char commands +#: src/gui/popups/popupmenu.cpp:2951 +msgid "Char commands" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: back to gm menu +#: src/gui/popups/popupmenu.cpp:2955 src/gui/popups/popupmenu.cpp:3226 +msgid "Back" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: find player position +#: src/gui/popups/popupmenu.cpp:2971 +msgid "Locate" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: check player ip +#: src/gui/popups/popupmenu.cpp:2977 +msgid "Check ip" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: go to player position +#. TRANSLATORS: popup menu item +#. TRANSLATORS: warp to npc +#: src/gui/popups/popupmenu.cpp:2983 src/gui/popups/popupmenu.cpp:3271 +msgid "Goto" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: recall player to current position +#. TRANSLATORS: popup menu item +#. TRANSLATORS: warp npc to player location +#: src/gui/popups/popupmenu.cpp:2989 src/gui/popups/popupmenu.cpp:3258 +msgid "Recall" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: recall all party members to player location +#: src/gui/popups/popupmenu.cpp:3009 +msgid "Recall party" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: recall all guild members to player location +#: src/gui/popups/popupmenu.cpp:3017 +msgid "Recall guild" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: give party leader status +#: src/gui/popups/popupmenu.cpp:3030 +msgid "Give party leader" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show menu +#: src/gui/popups/popupmenu.cpp:3051 +msgid "Show..." +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: mute menu +#: src/gui/popups/popupmenu.cpp:3054 +msgid "Mute..." +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: enable immortal mode for player +#: src/gui/popups/popupmenu.cpp:3079 +msgid "Immortal" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: send player to jail +#: src/gui/popups/popupmenu.cpp:3085 +msgid "Jail" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: restore player from jail +#: src/gui/popups/popupmenu.cpp:3091 +msgid "Unjail" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: set player as killer +#: src/gui/popups/popupmenu.cpp:3105 +msgid "Killer" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: set player as killable +#: src/gui/popups/popupmenu.cpp:3111 +msgid "Killable" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: set player save position +#: src/gui/popups/popupmenu.cpp:3117 +msgid "Set save" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: warp player to save position +#: src/gui/popups/popupmenu.cpp:3123 +msgid "Warp to save" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: warp player to random position on same map +#: src/gui/popups/popupmenu.cpp:3129 +msgid "Warp to random" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: spawn player clone +#: src/gui/popups/popupmenu.cpp:3136 +msgid "Spawn clone" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: spawn slave player clone +#: src/gui/popups/popupmenu.cpp:3143 +msgid "Spawn slave clone" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: spawn evil player clone +#: src/gui/popups/popupmenu.cpp:3150 +msgid "Spawn evil clone" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: break guild +#: src/gui/popups/popupmenu.cpp:3157 +msgid "Break guild" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: kick player +#. TRANSLATORS: popup menu item +#. TRANSLATORS: kick monster +#: src/gui/popups/popupmenu.cpp:3166 src/gui/popups/popupmenu.cpp:3241 +#: src/gui/popups/popupmenu.cpp:3286 +msgid "Kick" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:3174 +#, c-format +msgid "Mute %s" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: mute player +#: src/gui/popups/popupmenu.cpp:3184 src/gui/popups/popupmenu.cpp:3188 +#: src/gui/popups/popupmenu.cpp:3192 src/gui/popups/popupmenu.cpp:3196 +#: src/gui/popups/popupmenu.cpp:3200 +#, c-format +msgid "Mute %d" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: mute player +#: src/gui/popups/popupmenu.cpp:3205 src/gui/popups/popupmenu.cpp:3209 +#: src/gui/popups/popupmenu.cpp:3213 src/gui/popups/popupmenu.cpp:3217 +#: src/gui/popups/popupmenu.cpp:3221 +#, c-format +msgid "Unmute %d" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: disguise to npc +#. TRANSLATORS: popup menu item +#. TRANSLATORS: disguise to monster +#: src/gui/popups/popupmenu.cpp:3265 src/gui/popups/popupmenu.cpp:3308 +msgid "Disguise" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: spawn monster +#: src/gui/popups/popupmenu.cpp:3292 +msgid "Spawn same" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: spawn slave monster +#: src/gui/popups/popupmenu.cpp:3301 +msgid "Spawn slave" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show monster information +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show item information +#. TRANSLATORS: char select dialog. button. +#. TRANSLATORS: clan window tab +#. TRANSLATORS: servers dialog button +#. TRANSLATORS: info message header +#. TRANSLATORS: info header +#. TRANSLATORS: info message +#: src/gui/popups/popupmenu.cpp:3316 src/gui/popups/popupmenu.cpp:3345 +#: src/gui/popups/popupmenu.cpp:3364 src/gui/windows/charselectdialog.cpp:81 +#: src/gui/windows/clanwindow.cpp:63 src/gui/windows/serverdialog.cpp:122 +#: src/net/ea/charserverrecv.cpp:130 src/net/eathena/charserverrecv.cpp:435 +#: src/net/eathena/charserverrecv.cpp:471 +msgid "Info" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show selected monster in current map +#: src/gui/popups/popupmenu.cpp:3323 +msgid "Search" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show selected monster spawns in all maps +#: src/gui/popups/popupmenu.cpp:3330 +msgid "Search spawns" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: show who drops item +#: src/gui/popups/popupmenu.cpp:3351 src/gui/popups/popupmenu.cpp:3370 +msgid "Who drops" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm create item +#: src/gui/popups/popupmenu.cpp:3377 +msgid "Add 1" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm create item +#: src/gui/popups/popupmenu.cpp:3380 +msgid "Add 5" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm create item +#: src/gui/popups/popupmenu.cpp:3383 +msgid "Add 10" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm create item +#: src/gui/popups/popupmenu.cpp:3386 +msgid "Add 100" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm create item +#: src/gui/popups/popupmenu.cpp:3389 +msgid "Add 1000" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: gm create item +#: src/gui/popups/popupmenu.cpp:3392 +msgid "Add 10000" +msgstr "" + +#. TRANSLATORS: popup menu header +#: src/gui/popups/popupmenu.cpp:3400 +msgid "GM commands" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: move current item to craft slot +#: src/gui/popups/popupmenu.cpp:3470 +#, c-format +msgid "Move to craft %d" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: open mail dialog +#: src/gui/popups/popupmenu.cpp:3487 +msgid "Mail to..." +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: catch pet command +#: src/gui/popups/popupmenu.cpp:3496 +msgid "Taming pet" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: adopt child command +#: src/gui/popups/popupmenu.cpp:3505 +msgid "Adopt child" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: leave party +#: src/gui/popups/popupmenu.cpp:3518 +msgid "Leave party" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: create party +#. TRANSLATORS: dialog header +#: src/gui/popups/popupmenu.cpp:3524 src/progs/manaplus/actions/chat.cpp:362 +msgid "Create party" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: leave guild +#: src/gui/popups/popupmenu.cpp:3534 +msgid "Leave guild" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: create guild +#. TRANSLATORS: dialog header +#: src/gui/popups/popupmenu.cpp:3540 src/progs/manaplus/actions/chat.cpp:384 +msgid "Create guild" +msgstr "" + +#. TRANSLATORS: popup menu item +#. TRANSLATORS: change guild notice message +#: src/gui/popups/popupmenu.cpp:3562 +msgid "Change notice" +msgstr "" + +#. TRANSLATORS: skill level +#: src/gui/popups/skillpopup.cpp:145 +#, c-format +msgid "Level: %d / %d" +msgstr "" + +#. TRANSLATORS: skill level for tmw fake skills +#: src/gui/popups/skillpopup.cpp:161 +msgid "Level: Unknown" +msgstr "" + +#. TRANSLATORS: skill cast type +#: src/gui/popups/skillpopup.cpp:183 +msgid "Self position" +msgstr "" + +#. TRANSLATORS: skill cast type +#: src/gui/popups/skillpopup.cpp:195 +#, c-format +msgid "Cast type: %s" +msgstr "" + +#. TRANSLATORS: input tab sub tab name +#. TRANSLATORS: status window tab name +#: src/gui/setupinputpages.cpp:46 src/gui/windows/statuswindow.cpp:241 +msgid "Basic" +msgstr "" + +#. TRANSLATORS: input tab sub tab name +#. TRANSLATORS: long button name for shortcuts window. +#: src/gui/setupinputpages.cpp:50 src/gui/windowmenu.cpp:173 +msgid "Shortcuts" +msgstr "" + +#. TRANSLATORS: input tab sub tab name +#. TRANSLATORS: settings group +#. TRANSLATORS: long button name for windows list menu. +#. TRANSLATORS: input action label +#: src/gui/setupinputpages.cpp:52 src/gui/widgets/tabs/setup_misc.cpp:420 +#: src/gui/windowmenu.cpp:250 src/input/pages/windows.cpp:34 +msgid "Windows" +msgstr "" + +#. TRANSLATORS: input tab sub tab name +#. TRANSLATORS: inventory type name +#: src/gui/setupinputpages.cpp:54 src/resources/inventory/inventory.cpp:386 +msgid "Craft" +msgstr "" + +#. TRANSLATORS: input tab sub tab name +#. TRANSLATORS: emotes window name +#. TRANSLATORS: emotes tab name +#: src/gui/setupinputpages.cpp:56 src/gui/windows/emotewindow.cpp:61 +#: src/gui/windows/emotewindow.cpp:130 +msgid "Emotes" +msgstr "" + +#. TRANSLATORS: input tab sub tab name +#. TRANSLATORS: settings tab name +#. TRANSLATORS: longt button name for chat window. +#. TRANSLATORS: chat window name +#: src/gui/setupinputpages.cpp:60 src/gui/widgets/tabs/setup_chat.cpp:40 +#: src/gui/windowmenu.cpp:115 src/gui/windows/chatwindow.cpp:95 +msgid "Chat" +msgstr "" + +#. TRANSLATORS: input tab sub tab name +#. TRANSLATORS: palette label +#. TRANSLATORS: settings group +#. TRANSLATORS: input action group +#. TRANSLATORS: input action name +#: src/gui/setupinputpages.cpp:62 src/gui/userpalette.cpp:474 +#: src/gui/widgets/tabs/setup_audio.cpp:188 +#: src/gui/widgets/tabs/setup_chat.cpp:325 +#: src/gui/widgets/tabs/setup_misc.cpp:505 +#: src/gui/widgets/tabs/setup_visual.cpp:223 src/input/pages/chat.cpp:145 +#: src/input/pages/gui.cpp:85 src/input/pages/other.cpp:106 +msgid "Other" +msgstr "" + +#. TRANSLATORS: input tab sub tab name +#: src/gui/setupinputpages.cpp:64 +msgid "Gui" +msgstr "" + +#. TRANSLATORS: palette label +#: src/gui/userpalette.cpp:140 +msgid "Beings" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:145 +msgid "Being" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:151 +msgid "Friend names" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:157 +msgid "Disregarded names" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:163 +msgid "Ignored names" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:169 +msgid "Erased names" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:181 +msgid "Other players names" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:187 +msgid "Own name" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:193 +msgid "GM names" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:199 +msgid "NPCs" +msgstr "" + +#. TRANSLATORS: palette color +#. TRANSLATORS: settings option +#: src/gui/userpalette.cpp:205 src/gui/widgets/tabs/setup_misc.cpp:133 +msgid "Monsters" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:211 +msgid "Pets" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:229 +msgid "Skill unit" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:235 +msgid "Party members" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:241 +msgid "Guild members" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:247 src/gui/userpalette.cpp:253 +#: src/gui/userpalette.cpp:259 +#, c-format +msgid "Team %d" +msgstr "" + +#. TRANSLATORS: palette label +#: src/gui/userpalette.cpp:263 +msgid "Particles" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:268 +msgid "Particle effects" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:274 +msgid "Pickup notification" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:280 +msgid "Exp notification" +msgstr "" + +#. TRANSLATORS: palette label +#: src/gui/userpalette.cpp:284 +msgid "Hp bars" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:289 +msgid "Player HP bar" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:294 +msgid "Player HP bar (second color)" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:300 +msgid "Monster HP bar" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:306 +msgid "Monster HP bar (second color)" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:312 +msgid "Homunculus HP bar" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:318 +msgid "Homunculus HP bar (second color)" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:324 +msgid "Mercenary HP bar" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:330 +msgid "Mercenary HP bar (second color)" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:337 +msgid "Elemental HP bar" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:343 +msgid "Elemental HP bar (second color)" +msgstr "" + +#. TRANSLATORS: palette label +#: src/gui/userpalette.cpp:347 +msgid "Hits" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:352 +msgid "Player hits monster" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:358 +msgid "Monster hits player" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:364 +msgid "Other player hits local player" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:370 +msgid "Critical Hit" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:376 +msgid "Local player hits monster" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:382 +msgid "Local player critical hit" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:388 +msgid "Local player miss" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:393 +msgid "Misses" +msgstr "" + +#. TRANSLATORS: palette label +#: src/gui/userpalette.cpp:397 +msgid "Tiles" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:402 +msgid "Portal highlight" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:408 +msgid "Default collision highlight" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:414 +msgid "Air collision highlight" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:420 +msgid "Water collision highlight" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:426 +msgid "Monster collision highlight" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:432 +msgid "Special ground collision highlight" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:438 +msgid "Walkable highlight" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:444 +msgid "Tiles border" +msgstr "" + +#. TRANSLATORS: palette label +#: src/gui/userpalette.cpp:447 +msgid "Ranges" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:452 +msgid "Local player attack range" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:458 +msgid "Local player attack range border" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:464 +msgid "Monster attack range" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:470 +msgid "Skill attack range border" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:479 +msgid "Floor item amount color" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:485 +msgid "Home place" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:491 +msgid "Home place border" +msgstr "" + +#. TRANSLATORS: palette color +#: src/gui/userpalette.cpp:497 +msgid "Road point" +msgstr "" + +#. TRANSLATORS: status window label +#. TRANSLATORS: status bar label +#. TRANSLATORS: sell dialog button +#. TRANSLATORS: buy dialog button +#. TRANSLATORS: status bar label +#: src/gui/widgets/attrs/changedisplay.cpp:48 +#: src/gui/widgets/attrs/changedisplay.cpp:70 +#: src/gui/widgets/selldialog.cpp:155 src/gui/windows/buydialog.cpp:360 +#: src/gui/windows/statuswindow.cpp:459 src/gui/windows/statuswindow.cpp:522 +msgid "Max" +msgstr "" + +#. TRANSLATORS: status window label (plus sign) +#. TRANSLATORS: sell dialog button +#. TRANSLATORS: This is a narrow symbol used to denote 'increasing'. +#. You may change this symbol if your language uses another. +#. TRANSLATORS: item amount window button +#. TRANSLATORS: npc dialog button +#: src/gui/widgets/attrs/changedisplay.cpp:50 +#: src/gui/widgets/selldialog.cpp:143 src/gui/windows/buydialog.cpp:333 +#: src/gui/windows/itemamountwindow.cpp:209 +#: src/gui/windows/itemamountwindow.cpp:263 src/gui/windows/npcdialog.cpp:127 +msgid "+" +msgstr "" + +#. TRANSLATORS: character level +#: src/gui/widgets/characterdisplay.cpp:142 +#, c-format +msgid "Level: %u" +msgstr "" + +#. TRANSLATORS: character money +#. TRANSLATORS: money label +#. TRANSLATORS: status window label +#: src/gui/widgets/characterdisplay.cpp:146 +#: src/gui/windows/inventorywindow.cpp:794 src/gui/windows/statuswindow.cpp:76 +#: src/gui/windows/statuswindow.cpp:223 src/gui/windows/statuswindow.cpp:315 +#, c-format +msgid "Money: %s" +msgstr "" + +#. TRANSLATORS: Text under equipped items (should be small) +#: src/gui/widgets/itemcontainer.cpp:431 src/gui/widgets/itemcontainer.cpp:553 +msgid "Eq." +msgstr "" + +#. TRANSLATORS: dialog message +#: src/gui/widgets/itemlinkhandler.cpp:89 +msgid "Run command" +msgstr "" + +#. TRANSLATORS: dialog message +#: src/gui/widgets/itemlinkhandler.cpp:121 +msgid "Open url" +msgstr "" + +#. TRANSLATORS: sell dialog button +#. TRANSLATORS: mail edit window button +#. TRANSLATORS: npc dialog button +#. TRANSLATORS: servers dialog button +#. TRANSLATORS: shop window label +#. TRANSLATORS: trade window button +#: src/gui/widgets/selldialog.cpp:115 src/gui/windows/buydialog.cpp:339 +#: src/gui/windows/maileditwindow.cpp:61 src/gui/windows/npcdialog.cpp:136 +#: src/gui/windows/serverdialog.cpp:113 src/gui/windows/shopwindow.cpp:127 +#: src/gui/windows/tradewindow.cpp:89 +msgid "Add" +msgstr "" + +#. TRANSLATORS: sell dialog button +#. TRANSLATORS: buy dialog button +#. TRANSLATORS: quit dialog name +#. TRANSLATORS: quit dialog button +#. TRANSLATORS: servers dialog button +#. TRANSLATORS: sell dialog button +#. TRANSLATORS: input action name +#: src/gui/widgets/selldialog.cpp:121 src/gui/windows/buydialog.cpp:358 +#: src/gui/windows/quitdialog.cpp:51 src/gui/windows/quitdialog.cpp:56 +#: src/gui/windows/quitdialog.cpp:58 src/gui/windows/serverdialog.cpp:108 +#: src/gui/windows/textselectdialog.cpp:96 src/input/pages/basic.cpp:226 +msgid "Quit" +msgstr "" + +#. TRANSLATORS: sell dialog button +#. TRANSLATORS: This is a narrow symbol used to denote 'decreasing'. +#. You may change this symbol if your language uses another. +#. TRANSLATORS: item amount window button +#. TRANSLATORS: npc dialog button +#: src/gui/widgets/selldialog.cpp:149 src/gui/windows/buydialog.cpp:336 +#: src/gui/windows/itemamountwindow.cpp:203 +#: src/gui/windows/itemamountwindow.cpp:257 src/gui/windows/npcdialog.cpp:129 +msgid "-" +msgstr "" + +#. TRANSLATORS: sell dialog label +#. TRANSLATORS: buy dialog label +#: src/gui/widgets/selldialog.cpp:165 src/gui/widgets/selldialog.cpp:391 +#: src/gui/windows/buydialog.cpp:319 src/gui/windows/buydialog.cpp:768 +#, c-format +msgid "Price: %s / Total: %s" +msgstr "" + +#. TRANSLATORS: setup item button +#. TRANSLATORS: servers dialog button +#: src/gui/widgets/setupitem.cpp:378 src/gui/widgets/setupitem.cpp:523 +#: src/gui/windows/serverdialog.cpp:115 +msgid "Edit" +msgstr "" + +#. TRANSLATORS: status window label +#: src/gui/widgets/statspagebasic.cpp:71 src/gui/widgets/statspagebasic.cpp:102 +#, c-format +msgid "Character points: %d" +msgstr "" + +#. TRANSLATORS: battle chat tab name +#: src/gui/widgets/tabs/chat/battletab.cpp:35 +msgid "Battle" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/widgets/tabs/chat/chattab.cpp:175 +msgid "Global announcement:" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/widgets/tabs/chat/chattab.cpp:181 +#, c-format +msgid "Global announcement from %s:" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/widgets/tabs/chat/chattab.cpp:207 +#, c-format +msgid "%s whispers: %s" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/widgets/tabs/chat/chattab.cpp:555 +#, c-format +msgid "%s is now Online." +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/widgets/tabs/chat/chattab.cpp:563 +#, c-format +msgid "%s is now Offline." +msgstr "" + +#. TRANSLATORS: clan chat tab name +#. TRANSLATORS: long button name for clan window. +#. TRANSLATORS: clan window name +#: src/gui/widgets/tabs/chat/clantab.cpp:39 src/gui/windowmenu.cpp:227 +#: src/gui/windows/clanwindow.cpp:41 +msgid "Clan" +msgstr "" + +#. TRANSLATORS: guild chat tab name +#. TRANSLATORS: tab in social window +#: src/gui/widgets/tabs/chat/emulateguildtab.cpp:42 +#: src/gui/widgets/tabs/chat/guildtab.cpp:47 +#: src/gui/widgets/tabs/socialguildtab2.h:49 +#: src/gui/widgets/tabs/socialguildtab.h:52 +msgid "Guild" +msgstr "" + +#. TRANSLATORS: gb tab name +#: src/gui/widgets/tabs/chat/gmtab.cpp:37 +msgid "GM" +msgstr "" + +#. TRANSLATORS: lang chat tab name +#: src/gui/widgets/tabs/chat/langtab.cpp:32 +msgid "Lang" +msgstr "" + +#. TRANSLATORS: party chat tab name +#. TRANSLATORS: tab in social window +#: src/gui/widgets/tabs/chat/partytab.cpp:48 +#: src/gui/widgets/tabs/socialpartytab.h:54 +msgid "Party" +msgstr "" + +#. TRANSLATORS: not in clan label +#: src/gui/widgets/tabs/clanwindowtabs.cpp:57 +msgid "Not in clan" +msgstr "" + +#. TRANSLATORS: clan name label +#: src/gui/widgets/tabs/clanwindowtabs.cpp:66 +msgid "Clan name" +msgstr "" + +#. TRANSLATORS: clan master name label +#: src/gui/widgets/tabs/clanwindowtabs.cpp:70 +msgid "Master name" +msgstr "" + +#. TRANSLATORS: clan map name label +#: src/gui/widgets/tabs/clanwindowtabs.cpp:74 +msgid "Map name" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:52 +#: src/gui/widgets/tabs/mapdebugtab.cpp:202 +#: src/gui/widgets/tabs/mapdebugtab.cpp:259 +msgid "Music:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:54 +#: src/gui/widgets/tabs/mapdebugtab.cpp:208 +#: src/gui/widgets/tabs/mapdebugtab.cpp:263 +msgid "Map:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:56 +#: src/gui/widgets/tabs/mapdebugtab.cpp:211 +#: src/gui/widgets/tabs/mapdebugtab.cpp:265 +msgid "Map name:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:58 +#: src/gui/widgets/tabs/mapdebugtab.cpp:205 +#: src/gui/widgets/tabs/mapdebugtab.cpp:261 +msgid "Minimap:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:61 +#: src/gui/widgets/tabs/mapdebugtab.cpp:199 +#: src/gui/widgets/tabs/mapdebugtab.cpp:257 +msgid "Cursor:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:64 +msgid "Particle count:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:67 +#: src/gui/widgets/tabs/mapdebugtab.cpp:223 +#: src/gui/widgets/tabs/mapdebugtab.cpp:268 +msgid "Map actors count:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:71 +#: src/gui/widgets/tabs/mapdebugtab.cpp:228 +#: src/gui/widgets/tabs/mapdebugtab.cpp:272 +msgid "Map atlas count:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:74 +#: src/gui/widgets/tabs/mapdebugtab.cpp:178 +#: src/gui/widgets/tabs/mapdebugtab.cpp:184 +msgid "Player Position:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:80 +#: src/gui/widgets/tabs/mapdebugtab.cpp:240 +msgid "Draw calls:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:85 +#: src/gui/widgets/tabs/mapdebugtab.cpp:248 +msgid "Texture binds:" +msgstr "" + +#. TRANSLATORS: debug window label, frames per second +#: src/gui/widgets/tabs/mapdebugtab.cpp:88 +#, c-format +msgid "%d FPS" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:99 +#: src/gui/widgets/tabs/mapdebugtab.cpp:132 +#, c-format +msgid "%d FPS (Software)" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:106 +#, c-format +msgid "%d FPS (normal OpenGL)" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:110 +#, c-format +msgid "%d FPS (safe OpenGL)" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:114 +#, c-format +msgid "%d FPS (mobile OpenGL ES)" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:118 +#, c-format +msgid "%d FPS (mobile OpenGL ES 2)" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:122 +#, c-format +msgid "%d FPS (modern OpenGL)" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:126 +#, c-format +msgid "%d FPS (SDL2 default)" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:154 +#: src/gui/widgets/tabs/mapdebugtab.cpp:233 +msgid "Textures count:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/mapdebugtab.cpp:218 +#, c-format +msgid "Particle count: %d" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/netdebugtab.cpp:60 +#: src/gui/widgets/tabs/netdebugtab.cpp:66 +#, c-format +msgid "Ping: %s ms" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/netdebugtab.cpp:69 +#, c-format +msgid "In: %d bytes/s" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/netdebugtab.cpp:72 +#, c-format +msgid "Out: %d bytes/s" +msgstr "" + +#. TRANSLATORS: audio tab in settings +#: src/gui/widgets/tabs/setup_audio.cpp:48 +msgid "Audio" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:56 +msgid "Basic settings" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:60 +msgid "Enable Audio" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:64 +msgid "Enable music" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:69 +msgid "Enable game sfx" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:74 +msgid "Enable gui sfx" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:79 +msgid "Sfx volume" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:86 +msgid "Music volume" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:93 +msgid "Enable music fade out" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:98 +msgid "Audio frequency" +msgstr "" + +#. TRANSLATORS: audio type +#: src/gui/widgets/tabs/setup_audio.cpp:103 +msgid "mono" +msgstr "" + +#. TRANSLATORS: audio type +#: src/gui/widgets/tabs/setup_audio.cpp:105 +msgid "stereo" +msgstr "" + +#. TRANSLATORS: audio type +#: src/gui/widgets/tabs/setup_audio.cpp:107 +msgid "surround" +msgstr "" + +#. TRANSLATORS: audio type +#: src/gui/widgets/tabs/setup_audio.cpp:109 +msgid "surround+center+lfe" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:111 +msgid "Audio channels" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:118 +msgid "Parallel number of sounds" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_audio.cpp:124 +msgid "Sound effects" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:128 +msgid "Information dialog sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:133 +msgid "Request dialog sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:138 +msgid "Whisper message sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:143 +msgid "Guild message sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:148 +msgid "Party message sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:153 +msgid "Clan message sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:158 +msgid "Highlight message sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:163 +msgid "Global message sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:168 +msgid "Error message sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:173 +msgid "Trade request sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:178 +msgid "Show window sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:183 +msgid "Hide window sound" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:193 +msgid "Enable mumble voice chat" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_audio.cpp:199 +msgid "Download music" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_chat.cpp:48 +msgid "Window" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:52 +msgid "Auto hide chat window" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:54 +msgid "" +"Chat window will be automatically hidden when not in use.\n" +"\n" +"Hit Enter or hover mouse to show chat again." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:60 +msgid "Protect chat focus" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:62 +msgid "" +"Enables aggressive protection of input focus in chat window.\n" +"\n" +"Note: no other text inputs will be allowed to receive text input when you " +"typing in chat window." +msgstr "" + +#. TRANSLATORS: settings group +#. TRANSLATORS: settings colors tab name +#. TRANSLATORS: emotes tab name +#: src/gui/widgets/tabs/setup_chat.cpp:70 +#: src/gui/widgets/tabs/setup_colors.cpp:90 src/gui/windows/emotewindow.cpp:132 +msgid "Colors" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:74 +msgid "Remove colors from received chat messages" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:76 +msgid "" +"Enable this setting to strip colors from incoming chat messages. All " +"messages will use default chat text color if this enabled." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:82 +msgid "Show chat colors list" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:84 +msgid "" +"Enable this setting to show color selection drop-down in chat window. Chat " +"window will display color selection drop-down.\n" +"\n" +"It allows one to select default color of outgoing chat messages easily, but " +"also occupies some space in chat window." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:97 +msgid "Allow magic and GM commands in all chat tabs" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:99 +msgid "" +"Enable this setting to be able to type spells and GM commands in any tab." +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_chat.cpp:106 +msgid "Limits" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:110 +msgid "Limit max chars in chat line" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:112 +msgid "" +"Limits how many characters will be shown in longest lines of text displayed " +"in chat.\n" +"\n" +"Note: long lines can make client slower. Lines longer than this limit will " +"be truncated." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:120 +msgid "Limit max lines in chat" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:122 +msgid "" +"Limits how many lines chat will keep in scrollback buffer. Chat keeps " +"specified number of last lines of text. Oldest lines exceeding this limit " +"are discarded from scrollback buffer.\n" +"\n" +"Note: keeping too many lines in scroll buffer can slow client down." +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_chat.cpp:131 +msgid "Logs" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:135 +msgid "Enable chat Log" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:137 +msgid "" +"If you enable this setting, chat logs will be written to disk.\n" +"\n" +"Note: chat logs can take noticeable amount of disk space over time." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:143 +msgid "Enable debug chat Log" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:145 +msgid "If you enable this, debug chat tab also will be logged to disk." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:150 +msgid "Show chat history" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:152 +msgid "" +"If this setting enabled, client will load old chat tabs content from logs on " +"startup instead of starting with empty chat tabs." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:158 +msgid "Show party online messages" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:160 +msgid "" +"If this setting is enabled, online status changes of party members will be " +"shown in party tab of chat.\n" +"\n" +"This adds some extra noise to chat, but allows one to see when your buddies " +"are coming online." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:167 +msgid "Show guild online messages" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:169 +msgid "" +"If this setting is enabled, online status changes of guild members will be " +"shown in guild tab of chat.\n" +"\n" +"This adds some extra noise to chat, but allows one to see when your buddies " +"are coming online." +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_chat.cpp:177 +msgid "Messages" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:181 +msgid "Hide shop messages" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:183 +msgid "" +"If this setting enabled, no messages related to built-in ManaPlus shop will " +"be displayed in chat. Disable this setting if you want to see shop-related " +"messages.\n" +"\n" +"Note: technically, ManaPlus shop implemented as usual private messages with " +"special content. If you disable this setting, you will be able to see these " +"messages and get idea when other players are looking at your shop." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:193 +msgid "Show MVP messages" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:195 +msgid "" +"Enable this setting to see MVP messages from server.\n" +"\n" +"Note: MVP messages are not used on TMW/Evol/etc servers, so this feature " +"usually makes little difference." +msgstr "" + +#. TRANSLATORS: settings group +#. TRANSLATORS: input action group +#. TRANSLATORS: input action label +#: src/gui/widgets/tabs/setup_chat.cpp:203 src/input/pages/chat.cpp:61 +#: src/input/pages/windows.cpp:214 +msgid "Tabs" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:207 +msgid "Put all whispers in tabs" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:209 +msgid "" +"If this setting enabled, all whispers (private messages) will be placed in " +"separate tabs, separate tab for each player. If this setting disabled, all " +"whispers will appear in General tab.\n" +"\n" +"Note: putting all whispers to single General tab is known to be confusing. " +"Think twice before disabling this feature." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:218 +msgid "Log magic messages in debug tab" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:220 +msgid "" +"If this setting is enabled, spell invocation will be shown in Debug tab. If " +"disabled, it will be shown in General tab instead.\n" +"\n" +"Note: it does not affects server replies related to spells." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:227 +msgid "Show server messages in debug tab" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:229 +msgid "" +"If this setting is enabled, server messages will be shown in Debug tab of " +"chat. If disabled, server messages will appear in General chat instead.\n" +"\n" +"Note: according to 4144, disabling this could also make you to lose some " +"debug messages from client in Debug tab since these are fake server messages." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:238 +msgid "Enable trade tab" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:240 +msgid "" +"Enables trade tab. Trade tab is basically some filter. Messages containing " +"words typical for trades will go to Trade tab. This will make General tab " +"less noisy. If this setting is disabled, all trade related players messages " +"will stay in General tab." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:248 +msgid "Enable gm tab" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:250 +msgid "" +"If enabled, GM tab will appear in chat. It displays text related GM " +"activity.\n" +"\n" +"Note: this setting only makes difference for GMs (Game Masters) since this " +"tab only appears for GMs." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:257 +msgid "Enable language tab" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:259 +msgid "" +"If this feature enabled, language tab will appear if server supports this " +"feature.\n" +"\n" +"Note: only supported by Evol server yet." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:265 +msgid "Show all languages messages" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:267 +msgid "" +"If this setting enabled and server supports different chats for different " +"languages, you will see messages for all languages, regardless of your " +"language preferences.\n" +"\n" +"Note: it only works on servers supporting language tabs feature, like Evol." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:275 +msgid "Enable battle tab" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:277 +msgid "" +"If this setting enabled, Battle tab will appear in chat. This tab will " +"contain messages related to battles, like damage and experience gain, if " +"battle messages are enabled.\n" +"\n" +"Note: client restart required to take effect." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:285 +msgid "Show battle events" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:287 +msgid "" +"If this setting enabled, messages related to battle like damage or " +"experience gain will be displayed in Debug or Battle tab. If disabled, no " +"battle messages will be displayed." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:294 +msgid "Resize chat tabs if need" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:296 +msgid "" +"If this feature enabled, text in chat will be automatically adjusted to " +"adapt to appearance of chat input field when you typing message and when " +"input field of chat disappears. If disabled, chat input area will always " +"occupy its place, which could be otherwise usable for text.\n" +"\n" +"Note: its mostly about jumpy attitude vs less usable space for text." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:307 +msgid "Enable trade spam filter" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_chat.cpp:313 +msgid "Time" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:317 +msgid "Use local time" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:319 +msgid "" +"If this feature enabled, timestamps in chat will use local times. If " +"disabled, server time will be used (often it is GMT+0)." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:329 +msgid "Highlight words (separated by comma)" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:331 +msgid "" +"Here you can specify some extra words which will also cause highlighting. " +"Use comma to separate words.\n" +"\n" +"Note: frequent highlights are annoying - use it with caution." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:338 +msgid "Globals ignore names (separated by comma)" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:340 +msgid "" +"This setting allows you to ignore some global messages if particular sender " +"(NPC, GM) annoys you too much. Global will be moved to Debug instead.\n" +"\n" +"Note: careless use of this feature can make you to miss important announces!" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:348 +msgid "Show emotes button in chat" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:350 +msgid "" +"If this setting enabled, button will appear near text input field. This " +"button allows one to invoke composing window, which allows one to insert " +"smiles and text formatting easily.\n" +"\n" +"Note: same window can also be invoked by hotkey when typing, usually F1 by " +"default." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_chat.cpp:359 +msgid "Show motd server message on start" +msgstr "" + +#. TRANSLATORS: settings description +#: src/gui/widgets/tabs/setup_chat.cpp:361 +msgid "" +"If this setting enabled, client will display server MOTD (message of the " +"day) once you connect to server. Disable it to hide MOTD." +msgstr "" + +#. TRANSLATORS: color selection preview message +#: src/gui/widgets/tabs/setup_colors.cpp:50 +msgid "This is what the color looks like" +msgstr "" + +#. TRANSLATORS: colors tab. label. +#: src/gui/widgets/tabs/setup_colors.cpp:65 +msgid "Type:" +msgstr "" + +#. TRANSLATORS: colors tab. label. +#: src/gui/widgets/tabs/setup_colors.cpp:69 +#: src/gui/widgets/tabs/setup_colors.cpp:376 +msgid "Delay:" +msgstr "" + +#. TRANSLATORS: colors tab. label. +#: src/gui/widgets/tabs/setup_colors.cpp:74 +msgid "Red:" +msgstr "" + +#. TRANSLATORS: colors tab. label. +#: src/gui/widgets/tabs/setup_colors.cpp:79 +msgid "Green:" +msgstr "" + +#. TRANSLATORS: colors tab. label. +#: src/gui/widgets/tabs/setup_colors.cpp:84 +msgid "Blue:" +msgstr "" + +#. TRANSLATORS: color type +#: src/gui/widgets/tabs/setup_colors.cpp:109 +#: src/gui/widgets/tabs/setup_colors.cpp:447 +msgid "Static" +msgstr "" + +#. TRANSLATORS: color type +#: src/gui/widgets/tabs/setup_colors.cpp:113 +#: src/gui/widgets/tabs/setup_colors.cpp:116 +#: src/gui/widgets/tabs/setup_colors.cpp:449 +msgid "Pulse" +msgstr "" + +#. TRANSLATORS: color type +#: src/gui/widgets/tabs/setup_colors.cpp:119 +#: src/gui/widgets/tabs/setup_colors.cpp:122 +#: src/gui/widgets/tabs/setup_colors.cpp:451 +msgid "Rainbow" +msgstr "" + +#. TRANSLATORS: color type +#: src/gui/widgets/tabs/setup_colors.cpp:125 +#: src/gui/widgets/tabs/setup_colors.cpp:128 +#: src/gui/widgets/tabs/setup_colors.cpp:451 +msgid "Spectrum" +msgstr "" + +#. TRANSLATORS: colors tab. label. +#: src/gui/widgets/tabs/setup_colors.cpp:370 +msgid "Alpha:" +msgstr "" + +#. TRANSLATORS: button in input settings tab +#: src/gui/widgets/tabs/setup_input.cpp:65 +msgid "Assign" +msgstr "" + +#. TRANSLATORS: button in input settings tab +#: src/gui/widgets/tabs/setup_input.cpp:68 +msgid "Unassign" +msgstr "" + +#. TRANSLATORS: button in input settings tab +#: src/gui/widgets/tabs/setup_input.cpp:74 +msgid "Reset all keys" +msgstr "" + +#. TRANSLATORS: setting tab name +#: src/gui/widgets/tabs/setup_input.cpp:84 +msgid "Input" +msgstr "" + +#. TRANSLATORS: input settings error header +#: src/gui/widgets/tabs/setup_input.cpp:164 +msgid "Key Conflict(s) Detected." +msgstr "" + +#. TRANSLATORS: input settings error +#: src/gui/widgets/tabs/setup_input.cpp:166 +#, c-format +msgid "" +"Conflict \"%s\" and \"%s\" keys. Resolve them, or gameplay may result in " +"strange behaviour." +msgstr "" + +#. TRANSLATORS: unknown key name +#. TRANSLATORS: quests window quest name +#: src/gui/widgets/tabs/setup_input.cpp:338 src/resources/db/questdb.cpp:62 +#: src/resources/db/questdb.cpp:255 src/resources/db/questdb.cpp:261 +msgid "unknown" +msgstr "" + +#. TRANSLATORS: joystick settings tab label +#: src/gui/widgets/tabs/setup_joystick.cpp:47 +#: src/gui/widgets/tabs/setup_joystick.cpp:143 +msgid "Press the button to start calibration" +msgstr "" + +#. TRANSLATORS: joystick settings tab button +#: src/gui/widgets/tabs/setup_joystick.cpp:49 +#: src/gui/widgets/tabs/setup_joystick.cpp:140 +msgid "Calibrate" +msgstr "" + +#. TRANSLATORS: joystick settings tab button +#: src/gui/widgets/tabs/setup_joystick.cpp:52 +msgid "Detect joysticks" +msgstr "" + +#. TRANSLATORS: joystick settings tab checkbox +#: src/gui/widgets/tabs/setup_joystick.cpp:55 +msgid "Enable joystick" +msgstr "" + +#. TRANSLATORS: joystick settings tab checkbox +#: src/gui/widgets/tabs/setup_joystick.cpp:62 +msgid "Use joystick if client window inactive" +msgstr "" + +#. TRANSLATORS: joystick settings tab name +#: src/gui/widgets/tabs/setup_joystick.cpp:68 +msgid "Joystick" +msgstr "" + +#. TRANSLATORS: joystick settings tab button +#: src/gui/widgets/tabs/setup_joystick.cpp:149 +msgid "Stop" +msgstr "" + +#. TRANSLATORS: joystick settings tab label +#: src/gui/widgets/tabs/setup_joystick.cpp:152 +msgid "Rotate the stick and don't press buttons" +msgstr "" + +#. TRANSLATORS: show buttons at top right corner type +#: src/gui/widgets/tabs/setup_misc.cpp:50 +msgid "Always show" +msgstr "" + +#. TRANSLATORS: show buttons at top right corner type +#: src/gui/widgets/tabs/setup_misc.cpp:52 +msgid "Auto hide in small resolution" +msgstr "" + +#. TRANSLATORS: show buttons at top right corner type +#: src/gui/widgets/tabs/setup_misc.cpp:54 +msgid "Always auto hide" +msgstr "" + +#. TRANSLATORS: Proxy type selection +#: src/gui/widgets/tabs/setup_misc.cpp:62 +msgid "System proxy" +msgstr "" + +#. TRANSLATORS: Proxy type selection +#: src/gui/widgets/tabs/setup_misc.cpp:64 +msgid "Direct connection" +msgstr "" + +#. TRANSLATORS: Proxy type selection +#: src/gui/widgets/tabs/setup_misc.cpp:71 +msgid "SOCKS5 hostname" +msgstr "" + +#. TRANSLATORS: screen density type +#. TRANSLATORS: ambient effect type +#. TRANSLATORS: particle details +#: src/gui/widgets/tabs/setup_misc.cpp:81 +#: src/gui/widgets/tabs/setup_visual.cpp:59 +#: src/gui/widgets/tabs/setup_visual.cpp:184 +msgid "low" +msgstr "" + +#. TRANSLATORS: screen density type +#. TRANSLATORS: particle details +#: src/gui/widgets/tabs/setup_misc.cpp:83 +#: src/gui/widgets/tabs/setup_visual.cpp:186 +msgid "medium" +msgstr "" + +#. TRANSLATORS: screen density type +#: src/gui/widgets/tabs/setup_misc.cpp:85 +msgid "tv" +msgstr "" + +#. TRANSLATORS: screen density type +#. TRANSLATORS: ambient effect type +#. TRANSLATORS: particle details +#: src/gui/widgets/tabs/setup_misc.cpp:87 +#: src/gui/widgets/tabs/setup_visual.cpp:61 +#: src/gui/widgets/tabs/setup_visual.cpp:188 +msgid "high" +msgstr "" + +#. TRANSLATORS: screen density type +#: src/gui/widgets/tabs/setup_misc.cpp:89 +msgid "xhigh" +msgstr "" + +#. TRANSLATORS: screen density type +#: src/gui/widgets/tabs/setup_misc.cpp:91 +msgid "xxhigh" +msgstr "" + +#. TRANSLATORS: sdl2 log level +#: src/gui/widgets/tabs/setup_misc.cpp:102 +msgid "verbose" +msgstr "" + +#. TRANSLATORS: sdl2 log level +#: src/gui/widgets/tabs/setup_misc.cpp:104 +msgid "debug" +msgstr "" + +#. TRANSLATORS: sdl2 log level +#: src/gui/widgets/tabs/setup_misc.cpp:106 +msgid "info" +msgstr "" + +#. TRANSLATORS: sdl2 log level +#: src/gui/widgets/tabs/setup_misc.cpp:108 +msgid "warn" +msgstr "" + +#. TRANSLATORS: sdl2 log level +#: src/gui/widgets/tabs/setup_misc.cpp:110 +msgid "error" +msgstr "" + +#. TRANSLATORS: sdl2 log level +#: src/gui/widgets/tabs/setup_misc.cpp:112 +msgid "critical" +msgstr "" + +#. TRANSLATORS: misc tab in settings +#: src/gui/widgets/tabs/setup_misc.cpp:126 +msgid "Misc" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:137 +msgid "Show damage inflicted to monsters" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:142 +msgid "Auto target only reachable monsters" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:147 +msgid "Select auto target for attack skills" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:152 +msgid "Highlight monster attack range" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:158 +msgid "Show monster hp bar" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:163 +msgid "Cycle monster targets" +msgstr "" + +#. TRANSLATORS: settings group +#. TRANSLATORS: long button name for map window. +#. TRANSLATORS: debug window tab +#. TRANSLATORS: mini map window name +#: src/gui/widgets/tabs/setup_misc.cpp:169 src/gui/windowmenu.cpp:150 +#: src/gui/windows/debugwindow.cpp:68 src/gui/windows/minimap.cpp:66 +#: src/gui/windows/minimap.cpp:129 +msgid "Map" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:173 +msgid "Show warps particles" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:178 +msgid "Highlight map portals" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:183 +msgid "Highlight floor items" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:188 +msgid "Highlight player attack range" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:193 +msgid "Show extended minimaps" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:198 +msgid "Draw path" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:203 +msgid "Draw hotkeys on map" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:208 +msgid "Enable lazy scrolling" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:213 +msgid "Scroll laziness" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:218 +msgid "Scroll radius" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:223 +msgid "Auto resize minimaps" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:228 +msgid "Play map animations" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_misc.cpp:234 +msgid "Moving" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:238 +msgid "Auto fix position" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:243 +msgid "Show server side position" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:248 +msgid "Attack while moving" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:253 +msgid "Attack next target" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:258 +msgid "Sync player move" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:263 +msgid "Sync player move distance" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:269 +msgid "Crazy move A program" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:274 +msgid "Mouse relative moves (good for touch interfaces)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:284 +msgid "Show own hp bar" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:289 +msgid "Enable quick stats" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:294 +msgid "Cycle player targets" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:299 +msgid "Show job exp messages" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:304 +msgid "Show players popups" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:309 +msgid "Afk message" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:314 +msgid "Show job" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:319 +msgid "Enable attack filter" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:324 +msgid "Enable pickup filter" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:329 +msgid "Enable advert protocol" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:334 +msgid "Enabled pets support" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:339 +msgid "Enable weight notifications" +msgstr "" + +#. TRANSLATORS: settings group +#. TRANSLATORS: long button name for shop window. +#. TRANSLATORS: shop window name +#. TRANSLATORS: shop button tooltip +#: src/gui/widgets/tabs/setup_misc.cpp:344 src/gui/windowmenu.cpp:197 +#: src/gui/windows/buyselldialog.cpp:43 src/gui/windows/buyselldialog.cpp:54 +#: src/gui/windows/inventorywindow.cpp:269 +msgid "Shop" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:348 +msgid "Accept sell/buy requests" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:353 +msgid "Enable shop mode" +msgstr "" + +#. TRANSLATORS: settings group +#. TRANSLATORS: npc dialog name +#: src/gui/widgets/tabs/setup_misc.cpp:359 src/gui/windows/npcdialog.cpp:99 +msgid "NPC" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:363 +msgid "Cycle npc targets" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:368 +msgid "Log NPC dialogue" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_misc.cpp:374 +msgid "Bots support" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:378 +msgid "Enable guild bot support and disable native guild support" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:385 +msgid "Enable manamarket bot support" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_misc.cpp:393 +msgid "Keyboard" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:397 +msgid "Repeat delay" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:402 +msgid "Repeat interval" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:407 +msgid "Custom repeat interval" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:413 +msgid "Enable alt-tab workaround" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:425 +msgid "Shortcut buttons" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:430 +msgid "Show icons on shortcut buttons" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_misc.cpp:436 +msgid "Proxy server" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:441 +msgid "Proxy type" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:446 +msgid "Proxy address:port" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:451 +msgid "Tunnel through HTTP proxy" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_misc.cpp:457 +msgid "Logging" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:461 +msgid "Enable OpenGL version check (do not disable)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:467 +msgid "Enable debug log" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:472 +msgid "Ignore logging packets" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:477 +msgid "Log unimplemented packets" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:482 +msgid "Enable OpenGL log" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:487 +msgid "Enable input log" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:494 +msgid "SDL logging level" +msgstr "" + +#. TRANSLATORS: settings option +#. TRANSLATORS: input action name +#: src/gui/widgets/tabs/setup_misc.cpp:500 src/input/pages/other.cpp:408 +msgid "Upload log file" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:509 +msgid "Enable server side attack" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:514 +msgid "Hide support page link on error" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:519 +msgid "Enable double clicks" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:524 +msgid "Enable bot checker" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:529 +msgid "Enable buggy servers protection (do not disable)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:535 +msgid "Low traffic mode" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:541 +msgid "Use FBO for screenshots (only for opengl)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:548 +msgid "Screenshot directory" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:555 +msgid "Network delay between sub servers" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:560 +msgid "Show background" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_misc.cpp:566 +msgid "Screen density override" +msgstr "" + +#. TRANSLATORS: mods tab in settings +#: src/gui/widgets/tabs/setup_mods.cpp:43 +msgid "Mods" +msgstr "" + +#. TRANSLATORS: settings label +#: src/gui/widgets/tabs/setup_mods.cpp:78 +msgid "No mods present" +msgstr "" + +#. TRANSLATORS: texture compression type +#. TRANSLATORS: confirm dialog button +#: src/gui/widgets/tabs/setup_perfomance.cpp:46 +#: src/gui/windows/confirmdialog.cpp:47 +msgid "No" +msgstr "" + +#. TRANSLATORS: settings tab name +#. TRANSLATORS: perfoamance tab quick button +#: src/gui/widgets/tabs/setup_perfomance.cpp:61 src/progs/dyecmd/client.cpp:553 +#: src/progs/manaplus/client.cpp:919 +msgid "Performance" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:78 +msgid "Better performance (enable for better performance)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:83 +msgid "Auto adjust performance" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:88 +msgid "Hw acceleration" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:93 +msgid "Enable opacity cache (Software, can use much memory)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:99 +msgid "Enable map reduce (Software)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:105 +msgid "Enable compound sprite delay (Software)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:110 +msgid "Enable delayed images load (OpenGL)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:115 +msgid "Enable texture sampler (OpenGL)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:120 +msgid "Enable OpenGL context creation" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:125 +msgid "Enable OpenGL direct state access" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:131 +msgid "Better quality (disable for better performance)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:136 +msgid "Enable alpha channel fix (Software, can be very slow)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:142 +msgid "Show beings transparency" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:147 +msgid "Enable reorder sprites (need for mods support)." +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:154 +msgid "Small memory (enable for lower memory usage)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:159 +msgid "Disable advanced beings caching (Software)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:164 +msgid "Disable beings caching (Software)" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_perfomance.cpp:171 +msgid "Different options (enable or disable can improve performance)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:179 +msgid "Try first sdl driver (only for SDL2 default mode)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:186 +msgid "Enable texture compression (OpenGL)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:191 +msgid "Enable rectangular texture extension (OpenGL)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:196 +msgid "Use new texture internal format (OpenGL)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:201 +msgid "Enable texture atlases (OpenGL)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:206 +msgid "Cache all sprites per map (can use additional memory)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:212 +msgid "Cache all sounds (can use additional memory)" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_perfomance.cpp:218 +msgid "Critical options (DO NOT change if you don't know what you're doing)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_perfomance.cpp:223 +msgid "Disable logging in game (do not enable)" +msgstr "" + +#. TRANSLATORS: screen badges type +#. TRANSLATORS: visible name type +#: src/gui/widgets/tabs/setup_players.cpp:45 +#: src/gui/widgets/tabs/setup_players.cpp:59 +msgid "hide" +msgstr "" + +#. TRANSLATORS: screen badges type +#: src/gui/widgets/tabs/setup_players.cpp:47 +msgid "show at top" +msgstr "" + +#. TRANSLATORS: screen badges type +#: src/gui/widgets/tabs/setup_players.cpp:49 +msgid "show at right" +msgstr "" + +#. TRANSLATORS: screen badges type +#: src/gui/widgets/tabs/setup_players.cpp:51 +msgid "show at bottom" +msgstr "" + +#. TRANSLATORS: visible name type +#: src/gui/widgets/tabs/setup_players.cpp:61 +msgid "show" +msgstr "" + +#. TRANSLATORS: visible name type +#: src/gui/widgets/tabs/setup_players.cpp:63 +msgid "show on selection" +msgstr "" + +#. TRANSLATORS: show on top or down +#: src/gui/widgets/tabs/setup_players.cpp:71 +msgid "top" +msgstr "" + +#. TRANSLATORS: show on top or down +#: src/gui/widgets/tabs/setup_players.cpp:73 +msgid "bottom" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:90 +msgid "Show gender" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:95 +msgid "Show level" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:100 +msgid "Show own name" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:105 +msgid "Enable extended mouse targeting" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:110 +msgid "Target dead players" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:117 +msgid "Show player names" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:125 +msgid "Show player names at" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:131 +msgid "Auto move names" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:137 +msgid "Badges" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:142 +msgid "Secure trades" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:147 +msgid "Unsecure chars in names" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:152 +msgid "Show statuses" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:157 +msgid "Show ip addresses on screenshots" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:162 +msgid "Allow self heal with mouse click" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:167 +msgid "Group friends in who is online window" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:172 +msgid "Hide erased players nicks" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:177 +msgid "Collect players id and seen log" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:182 +msgid "Use special diagonal speed in players moving" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:187 +msgid "Log players actions (for GM)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:192 +msgid "Create screenshots for each complete trades" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:197 +msgid "" +"Emulate right mouse button by long mouse click (useful for touch interfaces)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:203 +msgid "Enable remote commands" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_players.cpp:209 +msgid "Allow move character by mouse" +msgstr "" + +#. TRANSLATORS: quick tab in settings +#. TRANSLATORS: settings tab name +#: src/gui/widgets/tabs/setup_quick.cpp:45 +#: src/progs/manaplus/actions/windows.cpp:317 +msgid "Quick" +msgstr "" + +#. TRANSLATORS: relations table header +#: src/gui/widgets/tabs/setup_relations.cpp:58 +msgid "Name" +msgstr "" + +#. TRANSLATORS: relations table header +#: src/gui/widgets/tabs/setup_relations.cpp:60 +msgid "Relation" +msgstr "" + +#. TRANSLATORS: relation dialog button +#: src/gui/widgets/tabs/setup_relations.cpp:73 +msgid "Allow trading" +msgstr "" + +#. TRANSLATORS: relation dialog button +#: src/gui/widgets/tabs/setup_relations.cpp:77 +msgid "Allow whispers" +msgstr "" + +#. TRANSLATORS: relation dialog button +#. TRANSLATORS: char select dialog. button. +#. TRANSLATORS: mail window button +#. TRANSLATORS: servers dialog button +#. TRANSLATORS: shop window label +#. TRANSLATORS: command editor button +#. TRANSLATORS: input action name +#: src/gui/widgets/tabs/setup_relations.cpp:81 +#: src/gui/windows/charselectdialog.cpp:83 src/gui/windows/mailwindow.cpp:73 +#: src/gui/windows/serverdialog.cpp:118 src/gui/windows/shopwindow.cpp:129 +#: src/gui/windows/textcommandeditor.cpp:112 src/input/pages/gui.cpp:109 +msgid "Delete" +msgstr "" + +#. TRANSLATORS: relation dialog name +#: src/gui/widgets/tabs/setup_relations.cpp:88 +msgid "Relations" +msgstr "" + +#. TRANSLATORS: relation dialog label +#: src/gui/widgets/tabs/setup_relations.cpp:113 +msgid "When ignoring:" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:63 +msgid "Gui theme" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:71 +msgid "Main Font" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:77 +msgid "Language" +msgstr "" + +#. TRANSLATORS: theme settings label +#. TRANSLATORS: font size +#: src/gui/widgets/tabs/setup_theme.cpp:82 src/gui/windows/emotewindow.cpp:56 +msgid "Bold font" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:87 +msgid "Particle font" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:92 +msgid "Help font" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:97 +msgid "Secure font" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:102 +msgid "Npc font" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:107 +msgid "Japanese font" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:112 +msgid "Chinese font" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:118 +msgid "Font size" +msgstr "" + +#. TRANSLATORS: theme settings label +#: src/gui/widgets/tabs/setup_theme.cpp:124 +msgid "Npc font size" +msgstr "" + +#. TRANSLATORS: button name with information about selected theme +#: src/gui/widgets/tabs/setup_theme.cpp:129 +msgid "i" +msgstr "" + +#. TRANSLATORS: theme settings tab name +#. TRANSLATORS: theme tab quick button +#: src/gui/widgets/tabs/setup_theme.cpp:133 src/progs/dyecmd/client.cpp:559 +#: src/progs/manaplus/client.cpp:925 +msgid "Theme" +msgstr "" + +#. TRANSLATORS: theme name +#: src/gui/widgets/tabs/setup_theme.cpp:255 +msgid "Name: " +msgstr "" + +#. TRANSLATORS: theme copyright +#: src/gui/widgets/tabs/setup_theme.cpp:257 +msgid "Copyright:" +msgstr "" + +#. TRANSLATORS: theme info dialog header +#: src/gui/widgets/tabs/setup_theme.cpp:323 +msgid "Theme info" +msgstr "" + +#. TRANSLATORS: theme message dialog +#: src/gui/widgets/tabs/setup_theme.cpp:358 +msgid "Theme Changed" +msgstr "" + +#. TRANSLATORS: ok dialog message +#. TRANSLATORS: video settings warning +#: src/gui/widgets/tabs/setup_theme.cpp:360 +#: src/gui/widgets/tabs/setup_video.cpp:430 +#: src/gui/widgets/tabs/setup_video.cpp:448 +msgid "Restart your client for the change to take effect." +msgstr "" + +#. TRANSLATORS: onscreen button size +#: src/gui/widgets/tabs/setup_touch.cpp:41 +msgid "Small" +msgstr "" + +#. TRANSLATORS: onscreen button size +#: src/gui/widgets/tabs/setup_touch.cpp:45 +msgid "Medium" +msgstr "" + +#. TRANSLATORS: onscreen button size +#: src/gui/widgets/tabs/setup_touch.cpp:47 +msgid "Large" +msgstr "" + +#. TRANSLATORS: touch settings tab +#: src/gui/widgets/tabs/setup_touch.cpp:69 +msgid "Touch" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:78 +msgid "Onscreen keyboard" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:82 +msgid "Show onscreen keyboard icon" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:87 +msgid "Keyboard icon action" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_touch.cpp:93 +msgid "Onscreen joystick" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:97 +msgid "Show onscreen joystick" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:102 +msgid "Joystick size" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_touch.cpp:108 +msgid "Onscreen buttons" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:112 +msgid "Show onscreen buttons" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:117 +msgid "Buttons format" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:122 +msgid "Buttons size" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_touch.cpp:131 +#, c-format +msgid "Button %u action" +msgstr "" + +#. TRANSLATORS: video settings checkbox +#: src/gui/widgets/tabs/setup_video.cpp:75 +msgid "Full screen" +msgstr "" + +#. TRANSLATORS: video settings checkbox +#: src/gui/widgets/tabs/setup_video.cpp:80 +msgid "FPS limit:" +msgstr "" + +#. TRANSLATORS: video settings label +#: src/gui/widgets/tabs/setup_video.cpp:86 +#: src/gui/widgets/tabs/setup_video.cpp:136 +#: src/gui/widgets/tabs/setup_video.cpp:353 +#: src/gui/widgets/tabs/setup_video.cpp:505 +msgid "Alt FPS limit: " +msgstr "" + +#. TRANSLATORS: video settings button +#: src/gui/widgets/tabs/setup_video.cpp:89 +msgid "Detect best mode" +msgstr "" + +#. TRANSLATORS: video settings checkbox +#: src/gui/widgets/tabs/setup_video.cpp:100 +msgid "High DPI" +msgstr "" + +#. TRANSLATORS: video settings checkbox +#: src/gui/widgets/tabs/setup_video.cpp:106 +msgid "Show cursor" +msgstr "" + +#. TRANSLATORS: video settings checkbox +#: src/gui/widgets/tabs/setup_video.cpp:109 +msgid "Custom cursor" +msgstr "" + +#. TRANSLATORS: video settings checkbox +#: src/gui/widgets/tabs/setup_video.cpp:114 +msgid "Enable resize" +msgstr "" + +#. TRANSLATORS: video settings checkbox +#: src/gui/widgets/tabs/setup_video.cpp:117 +msgid "No frame" +msgstr "" + +#. TRANSLATORS: video settings tab name +#. TRANSLATORS: video tab quick button +#: src/gui/widgets/tabs/setup_video.cpp:121 src/progs/dyecmd/client.cpp:556 +#: src/progs/manaplus/client.cpp:922 +msgid "Video" +msgstr "" + +#. TRANSLATORS: video settings label +#. TRANSLATORS: video settings label value +#. TRANSLATORS: video settings label +#: src/gui/widgets/tabs/setup_video.cpp:133 +#: src/gui/widgets/tabs/setup_video.cpp:138 +#: src/gui/widgets/tabs/setup_video.cpp:351 +#: src/gui/widgets/tabs/setup_video.cpp:489 +#: src/gui/widgets/tabs/setup_video.cpp:502 +msgid "None" +msgstr "" + +#. TRANSLATORS: video error message +#: src/gui/widgets/tabs/setup_video.cpp:253 +msgid "" +"Failed to switch to windowed mode and restoration of old mode also failed!" +msgstr "" + +#. TRANSLATORS: video error message +#: src/gui/widgets/tabs/setup_video.cpp:260 +msgid "" +"Failed to switch to fullscreen mode and restoration of old mode also failed!" +msgstr "" + +#. TRANSLATORS: video settings warning +#: src/gui/widgets/tabs/setup_video.cpp:273 +msgid "Switching to Full Screen" +msgstr "" + +#. TRANSLATORS: video settings warning +#: src/gui/widgets/tabs/setup_video.cpp:275 +msgid "Restart needed for changes to take effect." +msgstr "" + +#. TRANSLATORS: video settings warning +#: src/gui/widgets/tabs/setup_video.cpp:302 +msgid "Changing to OpenGL" +msgstr "" + +#. TRANSLATORS: video settings warning +#: src/gui/widgets/tabs/setup_video.cpp:304 +msgid "Applying change to OpenGL requires restart." +msgstr "" + +#. TRANSLATORS: resolution question dialog +#: src/gui/widgets/tabs/setup_video.cpp:397 +msgid "Custom resolution (example: 1024x768)" +msgstr "" + +#. TRANSLATORS: resolution question dialog +#: src/gui/widgets/tabs/setup_video.cpp:399 +msgid "Enter new resolution: " +msgstr "" + +#. TRANSLATORS: video settings warning +#: src/gui/widgets/tabs/setup_video.cpp:428 +#: src/gui/widgets/tabs/setup_video.cpp:446 +msgid "Screen Resolution Changed" +msgstr "" + +#. TRANSLATORS: video settings warning +#: src/gui/widgets/tabs/setup_video.cpp:432 +msgid "Some windows may be moved to fit the lowered resolution." +msgstr "" + +#. TRANSLATORS: speach type +#: src/gui/widgets/tabs/setup_visual.cpp:43 +msgid "No text" +msgstr "" + +#. TRANSLATORS: speach type +#: src/gui/widgets/tabs/setup_visual.cpp:45 +msgid "Text" +msgstr "" + +#. TRANSLATORS: speach type +#: src/gui/widgets/tabs/setup_visual.cpp:47 +msgid "Bubbles, no names" +msgstr "" + +#. TRANSLATORS: speach type +#: src/gui/widgets/tabs/setup_visual.cpp:49 +msgid "Bubbles with names" +msgstr "" + +#. TRANSLATORS: ambient effect type +#. TRANSLATORS: vsync type +#: src/gui/widgets/tabs/setup_visual.cpp:57 +#: src/gui/widgets/tabs/setup_visual.cpp:83 +msgid "off" +msgstr "" + +#. TRANSLATORS: patricle effects type +#: src/gui/widgets/tabs/setup_visual.cpp:69 +msgid "best quality" +msgstr "" + +#. TRANSLATORS: patricle effects type +#: src/gui/widgets/tabs/setup_visual.cpp:71 +msgid "normal" +msgstr "" + +#. TRANSLATORS: patricle effects type +#: src/gui/widgets/tabs/setup_visual.cpp:73 +msgid "best performance" +msgstr "" + +#. TRANSLATORS: vsync type +#: src/gui/widgets/tabs/setup_visual.cpp:85 +msgid "on" +msgstr "" + +#. TRANSLATORS: settings tab name +#: src/gui/widgets/tabs/setup_visual.cpp:98 +msgid "Visual" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:107 +#: src/gui/widgets/tabs/setup_visual.cpp:116 +msgid "Scale" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:121 +msgid "Notifications" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:125 +msgid "Show pickup notifications in chat" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:130 +msgid "Show pickup notifications as particle effects" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:135 +msgid "Effects" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:140 +msgid "Grab mouse and keyboard input" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:146 +msgid "Blurring textures (OpenGL)" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:151 +msgid "Gui opacity" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:157 +msgid "Enable gui opacity" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:163 +msgid "Overhead text" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:169 +msgid "Ambient FX" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:174 +msgid "Show particle effects" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:179 +msgid "Show particle effects from maps" +msgstr "" + +#. TRANSLATORS: particle details +#: src/gui/widgets/tabs/setup_visual.cpp:190 +msgid "max" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:192 +msgid "Particle detail" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:201 +msgid "Particle physics" +msgstr "" + +#. TRANSLATORS: settings group +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:207 +#: src/gui/widgets/tabs/setup_visual.cpp:216 +msgid "Gamma" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:211 +msgid "Enable gamma control" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:228 +msgid "Vsync" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:234 +msgid "Center game window" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:240 +msgid "Allow screensaver to run" +msgstr "" + +#. TRANSLATORS: settings group +#: src/gui/widgets/tabs/setup_visual.cpp:246 +msgid "Screenshots" +msgstr "" + +#. TRANSLATORS: settings option +#: src/gui/widgets/tabs/setup_visual.cpp:250 +msgid "Add water mark into screenshots" +msgstr "" + +#. TRANSLATORS: Attack filter tab name in social window. +#. TRANSLATORS: Should be small +#: src/gui/widgets/tabs/socialattacktab.h:49 +msgid "Atk" +msgstr "" + +#. TRANSLATORS: mobs group name in social window +#: src/gui/widgets/tabs/socialattacktab.h:66 +msgid "Priority mobs" +msgstr "" + +#. TRANSLATORS: mobs group name in social window +#: src/gui/widgets/tabs/socialattacktab.h:68 +msgid "Attack mobs" +msgstr "" + +#. TRANSLATORS: mobs group name in social window +#: src/gui/widgets/tabs/socialattacktab.h:70 +msgid "Ignore mobs" +msgstr "" + +#. TRANSLATORS: social window label +#: src/gui/widgets/tabs/socialfriendstab.h:116 +#, c-format +msgid "Friends: %u/%u" +msgstr "" + +#. TRANSLATORS: social window label +#: src/gui/widgets/tabs/socialguildtab2.h:99 +#: src/gui/widgets/tabs/socialguildtab.h:181 +#: src/gui/widgets/tabs/socialpartytab.h:174 +#, c-format +msgid "Players: %u/%u" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/widgets/tabs/socialguildtab.h:89 +#, c-format +msgid "Invited user %s to guild %s." +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/widgets/tabs/socialguildtab.h:109 +#, c-format +msgid "Guild %s quit requested." +msgstr "" + +#. TRANSLATORS: guild invite message +#: src/gui/widgets/tabs/socialguildtab.h:127 +msgid "Member Invite to Guild" +msgstr "" + +#. TRANSLATORS: guild invite message +#: src/gui/widgets/tabs/socialguildtab.h:129 +#, c-format +msgid "Who would you like to invite to guild %s?" +msgstr "" + +#. TRANSLATORS: guild leave message +#: src/gui/widgets/tabs/socialguildtab.h:141 +msgid "Leave Guild?" +msgstr "" + +#. TRANSLATORS: guild leave message +#: src/gui/widgets/tabs/socialguildtab.h:143 +#, c-format +msgid "Are you sure you want to leave guild %s?" +msgstr "" + +#. TRANSLATORS: social window label +#: src/gui/widgets/tabs/socialguildtab.h:157 +#, c-format +msgid "Members: %u/%u" +msgstr "" + +#. TRANSLATORS: Navigation tab name in social window. +#. TRANSLATORS: Should be small +#: src/gui/widgets/tabs/socialnavigationtab.h:60 +msgid "Nav" +msgstr "" + +#. TRANSLATORS: social window label +#: src/gui/widgets/tabs/socialnavigationtab.h:162 +#, c-format +msgid "Portals: %u/%u" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/widgets/tabs/socialpartytab.h:91 +#, c-format +msgid "Invited user %s to party." +msgstr "" + +#. TRANSLATORS: tab in social window +#: src/gui/widgets/tabs/socialpartytab.h:110 +#, c-format +msgid "Party %s quit requested." +msgstr "" + +#. TRANSLATORS: party invite message +#: src/gui/widgets/tabs/socialpartytab.h:128 +msgid "Member Invite to Party" +msgstr "" + +#. TRANSLATORS: party invite message +#: src/gui/widgets/tabs/socialpartytab.h:130 +#, c-format +msgid "Who would you like to invite to party %s?" +msgstr "" + +#. TRANSLATORS: party leave message +#: src/gui/widgets/tabs/socialpartytab.h:142 +msgid "Leave Party?" +msgstr "" + +#. TRANSLATORS: party leave message +#: src/gui/widgets/tabs/socialpartytab.h:144 +#, c-format +msgid "Are you sure you want to leave party %s?" +msgstr "" + +#. TRANSLATORS: Pickup filter tab name in social window. +#. TRANSLATORS: Should be small +#: src/gui/widgets/tabs/socialpickuptab.h:49 +msgid "Pik" +msgstr "" + +#. TRANSLATORS: items group name in social window +#: src/gui/widgets/tabs/socialpickuptab.h:66 +msgid "Pickup items" +msgstr "" + +#. TRANSLATORS: items group name in social window +#: src/gui/widgets/tabs/socialpickuptab.h:68 +msgid "Ignore items" +msgstr "" + +#. TRANSLATORS: social window label +#: src/gui/widgets/tabs/socialplayerstab.h:189 +#, c-format +msgid "Visible players: %d" +msgstr "" + +#. TRANSLATORS: debug window label, logic per second +#: src/gui/widgets/tabs/statdebugtab.cpp:42 +#: src/gui/widgets/tabs/statdebugtab.cpp:80 +#, c-format +msgid "LPS: %d" +msgstr "" + +#. TRANSLATORS: debug window stats reset button +#. TRANSLATORS: npc dialog button +#: src/gui/widgets/tabs/statdebugtab.cpp:44 src/gui/windows/npcdialog.cpp:138 +msgid "Reset" +msgstr "" + +#. TRANSLATORS: debug window stat label +#: src/gui/widgets/tabs/statdebugtab.cpp:64 +#: src/gui/widgets/tabs/statdebugtab.cpp:86 +#, c-format +msgid "stat%u: %d ms" +msgstr "" + +#. TRANSLATORS: debug window stat label +#: src/gui/widgets/tabs/statdebugtab.cpp:68 +#: src/gui/widgets/tabs/statdebugtab.cpp:91 +#, c-format +msgid "%d ms" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:37 +#: src/gui/widgets/tabs/targetdebugtab.cpp:97 +#: src/gui/widgets/tabs/targetdebugtab.cpp:168 +msgid "Target:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:39 +#: src/gui/widgets/tabs/targetdebugtab.cpp:103 +#: src/gui/widgets/tabs/targetdebugtab.cpp:170 +msgid "Target Id:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:42 +#: src/gui/widgets/tabs/targetdebugtab.cpp:106 +#: src/gui/widgets/tabs/targetdebugtab.cpp:172 +msgid "Target type:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:44 +msgid "Target level:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:46 +#: src/gui/widgets/tabs/targetdebugtab.cpp:122 +msgid "Target race:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:48 +msgid "Target party:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:50 +msgid "Target guild:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:52 +#: src/gui/widgets/tabs/targetdebugtab.cpp:156 +#: src/gui/widgets/tabs/targetdebugtab.cpp:162 +#: src/gui/widgets/tabs/targetdebugtab.cpp:180 +msgid "Attack delay:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:54 +#: src/gui/widgets/tabs/targetdebugtab.cpp:134 +#: src/gui/widgets/tabs/targetdebugtab.cpp:182 +msgid "Minimal hit:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:56 +#: src/gui/widgets/tabs/targetdebugtab.cpp:137 +#: src/gui/widgets/tabs/targetdebugtab.cpp:184 +msgid "Maximum hit:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:58 +#: src/gui/widgets/tabs/targetdebugtab.cpp:140 +#: src/gui/widgets/tabs/targetdebugtab.cpp:186 +msgid "Critical hit:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:60 +#: src/gui/widgets/tabs/targetdebugtab.cpp:143 +#: src/gui/widgets/tabs/targetdebugtab.cpp:188 +msgid "Karma:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:62 +#: src/gui/widgets/tabs/targetdebugtab.cpp:146 +#: src/gui/widgets/tabs/targetdebugtab.cpp:190 +msgid "Manner:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:64 +#: src/gui/widgets/tabs/targetdebugtab.cpp:149 +#: src/gui/widgets/tabs/targetdebugtab.cpp:192 +msgid "Effects:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:111 +#: src/gui/widgets/tabs/targetdebugtab.cpp:117 +#: src/gui/widgets/tabs/targetdebugtab.cpp:174 +msgid "Target Level:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:125 +#: src/gui/widgets/tabs/targetdebugtab.cpp:176 +msgid "Target Party:" +msgstr "" + +#. TRANSLATORS: debug window label +#: src/gui/widgets/tabs/targetdebugtab.cpp:129 +#: src/gui/widgets/tabs/targetdebugtab.cpp:178 +msgid "Target Guild:" +msgstr "" + +#. TRANSLATORS: short button name for who is online window. +#: src/gui/windowmenu.cpp:83 +msgid "ONL" +msgstr "" + +#. TRANSLATORS: long button name for who is online window. +#: src/gui/windowmenu.cpp:86 +msgid "Who is online" +msgstr "" + +#. TRANSLATORS: short button name for help window. +#: src/gui/windowmenu.cpp:89 +msgid "HLP" +msgstr "" + +#. TRANSLATORS: long button name for help window. +#. TRANSLATORS: help window name +#. TRANSLATORS: theme tab quick button +#: src/gui/windowmenu.cpp:92 src/gui/windows/helpwindow.cpp:57 +#: src/progs/dyecmd/client.cpp:565 src/progs/manaplus/client.cpp:931 +msgid "Help" +msgstr "" + +#. TRANSLATORS: short button name for quests window. +#: src/gui/windowmenu.cpp:95 +msgid "QE" +msgstr "" + +#. TRANSLATORS: long button name for quests window. +#. TRANSLATORS: quests window name +#: src/gui/windowmenu.cpp:98 src/gui/windows/questswindow.cpp:65 +msgid "Quests" +msgstr "" + +#. TRANSLATORS: short button name for kill stats window. +#: src/gui/windowmenu.cpp:101 +msgid "KS" +msgstr "" + +#. TRANSLATORS: long button name for kill stats window. +#. TRANSLATORS: kill stats window name +#: src/gui/windowmenu.cpp:104 src/gui/windows/killstats.cpp:49 +msgid "Kill stats" +msgstr "" + +#. TRANSLATORS: long button name for emotes window. +#: src/gui/windowmenu.cpp:109 +msgid "Smilies" +msgstr "" + +#. TRANSLATORS: short button name for chat window. +#: src/gui/windowmenu.cpp:112 +msgid "CH" +msgstr "" + +#. TRANSLATORS: short button name for status window. +#: src/gui/windowmenu.cpp:123 +msgid "STA" +msgstr "" + +#. TRANSLATORS: long button name for status window. +#: src/gui/windowmenu.cpp:126 +msgid "Status" +msgstr "" + +#. TRANSLATORS: short button name for equipment window. +#: src/gui/windowmenu.cpp:129 +msgid "EQU" +msgstr "" + +#. TRANSLATORS: long button name for equipment window. +#. TRANSLATORS: equipment window name +#. TRANSLATORS: equipment button tooltip +#: src/gui/windowmenu.cpp:132 src/gui/windows/equipmentwindow.cpp:67 +#: src/gui/windows/inventorywindow.cpp:271 +msgid "Equipment" +msgstr "" + +#. TRANSLATORS: short button name for inventory window. +#: src/gui/windowmenu.cpp:135 +msgid "INV" +msgstr "" + +#. TRANSLATORS: short button name for cart window. +#: src/gui/windowmenu.cpp:141 +msgid "CA" +msgstr "" + +#. TRANSLATORS: short button name for map window. +#: src/gui/windowmenu.cpp:147 +msgid "MAP" +msgstr "" + +#. TRANSLATORS: short button name for skills window. +#: src/gui/windowmenu.cpp:156 +msgid "SKI" +msgstr "" + +#. TRANSLATORS: long button name for skills window. +#. TRANSLATORS: skills dialog name +#: src/gui/windowmenu.cpp:159 src/gui/windows/skilldialog.cpp:85 +msgid "Skills" +msgstr "" + +#. TRANSLATORS: short button name for social window. +#: src/gui/windowmenu.cpp:164 +msgid "SOC" +msgstr "" + +#. TRANSLATORS: long button name for social window. +#. TRANSLATORS: social window name +#: src/gui/windowmenu.cpp:167 src/gui/windows/socialwindow.cpp:52 +msgid "Social" +msgstr "" + +#. TRANSLATORS: short button name for shortcuts window. +#: src/gui/windowmenu.cpp:170 +msgid "SH" +msgstr "" + +#. TRANSLATORS: short button name for spells window. +#: src/gui/windowmenu.cpp:176 +msgid "SP" +msgstr "" + +#. TRANSLATORS: short button name for drops window. +#: src/gui/windowmenu.cpp:182 +msgid "DR" +msgstr "" + +#. TRANSLATORS: short button name for did you know window. +#: src/gui/windowmenu.cpp:188 +msgid "YK" +msgstr "" + +#. TRANSLATORS: long button name for did you know window. +#: src/gui/windowmenu.cpp:191 +msgid "Did you know" +msgstr "" + +#. TRANSLATORS: short button name for shop window. +#: src/gui/windowmenu.cpp:194 +msgid "SHP" +msgstr "" + +#. TRANSLATORS: short button name for outfits window. +#: src/gui/windowmenu.cpp:200 +msgid "OU" +msgstr "" + +#. TRANSLATORS: short button name for updates window. +#: src/gui/windowmenu.cpp:206 +msgid "UP" +msgstr "" + +#. TRANSLATORS: long button name for updates window. +#: src/gui/windowmenu.cpp:209 +msgid "Updates" +msgstr "" + +#. TRANSLATORS: short button name for bank window. +#: src/gui/windowmenu.cpp:212 +msgid "BA" +msgstr "" + +#. TRANSLATORS: long button name for bank window. +#. TRANSLATORS: bank window name +#: src/gui/windowmenu.cpp:215 src/gui/windows/bankwindow.cpp:43 +msgid "Bank" +msgstr "" + +#. TRANSLATORS: short button name for mail window. +#: src/gui/windowmenu.cpp:218 +msgid "MA" +msgstr "" + +#. TRANSLATORS: long button name for mail window. +#. TRANSLATORS: mail window name +#. TRANSLATORS: inventory type name +#: src/gui/windowmenu.cpp:221 src/gui/windows/mailwindow.cpp:57 +#: src/resources/inventory/inventory.cpp:381 +msgid "Mail" +msgstr "" + +#. TRANSLATORS: short button name for clan window. +#: src/gui/windowmenu.cpp:224 +msgid "CL" +msgstr "" + +#. TRANSLATORS: short button name for server info window. +#: src/gui/windowmenu.cpp:230 +msgid "SI" +msgstr "" + +#. TRANSLATORS: long button name for server info window. +#. TRANSLATORS: servers dialog name +#: src/gui/windowmenu.cpp:233 src/gui/windows/serverinfowindow.cpp:41 +msgid "Server info" +msgstr "" + +#. TRANSLATORS: short button name for debug window. +#: src/gui/windowmenu.cpp:236 +msgid "DBG" +msgstr "" + +#. TRANSLATORS: short button name for windows list menu. +#: src/gui/windowmenu.cpp:247 +msgid "WIN" +msgstr "" + +#. TRANSLATORS: short button name for setup window. +#: src/gui/windowmenu.cpp:253 +msgid "SET" +msgstr "" + +#. TRANSLATORS: long button name for setup window. +#. TRANSLATORS: setup window name +#. TRANSLATORS: setup tab quick button +#: src/gui/windowmenu.cpp:256 src/gui/windows/setupwindow.cpp:67 +#: src/progs/dyecmd/client.cpp:550 src/progs/manaplus/client.cpp:916 +msgid "Setup" +msgstr "" + +#. TRANSLATORS: short key name +#. TRANSLATORS: outfits window label +#: src/gui/windowmenu.cpp:428 src/gui/windows/outfitwindow.cpp:80 +#: src/gui/windows/outfitwindow.cpp:631 +#, c-format +msgid "Key: %s" +msgstr "" + +#. TRANSLATORS: bank window money label +#: src/gui/windows/bankwindow.cpp:48 src/gui/windows/bankwindow.cpp:94 +#, c-format +msgid "Money in bank: %s" +msgstr "" + +#. TRANSLATORS: bank window button +#: src/gui/windows/bankwindow.cpp:52 +msgid "Withdraw" +msgstr "" + +#. TRANSLATORS: bank window button +#: src/gui/windows/bankwindow.cpp:55 +msgid "Deposit" +msgstr "" + +#. TRANSLATORS: buy dialog name +#: src/gui/windows/buydialog.cpp:191 +msgid "Create items" +msgstr "" + +#. TRANSLATORS: buy dialog label +#: src/gui/windows/buydialog.cpp:328 +msgid "Amount:" +msgstr "" + +#. TRANSLATORS: buy dialog button +#. TRANSLATORS: char create dialog button +#. TRANSLATORS: char select dialog. button. +#: src/gui/windows/buydialog.cpp:339 src/gui/windows/charcreatedialog.cpp:113 +#: src/gui/windows/charselectdialog.cpp:654 +msgid "Create" +msgstr "" + +#. TRANSLATORS: buy dialog label +#: src/gui/windows/buydialog.cpp:397 +msgid "Filter:" +msgstr "" + +#. TRANSLATORS: change email dialog header +#. TRANSLATORS: button in change email dialog +#: src/gui/windows/changeemaildialog.cpp:48 +#: src/gui/windows/changeemaildialog.cpp:55 +msgid "Change Email Address" +msgstr "" + +#. TRANSLATORS: label in change email dialog +#. TRANSLATORS: change password dialog label +#: src/gui/windows/changeemaildialog.cpp:63 +#: src/gui/windows/changepassworddialog.cpp:64 +#, c-format +msgid "Account: %s" +msgstr "" + +#. TRANSLATORS: label in change email dialog +#: src/gui/windows/changeemaildialog.cpp:67 +msgid "Type new email address twice:" +msgstr "" + +#. TRANSLATORS: change email error +#: src/gui/windows/changeemaildialog.cpp:139 +#, c-format +msgid "The new email address needs to be at least %u characters long." +msgstr "" + +#. TRANSLATORS: change email error +#: src/gui/windows/changeemaildialog.cpp:147 +#, c-format +msgid "The new email address needs to be less than %u characters long." +msgstr "" + +#. TRANSLATORS: change email error +#: src/gui/windows/changeemaildialog.cpp:155 +msgid "The email address entries mismatch." +msgstr "" + +#. TRANSLATORS: change email error header +#. TRANSLATORS: change password error header +#. TRANSLATORS: char creation error +#. TRANSLATORS: error header +#. TRANSLATORS: edit server dialog error header +#. TRANSLATORS: error message +#. TRANSLATORS: error message header +#. TRANSLATORS: error header +#. TRANSLATORS: ok dialog button +#. TRANSLATORS: error header +#. TRANSLATORS: error dialog header +#. TRANSLATORS: error message header +#: src/gui/windows/changeemaildialog.cpp:168 +#: src/gui/windows/changepassworddialog.cpp:156 +#: src/gui/windows/charcreatedialog.cpp:504 +#: src/gui/windows/charselectdialog.cpp:326 +#: src/gui/windows/editserverdialog.cpp:212 +#: src/gui/windows/registerdialog.cpp:253 src/net/ea/charserverrecv.cpp:105 +#: src/net/eathena/charserverrecv.cpp:412 +#: src/net/eathena/charserverrecv.cpp:416 +#: src/net/eathena/charserverrecv.cpp:498 src/net/tmwa/charserverrecv.cpp:291 +#: src/progs/manaplus/client.cpp:1423 src/progs/manaplus/client.cpp:1442 +#: src/progs/manaplus/client.cpp:1648 +msgid "Error" +msgstr "" + +#. TRANSLATORS: change password window name +#. TRANSLATORS: change password dialog button +#: src/gui/windows/changepassworddialog.cpp:49 +#: src/gui/windows/changepassworddialog.cpp:55 +msgid "Change Password" +msgstr "" + +#. TRANSLATORS: change password dialog label +#. TRANSLATORS: login dialog label +#. TRANSLATORS: register dialog. label. +#: src/gui/windows/changepassworddialog.cpp:68 +#: src/gui/windows/logindialog.cpp:121 src/gui/windows/registerdialog.cpp:77 +msgid "Password:" +msgstr "" + +#. TRANSLATORS: change password dialog label +#: src/gui/windows/changepassworddialog.cpp:71 +msgid "Type new password twice:" +msgstr "" + +#. TRANSLATORS: change password error +#: src/gui/windows/changepassworddialog.cpp:118 +msgid "Enter the old password first." +msgstr "" + +#. TRANSLATORS: change password error +#: src/gui/windows/changepassworddialog.cpp:125 +#, c-format +msgid "The new password needs to be at least %u characters long." +msgstr "" + +#. TRANSLATORS: change password error +#: src/gui/windows/changepassworddialog.cpp:133 +#, c-format +msgid "The new password needs to be less than %u characters long." +msgstr "" + +#. TRANSLATORS: change password error +#: src/gui/windows/changepassworddialog.cpp:141 +msgid "The new password entries mismatch." +msgstr "" + +#. TRANSLATORS: char create dialog name +#: src/gui/windows/charcreatedialog.cpp:78 +msgid "New Character" +msgstr "" + +#. TRANSLATORS: char create dialog label +#. TRANSLATORS: edit server dialog label +#. TRANSLATORS: login dialog label +#. TRANSLATORS: register dialog. label. +#: src/gui/windows/charcreatedialog.cpp:85 +#: src/gui/windows/editserverdialog.cpp:82 src/gui/windows/logindialog.cpp:119 +#: src/gui/windows/registerdialog.cpp:75 +msgid "Name:" +msgstr "" + +#. TRANSLATORS: char create dialog button +#: src/gui/windows/charcreatedialog.cpp:103 +msgid "^" +msgstr "" + +#. TRANSLATORS: char create dialog button +#. TRANSLATORS: This is a narrow symbol used to denote 'next'. +#. You may change this symbol if your language uses another. +#. TRANSLATORS: char create dialog button +#. TRANSLATORS: outfits window button +#: src/gui/windows/charcreatedialog.cpp:105 +#: src/gui/windows/charcreatedialog.cpp:198 +#: src/gui/windows/charcreatedialog.cpp:219 +#: src/gui/windows/charcreatedialog.cpp:238 +#: src/gui/windows/charcreatedialog.cpp:256 src/gui/windows/outfitwindow.cpp:66 +msgid ">" +msgstr "" + +#. TRANSLATORS: char create dialog label +#: src/gui/windows/charcreatedialog.cpp:111 +#: src/gui/windows/charcreatedialog.cpp:632 +#, c-format +msgid "Please distribute %d points" +msgstr "" + +#. TRANSLATORS: This is a narrow symbol used to denote 'previous'. +#. You may change this symbol if your language uses another. +#. TRANSLATORS: char create dialog button +#. TRANSLATORS: outfits window button +#: src/gui/windows/charcreatedialog.cpp:206 +#: src/gui/windows/charcreatedialog.cpp:225 +#: src/gui/windows/charcreatedialog.cpp:244 +#: src/gui/windows/charcreatedialog.cpp:262 src/gui/windows/outfitwindow.cpp:64 +msgid "<" +msgstr "" + +#. TRANSLATORS: char create dialog label +#: src/gui/windows/charcreatedialog.cpp:211 +msgid "Hair color:" +msgstr "" + +#. TRANSLATORS: char create dialog label +#: src/gui/windows/charcreatedialog.cpp:230 +msgid "Hair style:" +msgstr "" + +#. TRANSLATORS: char create dialog label +#: src/gui/windows/charcreatedialog.cpp:249 +msgid "Race:" +msgstr "" + +#. TRANSLATORS: char create dialog label +#: src/gui/windows/charcreatedialog.cpp:267 +msgid "Look:" +msgstr "" + +#. TRANSLATORS: one char size female character gender +#. TRANSLATORS: here F is title for friends tab in social window +#: src/gui/windows/charcreatedialog.cpp:285 src/gui/windows/socialwindow.cpp:70 +msgid "F" +msgstr "" + +#. TRANSLATORS: one char size male character gender +#: src/gui/windows/charcreatedialog.cpp:291 +#: src/gui/windows/charcreatedialog.cpp:298 +#: src/gui/windows/charcreatedialog.cpp:306 +msgid "M" +msgstr "" + +#. TRANSLATORS: one char size hidden character gender +#: src/gui/windows/charcreatedialog.cpp:293 +#: src/gui/windows/charcreatedialog.cpp:310 +msgid "H" +msgstr "" + +#. TRANSLATORS: one char size unknown character gender +#: src/gui/windows/charcreatedialog.cpp:300 +msgid "U" +msgstr "" + +#. TRANSLATORS: char creation error +#: src/gui/windows/charcreatedialog.cpp:506 +msgid "Your name needs to be at least 4 characters." +msgstr "" + +#. TRANSLATORS: char create dialog label +#: src/gui/windows/charcreatedialog.cpp:622 +msgid "Character stats OK" +msgstr "" + +#. TRANSLATORS: char create dialog label +#: src/gui/windows/charcreatedialog.cpp:638 +#, c-format +msgid "Please remove %d points" +msgstr "" + +#. TRANSLATORS: char deletion message +#: src/gui/windows/chardeleteconfirm.h:44 +msgid "Confirm Character Delete" +msgstr "" + +#. TRANSLATORS: char deletion message +#: src/gui/windows/chardeleteconfirm.h:46 +msgid "Are you sure you want to delete this character?" +msgstr "" + +#. TRANSLATORS: char select dialog name +#: src/gui/windows/charselectdialog.cpp:64 +#, c-format +msgid "Account %s (last login time %s)" +msgstr "" + +#. TRANSLATORS: char select dialog. button. +#: src/gui/windows/charselectdialog.cpp:73 +msgid "Switch" +msgstr "" + +#. TRANSLATORS: char select dialog. button. +#: src/gui/windows/charselectdialog.cpp:76 +msgid "Password" +msgstr "" + +#. TRANSLATORS: char select dialog. button. +#. TRANSLATORS: updater window button +#: src/gui/windows/charselectdialog.cpp:79 +#: src/gui/windows/charselectdialog.cpp:644 +#: src/gui/windows/updaterwindow.cpp:196 +msgid "Play" +msgstr "" + +#. TRANSLATORS: change pincode button +#: src/gui/windows/charselectdialog.cpp:128 +msgid "Change pin" +msgstr "" + +#. TRANSLATORS: char select dialog name +#: src/gui/windows/charselectdialog.cpp:165 +#, c-format +msgid "Account %s" +msgstr "" + +#. TRANSLATORS: character rename dialog header. +#: src/gui/windows/charselectdialog.cpp:239 +msgid "Please enter new name" +msgstr "" + +#. TRANSLATORS: char select dialog. player info message. +#: src/gui/windows/charselectdialog.cpp:264 +#, c-format +msgid "" +"Hp: %u/%u\n" +"Mp: %u/%u\n" +"Level: %u\n" +"Experience: %s\n" +"Money: %s" +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/charselectdialog.cpp:328 +msgid "Incorrect password" +msgstr "" + +#. TRANSLATORS: char deletion question. +#: src/gui/windows/charselectdialog.cpp:491 +msgid "Enter your email for deleting character" +msgstr "" + +#. TRANSLATORS: email label. +#: src/gui/windows/charselectdialog.cpp:493 +msgid "Enter email:" +msgstr "" + +#. TRANSLATORS: char deletion question. +#: src/gui/windows/charselectdialog.cpp:501 +msgid "Enter password for deleting character" +msgstr "" + +#. TRANSLATORS: email label. +#: src/gui/windows/charselectdialog.cpp:503 +msgid "Enter password:" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/chatwindow.cpp:719 +#, c-format +msgid "Present: %s; %d players are present." +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/chatwindow.cpp:1188 +#, c-format +msgid "Whispering to %s: %s" +msgstr "" + +#. TRANSLATORS: prefix for moved message to trade tab. +#: src/gui/windows/chatwindow.cpp:1621 +msgid "Moved: " +msgstr "" + +#. TRANSLATORS: moved message to trade tab warning. +#: src/gui/windows/chatwindow.cpp:1629 +msgid "Your message was moved to trade tab" +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/chatwindow.cpp:1654 +msgid "Broken nick detected: " +msgstr "" + +#. TRANSLATORS: clan window tab +#: src/gui/windows/clanwindow.cpp:67 +msgid "Ally" +msgstr "" + +#. TRANSLATORS: clan window tab +#: src/gui/windows/clanwindow.cpp:69 +msgid "Antagonist" +msgstr "" + +#. TRANSLATORS: confirm dialog button +#: src/gui/windows/confirmdialog.cpp:45 +msgid "Yes" +msgstr "" + +#. TRANSLATORS: debug window tab +#: src/gui/windows/debugwindow.cpp:72 +msgid "Net" +msgstr "" + +#. TRANSLATORS: debug window tab +#: src/gui/windows/debugwindow.cpp:74 +msgid "Stat" +msgstr "" + +#. TRANSLATORS: did you know window name +#: src/gui/windows/didyouknowwindow.cpp:55 +msgid "Did You Know?" +msgstr "" + +#. TRANSLATORS: did you know window button +#: src/gui/windows/didyouknowwindow.cpp:63 +msgid "< Previous" +msgstr "" + +#. TRANSLATORS: did you know window button +#: src/gui/windows/didyouknowwindow.cpp:65 +msgid "Next >" +msgstr "" + +#. TRANSLATORS: did you know window checkbox +#: src/gui/windows/didyouknowwindow.cpp:67 +msgid "Auto open this window" +msgstr "" + +#. TRANSLATORS: edit server dialog name +#: src/gui/windows/editserverdialog.cpp:47 +msgid "Edit Server" +msgstr "" + +#. TRANSLATORS: edit server dialog button +#. TRANSLATORS: servers dialog button +#: src/gui/windows/editserverdialog.cpp:63 src/gui/windows/serverdialog.cpp:110 +msgid "Connect" +msgstr "" + +#. TRANSLATORS: edit server dialog label +#: src/gui/windows/editserverdialog.cpp:70 +msgid "Use same ip" +msgstr "" + +#. TRANSLATORS: edit server dialog label +#: src/gui/windows/editserverdialog.cpp:84 +msgid "Address:" +msgstr "" + +#. TRANSLATORS: edit server dialog label +#: src/gui/windows/editserverdialog.cpp:86 +msgid "Port:" +msgstr "" + +#. TRANSLATORS: edit server dialog label +#: src/gui/windows/editserverdialog.cpp:88 +msgid "Server type:" +msgstr "" + +#. TRANSLATORS: edit server dialog label +#: src/gui/windows/editserverdialog.cpp:90 +msgid "Description:" +msgstr "" + +#. TRANSLATORS: edit server dialog label +#: src/gui/windows/editserverdialog.cpp:92 +msgid "Online list url:" +msgstr "" + +#. TRANSLATORS: edit server dialog label +#: src/gui/windows/editserverdialog.cpp:94 +msgid "Packet version:" +msgstr "" + +#. TRANSLATORS: edit server dialog error message +#: src/gui/windows/editserverdialog.cpp:214 +msgid "Please at least type both the address and the port of the server." +msgstr "" + +#. TRANSLATORS: egg selection dialog name +#: src/gui/windows/eggselectiondialog.cpp:42 +#: src/gui/windows/eggselectiondialog.cpp:44 +msgid "Select egg" +msgstr "" + +#. TRANSLATORS: egg selection dialog button +#. TRANSLATORS: input action name +#: src/gui/windows/eggselectiondialog.cpp:51 src/input/pages/gui.cpp:91 +msgid "Select" +msgstr "" + +#. TRANSLATORS: font size +#: src/gui/windows/emotewindow.cpp:54 +msgid "Normal font" +msgstr "" + +#. TRANSLATORS: emotes tab name +#: src/gui/windows/emotewindow.cpp:134 +msgid "Fonts" +msgstr "" + +#. TRANSLATORS: emotes tab name +#: src/gui/windows/emotewindow.cpp:137 +msgid "T" +msgstr "" + +#. TRANSLATORS: unknown equipment page name +#. TRANSLATORS: unknown hosts group name +#. TRANSLATORS: unknown skills tab name +#. TRANSLATORS: Skill type +#: src/gui/windows/equipmentwindow.cpp:675 src/gui/windows/serverdialog.cpp:497 +#: src/gui/windows/skilldialog.cpp:147 src/resources/skill/skillinfo.cpp:125 +msgid "Unknown" +msgstr "" + +#. TRANSLATORS: help window. button. +#: src/gui/windows/helpwindow.cpp:61 +msgid "Did you know..." +msgstr "" + +#. TRANSLATORS: insert card dialog name +#: src/gui/windows/insertcarddialog.cpp:45 +msgid "Insert card" +msgstr "" + +#. TRANSLATORS: insert card dialog name +#: src/gui/windows/insertcarddialog.cpp:49 +#: src/gui/windows/insertcarddialog.cpp:55 +#, c-format +msgid "Insert card %s" +msgstr "" + +#. TRANSLATORS: insert card dialog button +#. TRANSLATORS: input action name +#. TRANSLATORS: inventory button +#: src/gui/windows/insertcarddialog.cpp:63 src/input/pages/gui.cpp:121 +#: src/resources/itemtypemapdata.h:97 +msgid "Insert" +msgstr "" + +#. TRANSLATORS: inventory button +#. TRANSLATORS: outfits window button +#. TRANSLATORS: popup menu item +#. TRANSLATORS: inventory button +#: src/gui/windows/inventorywindow.cpp:208 src/gui/windows/outfitwindow.cpp:68 +#: src/resources/db/itemdb.cpp:702 src/resources/itemtypemapdata.h:45 +#: src/resources/itemtypemapdata.h:49 src/resources/itemtypemapdata.h:53 +#: src/resources/itemtypemapdata.h:57 src/resources/itemtypemapdata.h:61 +#: src/resources/itemtypemapdata.h:65 src/resources/itemtypemapdata.h:69 +#: src/resources/itemtypemapdata.h:73 src/resources/itemtypemapdata.h:77 +#: src/resources/itemtypemapdata.h:81 src/resources/itemtypemapdata.h:85 +#: src/resources/itemtypemapdata.h:89 src/resources/itemtypemapdata.h:93 +msgid "Equip" +msgstr "" + +#. TRANSLATORS: inventory outfits button +#: src/gui/windows/inventorywindow.cpp:236 +msgid "O" +msgstr "" + +#. TRANSLATORS: inventory cart button +#: src/gui/windows/inventorywindow.cpp:242 +msgid "C" +msgstr "" + +#. TRANSLATORS: inventory shop button +#: src/gui/windows/inventorywindow.cpp:248 +msgid "S" +msgstr "" + +#. TRANSLATORS: inventory equipment button +#: src/gui/windows/inventorywindow.cpp:254 +msgid "E" +msgstr "" + +#. TRANSLATORS: question dialog title +#: src/gui/windows/inventorywindow.cpp:1128 +msgid "Insert card request" +msgstr "" + +#. TRANSLATORS: question dialog message +#: src/gui/windows/inventorywindow.cpp:1130 +#, c-format +msgid "Insert %s into %s?" +msgstr "" + +#. TRANSLATORS: item amount window button +#: src/gui/windows/itemamountwindow.cpp:227 +msgid "All" +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:293 +msgid "Select amount of items to trade." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:297 +msgid "Select amount of items to drop." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:301 +msgid "Select amount of items to store." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:305 +msgid "Select amount of items to send." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:309 +msgid "Select amount of items to craft." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:313 +msgid "Select amount of items to store to cart." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:317 +msgid "Select amount of items to retrieve." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:321 +msgid "Select amount of items to retrieve from cart." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:325 +msgid "Select amount of items to split." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:329 +msgid "Add to buy shop." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:333 +msgid "Add to sell shop." +msgstr "" + +#. TRANSLATORS: amount window message +#: src/gui/windows/itemamountwindow.cpp:337 +msgid "Unknown." +msgstr "" + +#. TRANSLATORS: kill stats window button +#: src/gui/windows/killstats.cpp:54 +msgid "Reset stats" +msgstr "" + +#. TRANSLATORS: kill stats window button +#: src/gui/windows/killstats.cpp:57 +msgid "Reset timer" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:63 src/gui/windows/killstats.cpp:179 +#: src/gui/windows/killstats.cpp:293 src/gui/windows/killstats.cpp:463 +#, c-format +msgid "Kills: %s, total exp: %s" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:66 src/gui/windows/killstats.cpp:181 +#: src/gui/windows/killstats.cpp:270 src/gui/windows/killstats.cpp:285 +#: src/gui/windows/killstats.cpp:465 +#, c-format +msgid "Avg Exp: %s" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:68 src/gui/windows/killstats.cpp:184 +#: src/gui/windows/killstats.cpp:275 src/gui/windows/killstats.cpp:289 +#: src/gui/windows/killstats.cpp:468 +#, c-format +msgid "No. of avg mob to next level: %s" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:71 src/gui/windows/killstats.cpp:195 +#: src/gui/windows/killstats.cpp:298 src/gui/windows/killstats.cpp:471 +#, c-format +msgid "Kills/Min: %s, Exp/Min: %s" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:75 src/gui/windows/killstats.cpp:80 +#: src/gui/windows/killstats.cpp:85 src/gui/windows/killstats.cpp:369 +#: src/gui/windows/killstats.cpp:391 src/gui/windows/killstats.cpp:414 +#, c-format +msgid "Exp speed per %d min: %s" +msgid_plural "Exp speed per %d min: %s" +msgstr[0] "" +msgstr[1] "" + +#: src/gui/windows/killstats.cpp:77 src/gui/windows/killstats.cpp:82 +#: src/gui/windows/killstats.cpp:88 +#, c-format +msgid "Time for next level per %d min: %s" +msgid_plural "Time for next level per %d min: %s" +msgstr[0] "" +msgstr[1] "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:91 src/gui/windows/killstats.cpp:304 +msgid "Last kill exp:" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:124 src/gui/windows/killstats.cpp:248 +#, c-format +msgid "Level: %d at %f%%" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:133 src/gui/windows/killstats.cpp:257 +#, c-format +msgid "Exp: %s/%s Left: %s" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:139 src/gui/windows/killstats.cpp:265 +#: src/gui/windows/killstats.cpp:280 +#, c-format +msgid "1%% = %s exp, avg mob for 1%%: %s" +msgstr "" + +#. TRANSLATORS: kill stats window label +#: src/gui/windows/killstats.cpp:377 src/gui/windows/killstats.cpp:387 +#: src/gui/windows/killstats.cpp:400 src/gui/windows/killstats.cpp:409 +#: src/gui/windows/killstats.cpp:422 src/gui/windows/killstats.cpp:431 +#, c-format +msgid " Time for next level: %s" +msgstr "" + +#. TRANSLATORS: login dialog name +#. TRANSLATORS: login dialog button +#: src/gui/windows/logindialog.cpp:69 src/gui/windows/logindialog.cpp:89 +msgid "Login" +msgstr "" + +#. TRANSLATORS: login dialog label +#: src/gui/windows/logindialog.cpp:78 +msgid "Remember username" +msgstr "" + +#. TRANSLATORS: login dialog label +#: src/gui/windows/logindialog.cpp:81 +msgid "Update:" +msgstr "" + +#. TRANSLATORS: login dialog button +#: src/gui/windows/logindialog.cpp:86 +msgid "Change Server" +msgstr "" + +#. TRANSLATORS: login dialog button +#. TRANSLATORS: register dialog name +#. TRANSLATORS: register dialog. button. +#. TRANSLATORS: server info comment +#: src/gui/windows/logindialog.cpp:92 src/gui/windows/registerdialog.cpp:53 +#: src/gui/windows/registerdialog.cpp:63 +#: src/gui/windows/serverinfowindow.cpp:128 +msgid "Register" +msgstr "" + +#. TRANSLATORS: login dialog checkbox +#: src/gui/windows/logindialog.cpp:95 +msgid "Custom update host" +msgstr "" + +#. TRANSLATORS: login dialog label +#: src/gui/windows/logindialog.cpp:115 +msgid "Server:" +msgstr "" + +#. TRANSLATORS: question dialog +#: src/gui/windows/logindialog.cpp:257 +msgid "Open register url" +msgstr "" + +#. TRANSLATORS: update hosts group default name +#: src/gui/windows/logindialog.cpp:407 +msgid "default updates" +msgstr "" + +#. TRANSLATORS: mail edit window name +#: src/gui/windows/maileditwindow.cpp:53 +msgid "Edit mail" +msgstr "" + +#. TRANSLATORS: mail edit window button +#: src/gui/windows/maileditwindow.cpp:57 +msgid "Send" +msgstr "" + +#. TRANSLATORS: mail edit window label +#: src/gui/windows/maileditwindow.cpp:63 +msgid "To:" +msgstr "" + +#. TRANSLATORS: mail edit window label +#. TRANSLATORS: mail view window label +#: src/gui/windows/maileditwindow.cpp:65 src/gui/windows/mailviewwindow.cpp:76 +msgid "Subject:" +msgstr "" + +#. TRANSLATORS: mail edit window label +#. TRANSLATORS: mail view window label +#: src/gui/windows/maileditwindow.cpp:67 src/gui/windows/mailviewwindow.cpp:115 +#: src/gui/windows/mailviewwindow.cpp:275 +msgid "Money:" +msgstr "" + +#. TRANSLATORS: mail edit window label +#: src/gui/windows/maileditwindow.cpp:69 +msgid "Item:" +msgstr "" + +#. TRANSLATORS: mail edit window label +#. TRANSLATORS: mail view window label +#: src/gui/windows/maileditwindow.cpp:71 src/gui/windows/mailviewwindow.cpp:79 +msgid "Message:" +msgstr "" + +#. TRANSLATORS: empty mail message subject +#: src/gui/windows/maileditwindow.cpp:218 +msgid "empty subject" +msgstr "" + +#. TRANSLATORS: mail view window name +#: src/gui/windows/mailviewwindow.cpp:52 +msgid "View mail" +msgstr "" + +#. TRANSLATORS: mail view attach / items button +#: src/gui/windows/mailviewwindow.cpp:57 +msgid "Get items" +msgstr "" + +#: src/gui/windows/mailviewwindow.cpp:57 +msgid "Get attach" +msgstr "" + +#. TRANSLATORS: mail view window button +#: src/gui/windows/mailviewwindow.cpp:67 +msgid "Reply" +msgstr "" + +#. TRANSLATORS: mail view window label +#: src/gui/windows/mailviewwindow.cpp:69 +msgid "Time:" +msgstr "" + +#. TRANSLATORS: mail view window label +#: src/gui/windows/mailviewwindow.cpp:73 +msgid "From:" +msgstr "" + +#. TRANSLATORS: mail view attached money button +#: src/gui/windows/mailviewwindow.cpp:126 +msgid "Get money" +msgstr "" + +#. TRANSLATORS: mail window button +#: src/gui/windows/mailwindow.cpp:68 +msgid "Refresh" +msgstr "" + +#. TRANSLATORS: mail window button +#: src/gui/windows/mailwindow.cpp:71 +msgid "New" +msgstr "" + +#. TRANSLATORS: mail window button +#: src/gui/windows/mailwindow.cpp:76 +msgid "Get old" +msgstr "" + +#: src/gui/windows/mailwindow.cpp:76 +msgid "Return" +msgstr "" + +#. TRANSLATORS: mail window button +#: src/gui/windows/mailwindow.cpp:79 +msgid "Open" +msgstr "" + +#. TRANSLATORS: expired mail message prefix +#: src/gui/windows/mailwindow.cpp:200 +msgid "(expired)" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:73 +msgid "health bar" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:83 +msgid "mana bar" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:88 +msgid "experience bar" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:94 +msgid "weight bar" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:100 +msgid "inventory slots bar" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:105 +msgid "money bar" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:110 +msgid "arrows bar" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:116 +msgid "status bar" +msgstr "" + +#. TRANSLATORS: status bar name +#: src/gui/windows/ministatuswindow.cpp:144 +msgid "job bar" +msgstr "" + +#. TRANSLATORS: status bar label +#: src/gui/windows/ministatuswindow.cpp:375 +#, c-format +msgid "Level: %d (GM %d)" +msgstr "" + +#. TRANSLATORS: status bar label +#: src/gui/windows/ministatuswindow.cpp:407 +#: src/gui/windows/ministatuswindow.cpp:455 +msgid "Need" +msgstr "" + +#. TRANSLATORS: job bar label +#: src/gui/windows/ministatuswindow.cpp:438 +#, c-format +msgid "Job level: %d" +msgstr "" + +#. TRANSLATORS: npc dialog button +#: src/gui/windows/npcdialog.cpp:84 +msgid "Stop waiting" +msgstr "" + +#. TRANSLATORS: npc dialog button +#: src/gui/windows/npcdialog.cpp:86 +msgid "Next" +msgstr "" + +#. TRANSLATORS: npc dialog button +#: src/gui/windows/npcdialog.cpp:90 +msgid "Submit" +msgstr "" + +#. TRANSLATORS: sell confirmation header +#: src/gui/windows/npcselldialog.cpp:75 +msgid "sell item" +msgstr "" + +#. TRANSLATORS: sell confirmation message +#: src/gui/windows/npcselldialog.cpp:77 +#, c-format +msgid "Do you really want to sell %s?" +msgstr "" + +#. TRANSLATORS: outfits window label +#: src/gui/windows/outfitwindow.cpp:70 src/gui/windows/outfitwindow.cpp:625 +#, c-format +msgid "Outfit: %d" +msgstr "" + +#. TRANSLATORS: outfits window checkbox +#: src/gui/windows/outfitwindow.cpp:72 +msgid "Unequip first" +msgstr "" + +#. TRANSLATORS: outfits window checkbox +#: src/gui/windows/outfitwindow.cpp:76 +msgid "Away outfit" +msgstr "" + +#. TRANSLATORS: quest reward +#: src/gui/windows/questswindow.cpp:343 +msgid "Reward:" +msgstr "" + +#. TRANSLATORS: quest giver name +#: src/gui/windows/questswindow.cpp:351 +msgid "Quest Giver:" +msgstr "" + +#. TRANSLATORS: quest npc name +#: src/gui/windows/questswindow.cpp:359 +msgid "Npc:" +msgstr "" + +#. TRANSLATORS: quest coordinates +#: src/gui/windows/questswindow.cpp:368 +msgid "Coordinates:" +msgstr "" + +#. TRANSLATORS: quit dialog button +#: src/gui/windows/quitdialog.cpp:61 +msgid "Switch server" +msgstr "" + +#. TRANSLATORS: quit dialog button +#: src/gui/windows/quitdialog.cpp:64 +msgid "Switch character" +msgstr "" + +#. TRANSLATORS: register dialog. label. +#: src/gui/windows/registerdialog.cpp:79 +msgid "Confirm:" +msgstr "" + +#. TRANSLATORS: register dialog. button. +#: src/gui/windows/registerdialog.cpp:96 +msgid "Male" +msgstr "" + +#. TRANSLATORS: register dialog. button. +#: src/gui/windows/registerdialog.cpp:98 +msgid "Female" +msgstr "" + +#. TRANSLATORS: register dialog. label. +#: src/gui/windows/registerdialog.cpp:108 +msgid "Email:" +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/registerdialog.cpp:184 +#, c-format +msgid "The username needs to be at least %u characters long." +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/registerdialog.cpp:193 +#, c-format +msgid "The username needs to be less than %u characters long." +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/registerdialog.cpp:202 +#, c-format +msgid "The password needs to be at least %u characters long." +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/registerdialog.cpp:211 +#, c-format +msgid "The password needs to be less than %u characters long." +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/registerdialog.cpp:219 +msgid "Passwords do not match." +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/registerdialog.cpp:226 src/net/ea/loginrecv.cpp:121 +#: src/net/eathena/loginrecv.cpp:120 +msgid "Incorrect email." +msgstr "" + +#. TRANSLATORS: error message +#: src/gui/windows/registerdialog.cpp:233 +msgid "Email too long." +msgstr "" + +#. TRANSLATORS: servers dialog name +#: src/gui/windows/serverdialog.cpp:99 +msgid "Choose Your Server" +msgstr "" + +#. TRANSLATORS: servers dialog button +#: src/gui/windows/serverdialog.cpp:120 +msgid "Load" +msgstr "" + +#. TRANSLATORS: servers dialog name +#: src/gui/windows/serverdialog.cpp:134 +msgid "Choose Your Server *** SAFE MODE ***" +msgstr "" + +#. TRANSLATORS: servers dialog name +#: src/gui/windows/serverdialog.cpp:140 +msgid "Choose Your Server *** SOFTWARE RENDER MODE ***" +msgstr "" + +#. TRANSLATORS: servers dialog checkbox +#: src/gui/windows/serverdialog.cpp:150 +msgid "Use same ip for game sub servers" +msgstr "" + +#. TRANSLATORS: servers dialog label +#: src/gui/windows/serverdialog.cpp:436 +#, c-format +msgid "Downloading server list...%2.2f%%" +msgstr "" + +#. TRANSLATORS: servers dialog label +#: src/gui/windows/serverdialog.cpp:442 +msgid "Waiting for server..." +msgstr "" + +#. TRANSLATORS: servers dialog label +#: src/gui/windows/serverdialog.cpp:447 +msgid "Preparing download" +msgstr "" + +#. TRANSLATORS: servers dialog label +#: src/gui/windows/serverdialog.cpp:452 +msgid "Error retreiving server list!" +msgstr "" + +#. TRANSLATORS: servers dialog label +#: src/gui/windows/serverdialog.cpp:618 +msgid "requires a newer version" +msgstr "" + +#. TRANSLATORS: servers dialog label +#: src/gui/windows/serverdialog.cpp:623 +#, c-format +msgid "requires v%s" +msgstr "" + +#. TRANSLATORS: server info comment +#: src/gui/windows/serverinfowindow.cpp:103 +msgid "##BServer with free license." +msgstr "" + +#. TRANSLATORS: server info comment +#: src/gui/windows/serverinfowindow.cpp:109 +msgid "##BServer with non free license." +msgstr "" + +#. TRANSLATORS: server info comment +#: src/gui/windows/serverinfowindow.cpp:116 +msgid "##BServer unknown license." +msgstr "" + +#. TRANSLATORS: server info comment +#: src/gui/windows/serverinfowindow.cpp:122 +msgid "Server" +msgstr "" + +#. TRANSLATORS: server info comment +#. TRANSLATORS: Skill type +#: src/gui/windows/serverinfowindow.cpp:125 +#: src/resources/skill/skilltypelist.h:43 +msgid "Support" +msgstr "" + +#. TRANSLATORS: server info non free comment +#: src/gui/windows/serverinfowindow.cpp:132 +msgid "##BNon free sources" +msgstr "" + +#. TRANSLATORS: server info free comment +#: src/gui/windows/serverinfowindow.cpp:135 +msgid "##BFree sources" +msgstr "" + +#. TRANSLATORS: server info documentation comment +#: src/gui/windows/serverinfowindow.cpp:138 +msgid "##BDocumentation" +msgstr "" + +#. TRANSLATORS: setup button +#: src/gui/windows/setupwindow.cpp:104 +msgid "Apply" +msgstr "" + +#. TRANSLATORS: setup button +#: src/gui/windows/setupwindow.cpp:110 +msgid "Reset Windows" +msgstr "" + +#. TRANSLATORS: shop window name +#: src/gui/windows/shopwindow.cpp:106 src/gui/windows/shopwindow.cpp:1153 +msgid "Personal Shop" +msgstr "" + +#. TRANSLATORS: shop window button +#. TRANSLATORS: publish shop button +#: src/gui/windows/shopwindow.cpp:196 src/gui/windows/shopwindow.cpp:459 +#: src/gui/windows/shopwindow.cpp:484 +msgid "Publish" +msgstr "" + +#. TRANSLATORS: shop window button +#: src/gui/windows/shopwindow.cpp:213 +msgid "Announce" +msgstr "" + +#. TRANSLATORS: shop window checkbox +#: src/gui/windows/shopwindow.cpp:218 +msgid "Show links in announce" +msgstr "" + +#. TRANSLATORS: shop rename dialog title +#: src/gui/windows/shopwindow.cpp:388 +msgid "Please enter new shop name" +msgstr "" + +#. TRANSLATORS: unpublish shop button +#: src/gui/windows/shopwindow.cpp:454 src/gui/windows/shopwindow.cpp:479 +msgid "Unpublish" +msgstr "" + +#. TRANSLATORS: error buy/sell shop request +#: src/gui/windows/shopwindow.cpp:951 +msgid "error: player busy" +msgstr "" + +#. TRANSLATORS: error buy/sell shop request +#: src/gui/windows/shopwindow.cpp:1000 +msgid "error: Can't sell this item" +msgstr "" + +#. TRANSLATORS: error buy/sell shop request +#: src/gui/windows/shopwindow.cpp:1012 +msgid "error: Can't buy this item" +msgstr "" + +#. TRANSLATORS: buy shop request (nick, item) +#: src/gui/windows/shopwindow.cpp:1032 +#, c-format +msgid "%s wants to buy %s do you accept?" +msgstr "" + +#. TRANSLATORS: sell shop request (nick, item) +#: src/gui/windows/shopwindow.cpp:1039 +#, c-format +msgid "%s wants to sell %s do you accept?" +msgstr "" + +#. TRANSLATORS: shop window dialog +#. TRANSLATORS: trade message +#: src/gui/windows/shopwindow.cpp:1046 src/net/ea/traderecv.cpp:165 +msgid "Request for Trade" +msgstr "" + +#. TRANSLATORS: shop window name +#: src/gui/windows/shopwindow.cpp:1158 +#, c-format +msgid "Personal Shop - %s" +msgstr "" + +#. TRANSLATORS: skills dialog button +#: src/gui/windows/skilldialog.cpp:95 +msgid "Up" +msgstr "" + +#. TRANSLATORS: skills dialog label +#: src/gui/windows/skilldialog.cpp:243 +#, c-format +msgid "Skill points available: %d" +msgstr "" + +#. TRANSLATORS: skills dialog default skill tab +#: src/gui/windows/skilldialog.cpp:399 +#, c-format +msgid "Skill Set %d" +msgstr "" + +#. TRANSLATORS: skills dialog. skill id +#: src/gui/windows/skilldialog.cpp:512 +#, c-format +msgid "Skill %d" +msgstr "" + +#. TRANSLATORS: skills dialog. skill id +#: src/gui/windows/skilldialog.cpp:564 +#, c-format +msgid "Skill %u" +msgstr "" + +#. TRANSLATORS: skills dialog. skill level +#. TRANSLATORS: skill level +#: src/gui/windows/skilldialog.cpp:783 src/resources/skill/skillinfo.cpp:108 +#, c-format +msgid "Lvl: %d" +msgstr "" + +#. TRANSLATORS: skill error message +#: src/gui/windows/skilldialog.cpp:790 +#, c-format +msgid "Failed skill: %s" +msgstr "" + +#. TRANSLATORS: text skill dialog header +#: src/gui/windows/skilldialog.cpp:1164 src/gui/windows/skilldialog.cpp:1230 +#: src/gui/windows/skilldialog.cpp:1351 +#, c-format +msgid "Add text to skill %s" +msgstr "" + +#. TRANSLATORS: text skill dialog field +#: src/gui/windows/skilldialog.cpp:1167 src/gui/windows/skilldialog.cpp:1233 +#: src/gui/windows/skilldialog.cpp:1354 +msgid "Text: " +msgstr "" + +#. TRANSLATORS: here P is title for visible players tab in social window +#: src/gui/windows/socialwindow.cpp:65 +msgid "P" +msgstr "" + +#. TRANSLATORS: social window button +#: src/gui/windows/socialwindow.cpp:73 +msgid "Menu" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/socialwindow.cpp:277 +#, c-format +msgid "Accepted party invite from %s." +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/socialwindow.cpp:291 +#, c-format +msgid "Rejected party invite from %s." +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/socialwindow.cpp:311 +#, c-format +msgid "Accepted guild invite from %s." +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/socialwindow.cpp:333 +#, c-format +msgid "Rejected guild invite from %s." +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/socialwindow.cpp:393 +msgid "Received guild request, but one already exists." +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/socialwindow.cpp:404 +#, c-format +msgid "%s has invited you to join the guild %s." +msgstr "" + +#. TRANSLATORS: guild invite message +#: src/gui/windows/socialwindow.cpp:417 +msgid "Accept Guild Invite" +msgstr "" + +#. TRANSLATORS: chat message +#: src/gui/windows/socialwindow.cpp:437 +msgid "Received party request, but one already exists." +msgstr "" + +#. TRANSLATORS: party invite message +#: src/gui/windows/socialwindow.cpp:452 +msgid "You have been invited you to join a party." +msgstr "" + +#. TRANSLATORS: party invite message +#: src/gui/windows/socialwindow.cpp:457 +#, c-format +msgid "You have been invited to join the %s party." +msgstr "" + +#. TRANSLATORS: party invite message +#: src/gui/windows/socialwindow.cpp:466 +#, c-format +msgid "%s has invited you to join their party." +msgstr "" + +#. TRANSLATORS: party invite message +#: src/gui/windows/socialwindow.cpp:472 +#, c-format +msgid "%s has invited you to join the %s party." +msgstr "" + +#. TRANSLATORS: party invite message +#: src/gui/windows/socialwindow.cpp:488 +msgid "Accept Party Invite" +msgstr "" + +#. TRANSLATORS: status window label +#: src/gui/windows/statuswindow.cpp:78 +msgid "HP:" +msgstr "" + +#. TRANSLATORS: status window label +#: src/gui/windows/statuswindow.cpp:81 +msgid "Exp:" +msgstr "" + +#. TRANSLATORS: status window label +#: src/gui/windows/statuswindow.cpp:148 +msgid "MP:" +msgstr "" + +#. TRANSLATORS: status window label +#: src/gui/windows/statuswindow.cpp:186 src/gui/windows/statuswindow.cpp:378 +#, c-format +msgid "Job: %d" +msgstr "" + +#. TRANSLATORS: status window label +#: src/gui/windows/statuswindow.cpp:188 +msgid "Job:" +msgstr "" + +#. TRANSLATORS: status window label +#: src/gui/windows/statuswindow.cpp:274 +#, c-format +msgid "Level: %d (%s %d)" +msgstr "" + +#. TRANSLATORS: command editor name +#: src/gui/windows/textcommandeditor.cpp:56 +msgid "Command Editor" +msgstr "" + +#. TRANSLATORS: command editor button +#: src/gui/windows/textcommandeditor.cpp:65 +msgid "magic" +msgstr "" + +#. TRANSLATORS: command editor button +#: src/gui/windows/textcommandeditor.cpp:67 +msgid "other" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:70 +msgid "Symbol:" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:74 +msgid "Command:" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:78 +msgid "Comment:" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:83 +msgid "Target Type:" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:88 +msgid "Icon:" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:93 +msgid "Mana:" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:96 +msgid "Magic level:" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:100 +msgid "Magic School:" +msgstr "" + +#. TRANSLATORS: command editor label +#: src/gui/windows/textcommandeditor.cpp:104 +msgid "School level:" +msgstr "" + +#. TRANSLATORS: command editor button +#: src/gui/windows/textcommandeditor.cpp:110 +msgid "Save" +msgstr "" + +#. TRANSLATORS: trade window button +#: src/gui/windows/tradewindow.cpp:67 +msgid "Propose trade" +msgstr "" + +#. TRANSLATORS: trade window button +#: src/gui/windows/tradewindow.cpp:69 +msgid "Confirmed. Waiting..." +msgstr "" + +#. TRANSLATORS: trade window button +#: src/gui/windows/tradewindow.cpp:71 +msgid "Agree trade" +msgstr "" + +#. TRANSLATORS: trade window button +#: src/gui/windows/tradewindow.cpp:73 +msgid "Agreed. Waiting..." +msgstr "" + +#. TRANSLATORS: trade window caption +#: src/gui/windows/tradewindow.cpp:77 +msgid "Trade: You" +msgstr "" + +#. TRANSLATORS: trade window money label +#: src/gui/windows/tradewindow.cpp:87 src/gui/windows/tradewindow.cpp:196 +#, c-format +msgid "You get %s" +msgstr "" + +#. TRANSLATORS: trade window money change button +#: src/gui/windows/tradewindow.cpp:93 +msgid "Change" +msgstr "" + +#. TRANSLATORS: trade window money label +#: src/gui/windows/tradewindow.cpp:140 +msgid "You give:" +msgstr "" + +#. TRANSLATORS: trade error +#: src/gui/windows/tradewindow.cpp:448 +msgid "You don't have enough money." +msgstr "" + +#. TRANSLATORS: trade error +#: src/gui/windows/tradewindow.cpp:539 +msgid "Failed adding item. You can not overlap one kind of item on the window." +msgstr "" + +#. TRANSLATORS: trade error +#: src/gui/windows/tradewindow.cpp:554 +msgid "Failed adding item. You can not trade equipped items." +msgstr "" + +#. TRANSLATORS: updater window name +#: src/gui/windows/updaterwindow.cpp:174 +msgid "Updating..." +msgstr "" + +#. TRANSLATORS: updater window label +#: src/gui/windows/updaterwindow.cpp:192 +msgid "Connecting..." +msgstr "" + +#. TRANSLATORS: updater window checkbox +#: src/gui/windows/updaterwindow.cpp:420 +msgid "Show all news (can be slow)" +msgstr "" + +#. TRANSLATORS: update message +#: src/gui/windows/updaterwindow.cpp:864 +msgid "##1 The update process is incomplete." +msgstr "" + +#. TRANSLATORS: Continues "The update process is incomplete.". +#: src/gui/windows/updaterwindow.cpp:867 +msgid "##1 It is strongly recommended that" +msgstr "" + +#. TRANSLATORS: Begins "It is strongly recommended that". +#: src/gui/windows/updaterwindow.cpp:870 +msgid "##1 you try again later." +msgstr "" + +#. TRANSLATORS: updater window label +#: src/gui/windows/updaterwindow.cpp:1059 +msgid "Completed" +msgstr "" + +#. TRANSLATORS: who is online window name +#: src/gui/windows/whoisonline.cpp:101 src/gui/windows/whoisonline.cpp:673 +msgid "Who Is Online - Updating" +msgstr "" + +#. TRANSLATORS: who is online. button. +#: src/gui/windows/whoisonline.cpp:114 +msgid "Update" +msgstr "" + +#. TRANSLATORS: who is online window name +#: src/gui/windows/whoisonline.cpp:246 +msgid "Who Is Online - " +msgstr "" + +#. TRANSLATORS: who is online window name +#: src/gui/windows/whoisonline.cpp:689 +msgid "Who Is Online - error" +msgstr "" + +#. TRANSLATORS: who is online window name +#: src/gui/windows/whoisonline.cpp:736 +msgid "Who Is Online - Update" +msgstr "" + +#. TRANSLATORS: world select dialog name +#: src/gui/windows/worldselectdialog.cpp:47 +msgid "Select World" +msgstr "" + +#. TRANSLATORS: world dialog button +#: src/gui/windows/worldselectdialog.cpp:53 +msgid "Change Login" +msgstr "" + +#. TRANSLATORS: world dialog button +#: src/gui/windows/worldselectdialog.cpp:56 +msgid "Choose World" +msgstr "" + +#. TRANSLATORS: long key name. must be short. +#. TRANSLATORS: short key name. must be very short. +#. TRANSLATORS: long key name, should be short +#: src/input/inputmanager.cpp:406 src/input/inputmanager.cpp:449 +#: src/input/keyboardconfig.cpp:95 +#, c-format +msgid "key_%d" +msgstr "" + +#. TRANSLATORS: long joystick button name. must be short. +#: src/input/inputmanager.cpp:412 +#, c-format +msgid "JButton%d" +msgstr "" + +#. TRANSLATORS: unknown long key type +#: src/input/inputmanager.cpp:426 +msgid "unknown key" +msgstr "" + +#. TRANSLATORS: short joystick button name. muse be very short +#: src/input/inputmanager.cpp:455 +#, c-format +msgid "JB%d" +msgstr "" + +#. TRANSLATORS: unknown short key type. must be short +#. TRANSLATORS: Unknown key short string. +#. TRANSLATORS: This string must be maximum 5 chars +#: src/input/inputmanager.cpp:469 src/input/keyboardconfig.cpp:139 +msgid "u key" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:34 +msgid "Target and attack keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:46 +msgid "Target & attack closest monster" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:52 +msgid "Target & attack closest player" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:58 +msgid "Move to Target" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:64 +msgid "Change Move to Target type" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:70 +msgid "Move to Home location" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:76 +msgid "Set home location" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:82 +msgid "Move to navigation point" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:94 +msgid "Stop Attack / Modifier key" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:100 +msgid "Untarget" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:106 +msgid "Target monster" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:112 +msgid "Target closest monster (without filters)" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:118 +msgid "Target NPC" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:124 +msgid "Target Player" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:130 +msgid "Target mercenary" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:136 +msgid "Target skill unit" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:142 +msgid "Change targeting type" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:148 +msgid "Target pet" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:154 +msgid "Catch pet" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:160 +msgid "Other Keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:166 +msgid "Pickup" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:172 +msgid "Change Pickup Type" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:178 +msgid "Sit" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:184 +msgid "Screenshot" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:190 +msgid "Enable/Disable Trading" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:196 +msgid "Open trade window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:202 +msgid "Start trade with target" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:208 +msgid "Follow selected player" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:214 +msgid "Change Map View Mode" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:220 +msgid "Select OK" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:232 +msgid "Stop or sit" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:238 +msgid "Return to safe video mode" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:244 +msgid "Fire your homunculus" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/basic.cpp:262 +msgid "Open context menu" +msgstr "" + +#. TRANSLATORS: input action group +#: src/input/pages/chat.cpp:31 +msgid "Main" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:37 +msgid "Toggle Chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:43 +msgid "Chat modifier key" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:49 +msgid "Scroll Chat Up" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:55 +msgid "Scroll Chat Down" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:67 +msgid "Previous Chat Tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:73 +msgid "Next Chat Tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:79 +msgid "Clear current chat tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:85 +msgid "Close current Chat Tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:91 +msgid "Close all chat tabs" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:97 +msgid "Select general tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:103 +msgid "Select debug tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:109 +msgid "Select trade tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:115 +msgid "Select battle tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:121 +msgid "Select gm tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:127 +msgid "Select lang tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:133 +msgid "Select party tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:139 +msgid "Select guild tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:151 +msgid "Ignore all whispers" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:157 +msgid "Ignore all whispers on server side" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:163 +msgid "Unignore all whispers on server side" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:169 +msgid "Previous chat line" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:175 +msgid "Next chat line" +msgstr "" + +#. TRANSLATORS: input action group +#: src/input/pages/chat.cpp:181 +msgid "Smiles" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/chat.cpp:187 +msgid "Show smiles" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/craft.cpp:32 src/input/pages/craft.cpp:38 +#: src/input/pages/craft.cpp:44 src/input/pages/craft.cpp:50 +#: src/input/pages/craft.cpp:56 src/input/pages/craft.cpp:62 +#: src/input/pages/craft.cpp:68 src/input/pages/craft.cpp:74 +#: src/input/pages/craft.cpp:80 +#, c-format +msgid "Craft shortcut %d" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/emotes.cpp:35 +msgid "Emote modifiers keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/emotes.cpp:41 +msgid "Emote modifier key" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/emotes.cpp:47 +msgid "Pet emote modifier key" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/emotes.cpp:53 +msgid "Homunculus / mercenary emote modifier key" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/emotes.cpp:59 +msgid "Emote shortcuts" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/emotes.cpp:65 src/input/pages/emotes.cpp:71 +#: src/input/pages/emotes.cpp:77 src/input/pages/emotes.cpp:83 +#: src/input/pages/emotes.cpp:89 src/input/pages/emotes.cpp:95 +#: src/input/pages/emotes.cpp:101 src/input/pages/emotes.cpp:107 +#: src/input/pages/emotes.cpp:113 src/input/pages/emotes.cpp:119 +#: src/input/pages/emotes.cpp:125 src/input/pages/emotes.cpp:131 +#: src/input/pages/emotes.cpp:137 src/input/pages/emotes.cpp:143 +#: src/input/pages/emotes.cpp:149 src/input/pages/emotes.cpp:155 +#: src/input/pages/emotes.cpp:161 src/input/pages/emotes.cpp:167 +#: src/input/pages/emotes.cpp:173 src/input/pages/emotes.cpp:179 +#: src/input/pages/emotes.cpp:185 src/input/pages/emotes.cpp:191 +#: src/input/pages/emotes.cpp:197 src/input/pages/emotes.cpp:203 +#: src/input/pages/emotes.cpp:209 src/input/pages/emotes.cpp:215 +#: src/input/pages/emotes.cpp:221 src/input/pages/emotes.cpp:227 +#: src/input/pages/emotes.cpp:233 src/input/pages/emotes.cpp:239 +#: src/input/pages/emotes.cpp:245 src/input/pages/emotes.cpp:251 +#: src/input/pages/emotes.cpp:257 src/input/pages/emotes.cpp:263 +#: src/input/pages/emotes.cpp:269 src/input/pages/emotes.cpp:275 +#: src/input/pages/emotes.cpp:281 src/input/pages/emotes.cpp:287 +#: src/input/pages/emotes.cpp:293 src/input/pages/emotes.cpp:299 +#: src/input/pages/emotes.cpp:305 src/input/pages/emotes.cpp:311 +#: src/input/pages/emotes.cpp:317 src/input/pages/emotes.cpp:323 +#: src/input/pages/emotes.cpp:329 src/input/pages/emotes.cpp:335 +#: src/input/pages/emotes.cpp:341 src/input/pages/emotes.cpp:347 +#, c-format +msgid "Emote Shortcut %d" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/emotes.cpp:358 +msgid "Pet emote shortcuts" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/emotes.cpp:364 src/input/pages/emotes.cpp:370 +#: src/input/pages/emotes.cpp:376 src/input/pages/emotes.cpp:382 +#: src/input/pages/emotes.cpp:388 src/input/pages/emotes.cpp:394 +#: src/input/pages/emotes.cpp:400 src/input/pages/emotes.cpp:406 +#: src/input/pages/emotes.cpp:412 src/input/pages/emotes.cpp:418 +#: src/input/pages/emotes.cpp:424 src/input/pages/emotes.cpp:430 +#: src/input/pages/emotes.cpp:436 src/input/pages/emotes.cpp:442 +#: src/input/pages/emotes.cpp:448 src/input/pages/emotes.cpp:454 +#: src/input/pages/emotes.cpp:460 src/input/pages/emotes.cpp:466 +#: src/input/pages/emotes.cpp:472 src/input/pages/emotes.cpp:478 +#: src/input/pages/emotes.cpp:484 src/input/pages/emotes.cpp:490 +#: src/input/pages/emotes.cpp:496 src/input/pages/emotes.cpp:502 +#: src/input/pages/emotes.cpp:508 src/input/pages/emotes.cpp:514 +#: src/input/pages/emotes.cpp:520 src/input/pages/emotes.cpp:526 +#: src/input/pages/emotes.cpp:532 src/input/pages/emotes.cpp:538 +#: src/input/pages/emotes.cpp:544 src/input/pages/emotes.cpp:550 +#: src/input/pages/emotes.cpp:556 src/input/pages/emotes.cpp:562 +#: src/input/pages/emotes.cpp:568 src/input/pages/emotes.cpp:574 +#: src/input/pages/emotes.cpp:580 src/input/pages/emotes.cpp:586 +#: src/input/pages/emotes.cpp:592 src/input/pages/emotes.cpp:598 +#: src/input/pages/emotes.cpp:604 src/input/pages/emotes.cpp:610 +#: src/input/pages/emotes.cpp:616 src/input/pages/emotes.cpp:622 +#: src/input/pages/emotes.cpp:628 src/input/pages/emotes.cpp:634 +#: src/input/pages/emotes.cpp:640 src/input/pages/emotes.cpp:646 +#, c-format +msgid "Pet emote shortcut %d" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:31 +msgid "Move & selection" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:37 +msgid "Move Up" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:43 +msgid "Move Down" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:49 +msgid "Move Left" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:55 +msgid "Move Right" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:61 +msgid "Move Home" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:67 +msgid "Move End" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:73 +msgid "Page up" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:79 +msgid "Page down" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:97 +msgid "Select2" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:115 +msgid "Backspace" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:127 +msgid "Tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:133 +msgid "Mod" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/gui.cpp:139 +msgid "Ctrl" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:35 +msgid "Move Keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:41 +msgid "Move player up" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:47 +msgid "Move player down" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:53 +msgid "Move player left" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:59 +msgid "Move player right" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:65 +msgid "Move player forward" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:71 +msgid "Move pet up" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:77 +msgid "Move pet down" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:83 +msgid "Move pet left" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:89 +msgid "Move pet right" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:95 +msgid "Move homunculus to master" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:101 +msgid "Move mercenary to master" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:107 +msgid "Move to navigation point shortcuts" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/move.cpp:113 src/input/pages/move.cpp:119 +#: src/input/pages/move.cpp:125 src/input/pages/move.cpp:131 +#: src/input/pages/move.cpp:137 src/input/pages/move.cpp:143 +#: src/input/pages/move.cpp:149 src/input/pages/move.cpp:155 +#: src/input/pages/move.cpp:161 src/input/pages/move.cpp:167 +#: src/input/pages/move.cpp:173 src/input/pages/move.cpp:179 +#: src/input/pages/move.cpp:185 src/input/pages/move.cpp:191 +#: src/input/pages/move.cpp:197 src/input/pages/move.cpp:203 +#: src/input/pages/move.cpp:209 src/input/pages/move.cpp:215 +#: src/input/pages/move.cpp:221 src/input/pages/move.cpp:227 +#: src/input/pages/move.cpp:233 src/input/pages/move.cpp:239 +#: src/input/pages/move.cpp:245 src/input/pages/move.cpp:251 +#: src/input/pages/move.cpp:257 src/input/pages/move.cpp:263 +#: src/input/pages/move.cpp:269 src/input/pages/move.cpp:275 +#: src/input/pages/move.cpp:281 src/input/pages/move.cpp:287 +#: src/input/pages/move.cpp:293 src/input/pages/move.cpp:299 +#: src/input/pages/move.cpp:305 src/input/pages/move.cpp:311 +#: src/input/pages/move.cpp:317 src/input/pages/move.cpp:323 +#: src/input/pages/move.cpp:329 src/input/pages/move.cpp:335 +#: src/input/pages/move.cpp:341 src/input/pages/move.cpp:347 +#: src/input/pages/move.cpp:353 src/input/pages/move.cpp:359 +#: src/input/pages/move.cpp:365 src/input/pages/move.cpp:371 +#: src/input/pages/move.cpp:377 src/input/pages/move.cpp:383 +#: src/input/pages/move.cpp:389 src/input/pages/move.cpp:395 +#, c-format +msgid "Move to point Shortcut %d" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:34 +msgid "Input ignore" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:40 +msgid "Ignore input 1" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:46 +msgid "Ignore input 2" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:52 +msgid "Direction keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:58 +msgid "Player direct up" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:64 +msgid "Player direct down" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:70 +msgid "Player direct left" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:76 +msgid "Player direct right" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:82 +msgid "Pet direct up" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:88 +msgid "Pet direct down" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:94 +msgid "Pet direct left" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:100 +msgid "Pet direct right" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:112 +msgid "Crazy moves" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:118 +msgid "Change Crazy Move mode" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:124 +msgid "Quick Drop N Items from 0 slot" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:130 +msgid "Quick Drop N Items" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:136 +msgid "Switch Quick Drop Counter" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:142 +msgid "Quick heal target or self" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:148 +msgid "Heal the most injured player" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:154 +msgid "Use #itenplz spell" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:160 +msgid "Use magic attack" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:166 +msgid "Switch magic attack" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:172 +msgid "Switch pvp attack" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:178 +msgid "Change move type" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:184 +msgid "Change Attack Weapon Type" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:190 +msgid "Change Attack Type" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:196 +msgid "Change Follow mode" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:202 +msgid "Change Imitation mode" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:208 +msgid "Disable / Enable Game modifier keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:214 +msgid "On / Off audio" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:220 +msgid "Enable / Disable away mode" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:226 +msgid "Emulate right click from keyboard" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:232 +msgid "Toggle camera mode" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:238 +msgid "Toggle ipc mode" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:244 +msgid "Show information about position in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:250 +msgid "Show online players number in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:256 +msgid "Show onscreen keyboard" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:262 +msgid "Clean cached graphics" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:268 +msgid "Clean cached fonts" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:274 +msgid "Print visible players in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:280 +msgid "Print all visible beings in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:286 +msgid "Load shop items list from disk" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:292 +msgid "Save shop items list to disk" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:298 +msgid "Print debug cache info" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:304 +msgid "Undress selected player" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:310 +msgid "Quick disconnect from server" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:316 +msgid "Disable debug particle" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:322 +msgid "Create items (for gms)" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:328 +msgid "Print configured directories in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:334 +msgid "Print client uptime in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:340 +msgid "Dump debug information" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:346 +msgid "Crash client" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:352 +msgid "Dump graphics info into chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:358 +msgid "Dump tests info into chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:364 +msgid "Print OpenGL version in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:370 +msgid "Print enabled mods in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:376 +msgid "Dump environments into log" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:382 +msgid "Dump OpenGL state into log" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:389 +msgid "Test SDL font speed" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:396 +msgid "Upload main config" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:402 +msgid "Upload server config" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:414 +msgid "Fire your mercenary" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:420 +msgid "Pet ai start" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:426 +msgid "Pet ai stop" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:432 +msgid "Feed homunculus" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:438 +msgid "Feed pet" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:444 +msgid "Drop pet's loot" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:450 +msgid "Return pet to egg" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/other.cpp:456 +msgid "Unequip pet" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/outfits.cpp:35 +msgid "Outfits keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/outfits.cpp:41 +msgid "Wear outfit" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/outfits.cpp:53 +msgid "Copy Outfit to other outfit" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/outfits.cpp:59 +msgid "Copy outfit to chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/outfits.cpp:65 +msgid "Copy equipped to outfit" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/outfits.cpp:71 +msgid "Show hat in chat" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/outfits.cpp:77 +msgid "Outfits shortcuts" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/outfits.cpp:83 src/input/pages/outfits.cpp:89 +#: src/input/pages/outfits.cpp:95 src/input/pages/outfits.cpp:101 +#: src/input/pages/outfits.cpp:107 src/input/pages/outfits.cpp:113 +#: src/input/pages/outfits.cpp:119 src/input/pages/outfits.cpp:125 +#: src/input/pages/outfits.cpp:131 src/input/pages/outfits.cpp:137 +#: src/input/pages/outfits.cpp:143 src/input/pages/outfits.cpp:149 +#: src/input/pages/outfits.cpp:155 src/input/pages/outfits.cpp:161 +#: src/input/pages/outfits.cpp:167 src/input/pages/outfits.cpp:173 +#: src/input/pages/outfits.cpp:179 src/input/pages/outfits.cpp:185 +#: src/input/pages/outfits.cpp:191 src/input/pages/outfits.cpp:197 +#: src/input/pages/outfits.cpp:203 src/input/pages/outfits.cpp:209 +#: src/input/pages/outfits.cpp:215 src/input/pages/outfits.cpp:221 +#: src/input/pages/outfits.cpp:227 src/input/pages/outfits.cpp:233 +#: src/input/pages/outfits.cpp:239 src/input/pages/outfits.cpp:245 +#: src/input/pages/outfits.cpp:251 src/input/pages/outfits.cpp:257 +#: src/input/pages/outfits.cpp:263 src/input/pages/outfits.cpp:269 +#: src/input/pages/outfits.cpp:275 src/input/pages/outfits.cpp:281 +#: src/input/pages/outfits.cpp:287 src/input/pages/outfits.cpp:293 +#: src/input/pages/outfits.cpp:299 src/input/pages/outfits.cpp:305 +#: src/input/pages/outfits.cpp:311 src/input/pages/outfits.cpp:317 +#: src/input/pages/outfits.cpp:323 src/input/pages/outfits.cpp:329 +#: src/input/pages/outfits.cpp:335 src/input/pages/outfits.cpp:341 +#: src/input/pages/outfits.cpp:347 src/input/pages/outfits.cpp:353 +#: src/input/pages/outfits.cpp:359 src/input/pages/outfits.cpp:365 +#, c-format +msgid "Outfit Shortcut %d" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/shortcuts.cpp:35 +msgid "Shortcuts modifiers keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/shortcuts.cpp:41 +msgid "Item Shortcuts Key" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/shortcuts.cpp:47 +msgid "Shortcuts keys" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/shortcuts.cpp:53 src/input/pages/shortcuts.cpp:59 +#: src/input/pages/shortcuts.cpp:65 src/input/pages/shortcuts.cpp:71 +#: src/input/pages/shortcuts.cpp:77 src/input/pages/shortcuts.cpp:83 +#: src/input/pages/shortcuts.cpp:89 src/input/pages/shortcuts.cpp:95 +#: src/input/pages/shortcuts.cpp:101 src/input/pages/shortcuts.cpp:107 +#: src/input/pages/shortcuts.cpp:113 src/input/pages/shortcuts.cpp:119 +#: src/input/pages/shortcuts.cpp:125 src/input/pages/shortcuts.cpp:131 +#: src/input/pages/shortcuts.cpp:137 src/input/pages/shortcuts.cpp:143 +#: src/input/pages/shortcuts.cpp:149 src/input/pages/shortcuts.cpp:155 +#: src/input/pages/shortcuts.cpp:161 src/input/pages/shortcuts.cpp:167 +#, c-format +msgid "Item Shortcut %d" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:40 +msgid "Show Windows Menu" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:46 +msgid "Hide Windows" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:52 +msgid "About Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:58 +msgid "Bank Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:64 +msgid "Help Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:70 +msgid "Server Info Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:76 +msgid "Status Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:82 +msgid "Inventory Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:88 +msgid "Equipment Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:94 +msgid "Skill Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:100 +msgid "Minimap Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:106 +msgid "Chat Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:112 +msgid "Item Shortcut Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:118 +msgid "Setup Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:124 +msgid "Debug Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:130 +msgid "Social Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:136 +msgid "Emote Shortcut Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:142 +msgid "Outfits Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:148 +msgid "Shop Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:154 +msgid "Quick drop Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:160 +msgid "Kill Stats Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:166 +msgid "Commands Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:172 +msgid "Who Is Online Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:178 +msgid "Did you know Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:184 +msgid "Quests Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:190 +msgid "Updates Window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:196 +msgid "Cart window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:202 +msgid "Quick settings window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:208 +msgid "Clan window" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:220 +msgid "Previous Social Tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:226 +msgid "Next Social Tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:232 +msgid "Previous Shortcuts tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:238 +msgid "Next Shortcuts tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:244 +msgid "Previous Commands tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:250 +msgid "Next Commands tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:256 +msgid "Previous inventory tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:262 +msgid "Next inventory tab" +msgstr "" + +#. TRANSLATORS: input action name +#: src/input/pages/windows.cpp:268 +msgid "Clear drops window" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:50 +msgid "Access denied. Most likely, there are too many players on this server." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:55 +msgid "Cannot use this ID." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:59 +msgid "Unknown char-server failure." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:75 +msgid "Failed to create character. Most likely the name is already taken." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:80 src/net/ea/loginrecv.cpp:117 +#: src/net/eathena/loginrecv.cpp:115 +msgid "Wrong name." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:84 +msgid "Incorrect stats." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:88 +msgid "Incorrect hair." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:92 +msgid "Incorrect slot." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:96 +msgid "Incorrect race." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/charserverrecv.cpp:100 +msgid "Incorrect look." +msgstr "" + +#. TRANSLATORS: info message +#: src/net/ea/charserverrecv.cpp:132 +msgid "Character deleted." +msgstr "" + +#. TRANSLATORS: chat message +#: src/net/ea/chatrecv.cpp:94 +#, c-format +msgid "Whisper could not be sent, %s is offline." +msgstr "" + +#. TRANSLATORS: chat message +#: src/net/ea/chatrecv.cpp:104 +#, c-format +msgid "Whisper could not be sent, ignored by %s." +msgstr "" + +#. TRANSLATORS: chat message +#: src/net/ea/chatrecv.cpp:114 +msgid "Whisper could not be sent, you ignored by all players." +msgstr "" + +#. TRANSLATORS: error header +#: src/net/ea/gamerecv.cpp:67 +msgid "Game" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/gamerecv.cpp:69 +msgid "Request to quit denied!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:76 src/net/eathena/loginrecv.cpp:69 +msgid "Unregistered ID." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:80 src/net/eathena/loginrecv.cpp:73 +msgid "Wrong password." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:85 src/net/eathena/loginrecv.cpp:78 +msgid "Account expired." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:89 src/net/eathena/loginrecv.cpp:82 +msgid "Rejected from server." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:93 src/net/eathena/loginrecv.cpp:86 +msgid "" +"You have been permanently banned from the game. Please contact the GM team." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:98 src/net/eathena/loginrecv.cpp:91 +msgid "" +"Client too old or wrong server type.\n" +"Please update client on http://manaplus.org" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:103 src/net/eathena/loginrecv.cpp:96 +#, c-format +msgid "" +"You have been temporarily banned from the game until %s.\n" +"Please contact the GM team via the forums." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:109 src/net/eathena/loginrecv.cpp:105 +msgid "Server overpopulated." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:113 src/net/eathena/loginrecv.cpp:110 +msgid "This user name is already taken." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:125 src/net/eathena/loginrecv.cpp:125 +msgid "Username permanently erased." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/loginrecv.cpp:129 src/net/eathena/loginrecv.cpp:129 +#: src/net/eathena/loginrecv.cpp:235 src/net/tmwa/loginrecv.cpp:130 +msgid "Unknown error." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/network.cpp:111 +msgid "Empty address given to Network::connect()!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/network.cpp:216 +msgid "Unable to resolve host \"" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/ea/network.cpp:297 +msgid "Connection to server terminated. " +msgstr "" + +#. TRANSLATORS: error message +#. TRANSLATORS: char rename error +#: src/net/eathena/charserverrecv.cpp:414 +#: src/net/eathena/charserverrecv.cpp:462 +msgid "Character rename error." +msgstr "" + +#. TRANSLATORS: info message +#: src/net/eathena/charserverrecv.cpp:437 +msgid "Character renamed." +msgstr "" + +#. TRANSLATORS: char rename error +#: src/net/eathena/charserverrecv.cpp:453 +msgid "Rename not allowed." +msgstr "" + +#. TRANSLATORS: char rename error +#: src/net/eathena/charserverrecv.cpp:457 +msgid "New name is not set." +msgstr "" + +#. TRANSLATORS: char rename error +#: src/net/eathena/charserverrecv.cpp:466 +msgid "Character not found." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/charserverrecv.cpp:500 src/net/tmwa/charserverrecv.cpp:293 +msgid "Failed to delete character." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/chatrecv.cpp:138 +msgid "Can't cast skill in this area." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/chatrecv.cpp:142 +msgid "Can't use item in this area." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/chatrecv.cpp:146 +msgid "Can't equip. Wrong level." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/chatrecv.cpp:150 +msgid "Can't use. Wrong level." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/chatrecv.cpp:154 +msgid "Work in progress." +msgstr "" + +#. TRANSLATORS: chat message +#: src/net/eathena/chatrecv.cpp:380 +#, c-format +msgid "Message could not be sent, channel %s is not exists." +msgstr "" + +#. TRANSLATORS: chat message +#: src/net/eathena/chatrecv.cpp:506 +#, c-format +msgid "Can't open channel. Channel %s is not exists." +msgstr "" + +#. TRANSLATORS: adopt child message +#: src/net/eathena/familyrecv.cpp:75 +msgid "Request parents" +msgstr "" + +#. TRANSLATORS: adopt child message +#: src/net/eathena/familyrecv.cpp:77 +#, c-format +msgid "Do you accept %s and %s as parents?" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalhandler.cpp:227 src/net/tmwa/generalhandler.cpp:230 +msgid "Got disconnected from server!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:50 src/net/tmwa/generalrecv.cpp:50 +msgid "Authentication failed." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:54 src/net/tmwa/generalrecv.cpp:54 +msgid "No servers available." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:60 src/net/tmwa/generalrecv.cpp:60 +msgid "Someone else is trying to use this account." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:66 src/net/tmwa/generalrecv.cpp:66 +msgid "This account is already logged in." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:71 src/net/tmwa/generalrecv.cpp:71 +msgid "Speed hack detected." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:75 +msgid "Server full." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:79 +msgid "Sorry, you are underaged." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:83 src/net/tmwa/generalrecv.cpp:75 +msgid "Duplicated login." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:87 +msgid "To many connections from same ip." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:91 +msgid "Not paid for this time." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:95 +msgid "Pay suspended." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:99 +msgid "Pay changed." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:103 +msgid "Pay wrong ip." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:107 +msgid "Pay game room." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:111 +msgid "Disconnect forced by GM." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:116 +msgid "Ban japan refuse." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:120 +msgid "Remained other account." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:124 +msgid "Ip unfair." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:128 +msgid "Ip count all." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:132 +msgid "Ip count." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:137 +msgid "Memory." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:141 +msgid "Han valid." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:145 +msgid "Ip limited access." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:149 +msgid "Over characters list." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:153 +msgid "Ip blocked." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:157 +msgid "Invalid password count." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:161 +msgid "Not allowed race." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:165 +msgid "Access restricted in hours 00:00 to 06:00." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:169 +msgid "You was banned." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:173 src/net/tmwa/generalrecv.cpp:79 +msgid "Unknown connection error." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/generalrecv.cpp:184 +msgid "Map not found" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:130 +#, c-format +msgid "Guild name: %s" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:138 +#, c-format +msgid "Guild master: %s" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:145 +#, c-format +msgid "Guild level: %d" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:150 +#, c-format +msgid "Online members: %d" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:155 +#, c-format +msgid "Max members: %d" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:160 +#, c-format +msgid "Average level: %d" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:165 +#, c-format +msgid "Guild exp: %d" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:170 +#, c-format +msgid "Guild next exp: %d" +msgstr "" + +#. TRANSLATORS: guild info message +#: src/net/eathena/guildrecv.cpp:175 +#, c-format +msgid "Guild castle: %s" +msgstr "" + +#. TRANSLATORS: notification message +#: src/net/eathena/inventoryrecv.cpp:878 +#, c-format +msgid "Left %s rental time for item %s." +msgstr "" + +#. TRANSLATORS: unknown item +#. TRANSLATORS: unknown item message +#. TRANSLATORS: unknown item name +#. TRANSLATORS: item name +#: src/net/eathena/inventoryrecv.cpp:1247 +#: src/net/eathena/inventoryrecv.cpp:1382 src/net/eathena/mail2recv.cpp:204 +#: src/resources/db/itemdb.cpp:171 +msgid "Unknown item" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/loginrecv.cpp:223 src/net/tmwa/loginrecv.cpp:118 +msgid "Account was not found. Please re-login." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/loginrecv.cpp:227 src/net/tmwa/loginrecv.cpp:122 +msgid "Old password incorrect." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/loginrecv.cpp:231 src/net/tmwa/loginrecv.cpp:126 +msgid "New password too short." +msgstr "" + +#. TRANSLATORS: mail message notification +#: src/net/eathena/mailrecv.cpp:203 +#, c-format +msgid "You have new mail from %s with subject %s" +msgstr "" + +#. TRANSLATORS: player killed message +#: src/net/eathena/playerrecv.cpp:509 +msgid "You were killed by unknown source." +msgstr "" + +#. TRANSLATORS: skill error message +#: src/net/eathena/skillrecv.cpp:306 +#, c-format +msgid "Unknown skill error: %d" +msgstr "" + +#. TRANSLATORS: skill error message +#: src/net/eathena/skillrecv.cpp:319 +#, c-format +msgid "Unknown skill error: %d." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:328 src/net/tmwa/skillrecv.cpp:146 +msgid "You have not yet reached a high enough lvl!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:332 src/net/tmwa/skillrecv.cpp:150 +msgid "Insufficient HP!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:336 src/net/tmwa/skillrecv.cpp:154 +msgid "Insufficient SP!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:340 src/net/tmwa/skillrecv.cpp:158 +msgid "You have no memos!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:344 src/net/tmwa/skillrecv.cpp:162 +msgid "You cannot do that right now!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:348 src/net/tmwa/skillrecv.cpp:166 +msgid "Seems you need more money... ;-)" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:352 src/net/tmwa/skillrecv.cpp:170 +msgid "You cannot use this skill with that kind of weapon!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:357 src/net/tmwa/skillrecv.cpp:175 +msgid "You need another red gem!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:361 src/net/tmwa/skillrecv.cpp:179 +msgid "You need another blue gem!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:365 src/net/tmwa/skillrecv.cpp:183 +msgid "You're carrying to much to do this!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:369 +msgid "Fail summon." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:373 +msgid "Need spirits." +msgstr "" + +#. TRANSLATORS: skill error message +#: src/net/eathena/skillrecv.cpp:382 +#, c-format +msgid "Need equipment %s." +msgstr "" + +#. TRANSLATORS: skill error message +#: src/net/eathena/skillrecv.cpp:388 +#, c-format +msgid "Need equipment %s and amount %d" +msgstr "" + +#. TRANSLATORS: skill error message +#: src/net/eathena/skillrecv.cpp:401 +#, c-format +msgid "Need item %s." +msgstr "" + +#. TRANSLATORS: skill error message +#: src/net/eathena/skillrecv.cpp:407 +#, c-format +msgid "Need item %s and amount %d" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/eathena/skillrecv.cpp:416 +msgid "Skill failed!" +msgstr "" + +#. TRANSLATORS: warp select window name +#: src/net/eathena/skillrecv.cpp:434 src/net/eathena/skillrecv.cpp:452 +msgid "Select warp target" +msgstr "" + +#. TRANSLATORS: vending sold item message +#: src/net/eathena/vendingrecv.cpp:267 +#, c-format +msgid "Sold item %s amount %d. You got: %s" +msgstr "" + +#. TRANSLATORS: vending sold item message +#: src/net/eathena/vendingrecv.cpp:275 +#, c-format +msgid "Sold item %s amount %d" +msgstr "" + +#. TRANSLATORS: trade header +#: src/net/ea/traderecv.cpp:81 +#, c-format +msgid "Trade: You and %s" +msgstr "" + +#. TRANSLATORS: trade message +#: src/net/ea/traderecv.cpp:167 +#, c-format +msgid "%s wants to trade with you, do you accept?" +msgstr "" + +#. TRANSLATORS: playe stat +#: src/net/tmwa/charserverhandler.cpp:148 +msgid "Strength:" +msgstr "" + +#. TRANSLATORS: playe stat +#: src/net/tmwa/charserverhandler.cpp:150 +msgid "Agility:" +msgstr "" + +#. TRANSLATORS: playe stat +#: src/net/tmwa/charserverhandler.cpp:152 +msgid "Vitality:" +msgstr "" + +#. TRANSLATORS: playe stat +#: src/net/tmwa/charserverhandler.cpp:154 +msgid "Intelligence:" +msgstr "" + +#. TRANSLATORS: playe stat +#: src/net/tmwa/charserverhandler.cpp:156 +msgid "Dexterity:" +msgstr "" + +#. TRANSLATORS: playe stat +#: src/net/tmwa/charserverhandler.cpp:158 +msgid "Luck:" +msgstr "" + +#. TRANSLATORS: message about spam player +#: src/net/tmwa/chatrecv.cpp:262 +#, c-format +msgid "Detected spam from: %s" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:113 +msgid "Trade failed!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:117 +msgid "Emote failed!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:121 +msgid "Sit failed!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:125 +msgid "Chat creating failed!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:129 +msgid "Could not join party!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:133 +msgid "Cannot shout!" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:187 +msgid "Huh? What's that?" +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:198 +msgid "Warp failed..." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:202 +msgid "Could not steal anything..." +msgstr "" + +#. TRANSLATORS: error message +#: src/net/tmwa/skillrecv.cpp:206 +msgid "Poison had no effect..." +msgstr "" + +#. TRANSLATORS: dialog caption +#. TRANSLATORS: error header +#: src/pincodemanager.cpp:79 src/pincodemanager.cpp:144 +#: src/pincodemanager.cpp:203 +msgid "Pincode" +msgstr "" + +#. TRANSLATORS: dialog label +#: src/pincodemanager.cpp:81 +msgid "Enter pincode" +msgstr "" + +#. TRANSLATORS: dialog caption +#: src/pincodemanager.cpp:92 src/pincodemanager.cpp:128 +msgid "New pincode" +msgstr "" + +#. TRANSLATORS: dialog label +#: src/pincodemanager.cpp:94 src/pincodemanager.cpp:174 +msgid "Enter new pincode" +msgstr "" + +#. TRANSLATORS: dialog caption +#: src/pincodemanager.cpp:106 src/pincodemanager.cpp:172 +#: src/pincodemanager.cpp:186 +msgid "Change pincode" +msgstr "" + +#. TRANSLATORS: dialog label +#: src/pincodemanager.cpp:108 +msgid "Enter old pincode" +msgstr "" + +#. TRANSLATORS: dialog label +#: src/pincodemanager.cpp:130 src/pincodemanager.cpp:188 +msgid "Confirm new pincode" +msgstr "" + +#. TRANSLATORS: error message +#: src/pincodemanager.cpp:146 src/pincodemanager.cpp:205 +msgid "Wrong pincode confirmation!" +msgstr "" + +#. TRANSLATORS: theme tab quick button +#: src/progs/dyecmd/client.cpp:562 src/progs/manaplus/client.cpp:928 +msgid "About" +msgstr "" + +#. TRANSLATORS: command line help +#: src/progs/dyecmd/dyemain.cpp:62 +msgid "dyecmd srcfile dyestring dstfile" +msgstr "" + +#. TRANSLATORS: command line help +#: src/progs/dyecmd/dyemain.cpp:64 +msgid "or" +msgstr "" + +#. TRANSLATORS: command line help +#: src/progs/dyecmd/dyemain.cpp:66 +msgid "dyecmd srcdyestring dstfile" +msgstr "" + +#. TRANSLATORS: file uploaded message +#: src/progs/manaplus/actions/actions.cpp:175 +msgid "File uploaded" +msgstr "" + +#. TRANSLATORS: clear graphics command message +#. TRANSLATORS: clear fonts cache message +#: src/progs/manaplus/actions/actions.cpp:1113 +#: src/progs/manaplus/actions/actions.cpp:1128 +msgid "Cache cleared" +msgstr "" + +#. TRANSLATORS: uptime command +#: src/progs/manaplus/actions/actions.cpp:1326 +#: src/progs/manaplus/actions/actions.cpp:1334 +#, c-format +msgid "Client uptime: %s" +msgstr "" + +#. TRANSLATORS: dump command +#: src/progs/manaplus/actions/actions.cpp:1398 +#: src/progs/manaplus/actions/actions.cpp:1407 +msgid "Resource images:" +msgstr "" + +#. TRANSLATORS: dump command +#: src/progs/manaplus/actions/actions.cpp:1401 +#: src/progs/manaplus/actions/actions.cpp:1413 +msgid "Orphaned resource images:" +msgstr "" + +#. TRANSLATORS: dump environment command +#: src/progs/manaplus/actions/actions.cpp:1512 +msgid "Environment variables dumped" +msgstr "" + +#. TRANSLATORS: upload config chat message +#: src/progs/manaplus/actions/actions.cpp:1651 +msgid "Config uploaded to:" +msgstr "" + +#. TRANSLATORS: upload config chat message +#: src/progs/manaplus/actions/actions.cpp:1661 +msgid "Server config Uploaded to:" +msgstr "" + +#. TRANSLATORS: upload log chat message +#: src/progs/manaplus/actions/actions.cpp:1671 +msgid "Log uploaded to:" +msgstr "" + +#. TRANSLATORS: last seen disabled warning +#: src/progs/manaplus/actions/actions.cpp:1955 +msgid "" +"Last seen disabled. Enable in players / collect players ID and seen log." +msgstr "" + +#. TRANSLATORS: last seen error +#: src/progs/manaplus/actions/actions.cpp:1976 +msgid "You have never seen this nick." +msgstr "" + +#. TRANSLATORS: last seen message +#: src/progs/manaplus/actions/actions.cpp:1984 +#, c-format +msgid "Last seen for %s: %s" +msgstr "" + +#. TRANSLATORS: last seen error +#: src/progs/manaplus/actions/actions.cpp:1995 +msgid "You have not seen this nick before." +msgstr "" + +#. TRANSLATORS: whisper send +#: src/progs/manaplus/actions/chat.cpp:279 +msgid "Cannot send empty whisper or channel message!" +msgstr "" + +#. TRANSLATORS: new whisper or channel query +#: src/progs/manaplus/actions/chat.cpp:334 +#, c-format +msgid "Cannot create a whisper tab \"%s\"! It probably already exists." +msgstr "" + +#. TRANSLATORS: party invite message +#. TRANSLATORS: guild invite message +#. TRANSLATORS: party kick message +#. TRANSLATORS: change relation +#: src/progs/manaplus/actions/chat.cpp:407 +#: src/progs/manaplus/actions/chat.cpp:443 +#: src/progs/manaplus/actions/chat.cpp:451 +#: src/progs/manaplus/actions/chat.cpp:534 +#: src/progs/manaplus/actions/chat.cpp:571 +#: src/progs/manaplus/actions/commands.cpp:108 +msgid "Please specify a name." +msgstr "" + +#. TRANSLATORS: message from toggle chat command +#: src/progs/manaplus/actions/chat.cpp:474 +msgid "Return toggles chat." +msgstr "" + +#: src/progs/manaplus/actions/chat.cpp:474 +msgid "Message closes chat." +msgstr "" + +#. TRANSLATORS: message from toggle chat command +#: src/progs/manaplus/actions/chat.cpp:488 +msgid "Return now toggles chat." +msgstr "" + +#. TRANSLATORS: message from toggle chat command +#: src/progs/manaplus/actions/chat.cpp:500 +msgid "Message now closes chat." +msgstr "" + +#. TRANSLATORS: equipped hat chat message +#: src/progs/manaplus/actions/chat.cpp:661 +msgid "no hat equipped." +msgstr "" + +#. TRANSLATORS: equipped hat chat message +#: src/progs/manaplus/actions/chat.cpp:667 +#, c-format +msgid "equipped hat %s." +msgstr "" + +#. TRANSLATORS: dialog header +#: src/progs/manaplus/actions/chat.cpp:695 +msgid "Guild notice" +msgstr "" + +#. TRANSLATORS: translation error message +#: src/progs/manaplus/actions/chat.cpp:747 +#, c-format +msgid "No translation found for string: %s" +msgstr "" + +#. TRANSLATORS: change relation +#: src/progs/manaplus/actions/commands.cpp:158 +#, c-format +msgid "Player already %s!" +msgstr "" + +#. TRANSLATORS: change relation +#: src/progs/manaplus/actions/commands.cpp:174 +#, c-format +msgid "Player successfully %s!" +msgstr "" + +#. TRANSLATORS: change relation +#: src/progs/manaplus/actions/commands.cpp:176 +#, c-format +msgid "Player could not be %s!" +msgstr "" + +#. TRANSLATORS: unignore command +#: src/progs/manaplus/actions/commands.cpp:211 +msgid "Player wasn't ignored!" +msgstr "" + +#. TRANSLATORS: unignore command +#: src/progs/manaplus/actions/commands.cpp:222 +msgid "Player no longer ignored!" +msgstr "" + +#. TRANSLATORS: unignore command +#: src/progs/manaplus/actions/commands.cpp:224 +msgid "Player could not be unignored!" +msgstr "" + +#. TRANSLATORS: erase command +#: src/progs/manaplus/actions/commands.cpp:239 +msgid "Player already erased!" +msgstr "" + +#. TRANSLATORS: erase command +#: src/progs/manaplus/actions/commands.cpp:251 +msgid "Player no longer erased!" +msgstr "" + +#. TRANSLATORS: erase command +#: src/progs/manaplus/actions/commands.cpp:253 +msgid "Player could not be erased!" +msgstr "" + +#. TRANSLATORS: adding friend command +#: src/progs/manaplus/actions/commands.cpp:260 +msgid "friend" +msgstr "" + +#. TRANSLATORS: disregard command +#: src/progs/manaplus/actions/commands.cpp:267 +msgid "disregarded" +msgstr "" + +#. TRANSLATORS: neutral command +#: src/progs/manaplus/actions/commands.cpp:274 +msgid "neutral" +msgstr "" + +#. TRANSLATORS: blacklist command +#: src/progs/manaplus/actions/commands.cpp:281 +msgid "blacklisted" +msgstr "" + +#. TRANSLATORS: enemy command +#: src/progs/manaplus/actions/commands.cpp:288 +msgid "enemy" +msgstr "" + +#. TRANSLATORS: quick mail message caption +#: src/progs/manaplus/actions/commands.cpp:590 +#: src/progs/manaplus/actions/commands.cpp:597 +msgid "Quick message" +msgstr "" + +#. TRANSLATORS: dialog header +#: src/progs/manaplus/actions/commands.cpp:947 +msgid "Rename your homun" +msgstr "" + +#. TRANSLATORS: result from command /confget +#: src/progs/manaplus/actions/commands.cpp:1125 +#, c-format +msgid "Config value: %s" +msgstr "" + +#. TRANSLATORS: result from command /serverconfget +#: src/progs/manaplus/actions/commands.cpp:1138 +#, c-format +msgid "Server config value: %s" +msgstr "" + +#. TRANSLATORS: chat message +#. TRANSLATORS: notification message +#: src/progs/manaplus/actions/commands.cpp:1798 +#: src/resources/notifications.h:212 +msgid "Item sharing enabled." +msgstr "" + +#. TRANSLATORS: chat message +#. TRANSLATORS: notification message +#: src/progs/manaplus/actions/commands.cpp:1805 +#: src/resources/notifications.h:216 +msgid "Item sharing disabled." +msgstr "" + +#. TRANSLATORS: chat message +#. TRANSLATORS: notification message +#: src/progs/manaplus/actions/commands.cpp:1812 +#: src/resources/notifications.h:220 +msgid "Item sharing not possible." +msgstr "" + +#. TRANSLATORS: chat message +#: src/progs/manaplus/actions/commands.cpp:1819 +msgid "Item sharing unknown." +msgstr "" + +#. TRANSLATORS: chat message +#. TRANSLATORS: notification message +#: src/progs/manaplus/actions/commands.cpp:1874 +#: src/resources/notifications.h:200 +msgid "Experience sharing enabled." +msgstr "" + +#. TRANSLATORS: chat message +#. TRANSLATORS: notification message +#: src/progs/manaplus/actions/commands.cpp:1881 +#: src/resources/notifications.h:204 +msgid "Experience sharing disabled." +msgstr "" + +#. TRANSLATORS: chat message +#. TRANSLATORS: notification message +#: src/progs/manaplus/actions/commands.cpp:1888 +#: src/resources/notifications.h:208 +msgid "Experience sharing not possible." +msgstr "" + +#. TRANSLATORS: chat message +#: src/progs/manaplus/actions/commands.cpp:1895 +msgid "Experience sharing unknown." +msgstr "" + +#. TRANSLATORS: chat message +#: src/progs/manaplus/actions/commands.cpp:1950 +msgid "Auto item sharing enabled." +msgstr "" + +#. TRANSLATORS: chat message +#: src/progs/manaplus/actions/commands.cpp:1957 +msgid "Auto item sharing disabled." +msgstr "" + +#. TRANSLATORS: chat message +#: src/progs/manaplus/actions/commands.cpp:1964 +msgid "Auto item sharing not possible." +msgstr "" + +#. TRANSLATORS: chat message +#: src/progs/manaplus/actions/commands.cpp:1971 +msgid "Auto item sharing unknown." +msgstr "" + +#. TRANSLATORS: dialog header +#: src/progs/manaplus/actions/pets.cpp:87 +msgid "Rename your pet" +msgstr "" + +#. TRANSLATORS: disable trades message +#: src/progs/manaplus/actions/statusbar.cpp:180 +msgid "Ignoring incoming trade requests" +msgstr "" + +#. TRANSLATORS: enable trades message +#: src/progs/manaplus/actions/statusbar.cpp:192 +msgid "Accepting incoming trade requests" +msgstr "" + +#. TRANSLATORS: connection dialog header +#: src/progs/manaplus/client.cpp:1139 +msgid "Connecting to server" +msgstr "" + +#. TRANSLATORS: connection dialog header +#: src/progs/manaplus/client.cpp:1198 src/unittests/gui/windowmanager.cc:830 +msgid "Logging in" +msgstr "" + +#. TRANSLATORS: connection dialog header +#: src/progs/manaplus/client.cpp:1248 +msgid "Entering game world" +msgstr "" + +#. TRANSLATORS: connection dialog header +#: src/progs/manaplus/client.cpp:1309 +msgid "Requesting characters" +msgstr "" + +#. TRANSLATORS: connection dialog header +#: src/progs/manaplus/client.cpp:1353 +msgid "Connecting to the game server" +msgstr "" + +#. TRANSLATORS: connection dialog header +#: src/progs/manaplus/client.cpp:1365 +msgid "Changing game servers" +msgstr "" + +#. TRANSLATORS: connection dialog header +#: src/progs/manaplus/client.cpp:1461 +msgid "Requesting registration details" +msgstr "" + +#. TRANSLATORS: password change message header +#: src/progs/manaplus/client.cpp:1508 +msgid "Password Change" +msgstr "" + +#. TRANSLATORS: password change message text +#: src/progs/manaplus/client.cpp:1510 +msgid "Password changed successfully!" +msgstr "" + +#. TRANSLATORS: email change message header +#: src/progs/manaplus/client.cpp:1543 +msgid "Email Change" +msgstr "" + +#. TRANSLATORS: email change message text +#: src/progs/manaplus/client.cpp:1545 +msgid "Email changed successfully!" +msgstr "" + +#. TRANSLATORS: draw backend +#: src/render/rendererslistsdl2.h:45 src/render/rendererslistsdl2.h:80 +#: src/render/rendererslistsdl2.h:120 src/render/rendererslistsdl2.h:163 +#: src/render/rendererslistsdl.h:48 src/render/rendererslistsdl.h:80 +#: src/render/rendererslistsdl.h:117 src/render/rendererslistsdl.h:157 +msgid "Software" +msgstr "" + +#. TRANSLATORS: draw backend +#: src/render/rendererslistsdl2.h:47 src/render/rendererslistsdl2.h:82 +#: src/render/rendererslistsdl2.h:122 src/render/rendererslistsdl2.h:165 +msgid "SDL2 default" +msgstr "" + +#. TRANSLATORS: draw backend +#: src/render/rendererslistsdl2.h:49 src/render/rendererslistsdl2.h:128 +#: src/render/rendererslistsdl.h:50 src/render/rendererslistsdl.h:123 +msgid "Mobile OpenGL ES" +msgstr "" + +#. TRANSLATORS: draw backend +#: src/render/rendererslistsdl2.h:84 src/render/rendererslistsdl2.h:126 +#: src/render/rendererslistsdl.h:82 src/render/rendererslistsdl.h:121 +msgid "Safe OpenGL" +msgstr "" + +#. TRANSLATORS: draw backend +#: src/render/rendererslistsdl2.h:86 src/render/rendererslistsdl2.h:132 +#: src/render/rendererslistsdl.h:84 src/render/rendererslistsdl.h:127 +msgid "Mobile OpenGL ES 2" +msgstr "" + +#. TRANSLATORS: draw backend +#: src/render/rendererslistsdl2.h:124 src/render/rendererslistsdl.h:119 +msgid "Normal OpenGL" +msgstr "" + +#. TRANSLATORS: draw backend +#: src/render/rendererslistsdl2.h:130 src/render/rendererslistsdl.h:125 +msgid "Modern OpenGL" +msgstr "" + +#. TRANSLATORS: being info default name +#. TRANSLATORS: unknown info name +#. TRANSLATORS: unknown clan name +#. TRANSLATORS: unknown info name +#. TRANSLATORS: item info name +#. TRANSLATORS: unknown info name +#. TRANSLATORS: being info default name +#: src/resources/beinginfo.cpp:63 src/resources/db/avatardb.cpp:95 +#: src/resources/db/clandb.cpp:102 src/resources/db/homunculusdb.cpp:99 +#: src/resources/db/itemdb.cpp:414 src/resources/db/itemdb.cpp:418 +#: src/resources/db/mercenarydb.cpp:101 src/resources/db/moddb.cpp:80 +#: src/resources/db/monsterdb.cpp:103 src/resources/modinfo.cpp:29 +msgid "unnamed" +msgstr "" + +#. TRANSLATORS: unknown info name +#: src/resources/db/petdb.cpp:103 +msgid "pet" +msgstr "" + +#. TRANSLATORS: unknown info name +#: src/resources/db/skillunitdb.cpp:102 +msgid "skill" +msgstr "" + +#. TRANSLATORS: player stat +#: src/resources/db/statdb.cpp:48 +msgid "Strength" +msgstr "" + +#. TRANSLATORS: player stat +#: src/resources/db/statdb.cpp:52 +msgid "Agility" +msgstr "" + +#. TRANSLATORS: player stat +#: src/resources/db/statdb.cpp:56 +msgid "Vitality" +msgstr "" + +#. TRANSLATORS: player stat +#: src/resources/db/statdb.cpp:60 +msgid "Intelligence" +msgstr "" + +#. TRANSLATORS: player stat +#: src/resources/db/statdb.cpp:64 +msgid "Dexterity" +msgstr "" + +#. TRANSLATORS: player stat +#: src/resources/db/statdb.cpp:68 +msgid "Luck" +msgstr "" + +#. TRANSLATORS: stats page name +#: src/resources/db/statdb.cpp:203 +msgid "Extended" +msgstr "" + +#. TRANSLATORS: inventory type name +#: src/resources/inventory/inventory.cpp:370 +msgid "Npc" +msgstr "" + +#. TRANSLATORS: memory usage chat message +#: src/resources/memorymanager.cpp:95 +#, c-format +msgid "Calculated memory usage: %d" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:40 +msgid "Thanks for buying." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:44 +msgid "Unable to buy." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:48 +msgid "Unable to buy. You don't have enough money." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:52 +msgid "Unable to buy. It is too heavy." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:56 +msgid "Unable to buy. You have too many items." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:60 +msgid "Nothing to sell." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:64 +msgid "Thanks for selling." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:68 +msgid "Unable to sell." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:72 +msgid "Unable to sell while trading." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:76 +msgid "Unable to sell unsellable item." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:80 +#, c-format +msgid "Online users: %d" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:84 +msgid "Guild created." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:88 +msgid "You are already in a guild." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:92 +msgid "Emperium check failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:96 +msgid "Unknown server response." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:100 +msgid "You have left the guild." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:104 +msgid "Could not invite user to guild." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:108 +msgid "User rejected guild invite." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:112 +msgid "User is now part of your guild." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:116 +msgid "Your guild is full." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:120 +msgid "Unknown guild invite response." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:124 +#, c-format +msgid "%s has left your guild." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:128 +msgid "You were kicked from guild." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:132 +#, c-format +msgid "%s has been kicked from your guild." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:136 +msgid "Failed to use item." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:140 +msgid "Unable to equip." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:144 +msgid "Unable to equip because you have wrong level." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:148 +msgid "Unable to unequip." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:152 +msgid "Couldn't create party." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:156 +msgid "Party successfully created." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:160 +msgid "You have left the party." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:164 +msgid "You can't leave party on this map." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:168 +msgid "You were kicked from party." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:172 +msgid "You can't be kicked from party on this map." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:176 +#, c-format +msgid "%s has joined your party." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:180 +#, c-format +msgid "%s is already a member of a party." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:184 +#, c-format +msgid "%s refused your invitation." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:188 +#, c-format +msgid "%s is now a member of your party." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:192 +#, c-format +msgid "%s can't join your party because party is full." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:196 +#, c-format +msgid "QQQ Unknown invite response for %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:224 +#, c-format +msgid "%s has left your party." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:228 src/resources/notifications.h:236 +#, c-format +msgid "%s can't be kicked from party on this map." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:232 +#, c-format +msgid "%s has kicked from your party." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:240 +#, c-format +msgid "An unknown member tried to say: %s" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:244 +#, c-format +msgid "%s is not in your party!" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:248 +#, c-format +msgid "You picked up %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:252 +#, c-format +msgid "You spent %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:256 +msgid "Cannot raise skill!" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:260 +msgid "Equip ammunition first." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:264 +#, c-format +msgid "Trading with %s isn't possible. Trade partner is too far away." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:269 +#, c-format +msgid "Trading with %s isn't possible. Character doesn't exist." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:273 +msgid "Trade cancelled due to an unknown reason." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:277 +#, c-format +msgid "Trade with %s cancelled." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:281 +#, c-format +msgid "Trade with %s cancelled, because player is busy" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:285 +#, c-format +msgid "Unhandled trade cancel packet with %s" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:289 +msgid "Failed adding item. Trade partner is over weighted." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:293 +msgid "Failed adding item. Trade partner has no free slot." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:297 +msgid "Failed adding item. You can't trade this item." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:301 +msgid "Failed adding item for unknown reason." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:305 +msgid "Trade canceled." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:309 +msgid "Trade completed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:313 +msgid "Kick failed!" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:317 +msgid "Kick succeeded!" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:321 +#, c-format +msgid "MVP player: %s" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:325 +msgid "All whispers ignored." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:329 +msgid "All whispers ignore failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:333 +msgid "All whispers unignored." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:337 +msgid "All whispers unignore failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:344 +msgid "pvp off, gvg off" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:348 +msgid "pvp on" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:352 +msgid "gvg on" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:356 +msgid "pvp on, gvg on" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:360 +msgid "unknown pvp" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:364 +#, c-format +msgid "Char from account %s is already in your party!" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:368 +#, c-format +msgid "%s blocked invite!" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:372 +msgid "Char is not online!" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:376 +msgid "Pet catch failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:380 +msgid "Pet caught." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:384 +#, c-format +msgid "Pet catch unknown error: %d." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:388 +msgid "Your mercenary duty hour is over." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:392 +msgid "Your mercenary was killed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:396 +msgid "Your mercenary was fired." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:400 +msgid "Your mercenary run away." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:404 +msgid "Mercenary unknown state." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:408 +msgid "You feed your homunculus." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:412 +#, c-format +msgid "You can't feed homunculus, because you don't have any %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:416 +msgid "Card insert failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:420 +msgid "Card inserted." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:424 +msgid "Bank check failed. Bank probably disabled." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:428 +msgid "" +"Deposit failed. You probably don't have this amount of money with you right " +"now." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:433 +msgid "" +"Withdraw failed. You probably don't have this amount of money in the bank " +"right now." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:438 +msgid "Buying store create failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:442 +msgid "Buying store create failed. Too many weight." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:446 +msgid "Buying store create failed. No items in store." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:450 +msgid "All items within the buy limit were purchased." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:454 +msgid "All items were purchased." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:458 +msgid "Buying item failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:462 +msgid "The deal has failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:466 +msgid "" +"The trade failed, because the entered amount of item is higher, than the " +"buyer is willing to buy." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:471 +msgid "The trade failed, because the buyer is lacking required balance." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:476 +msgid "Selling item failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:481 +msgid "Items searching failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:485 +msgid "No matching stores were found." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:489 +msgid "There are too many results. Please enter more detailed search term." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:494 +msgid "You cannot search anymore." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:498 +msgid "You cannot search yet." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:502 +msgid "No store information available." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:506 +msgid "Pet feeding success." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:510 +msgid "Pet feeding error." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:514 +msgid "A manner point has been successfully aligned." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:518 +#, c-format +msgid "You got positive manner points from %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:522 +#, c-format +msgid "You got negative manner points from %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:526 +msgid "Chat room limit exceeded" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:530 +msgid "Chat room already exists" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:534 +#, c-format +msgid "%s joined room." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:538 +#, c-format +msgid "%s left room." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:542 +#, c-format +msgid "%s kicked from room." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:546 +#, c-format +msgid "%s role changed to room owner." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:550 +msgid "Room join failed. Room full." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:554 +msgid "Room join failed. Wrong password." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:558 +msgid "Room join failed. Kicked from room." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:562 +msgid "Room join failed. Not enough money." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:566 +msgid "Room join failed. Too low level." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:570 +msgid "Room join failed. Too high level." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:574 +msgid "Room join failed. Wrong race." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:578 +#, c-format +msgid "Left %d seconds until you can use item." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:582 +msgid "Message successfully sent." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:586 +msgid "Message send failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:590 +msgid "Item attach failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:594 +msgid "Money attach failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:598 +msgid "Message return failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:602 +msgid "Message return success." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:606 +msgid "Message deletion failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:610 +msgid "Message successfully deleted." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:614 +msgid "You got attach successfully." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:618 +msgid "Error on getting attach successfully." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:622 +msgid "Can't get attach. Too many items." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:629 +msgid "You enter battle field." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:636 +#, c-format +msgid "Rental time for %s expired" +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:640 +#, c-format +msgid "Refine success for item %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:644 +#, c-format +msgid "Refine failure for item %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:648 +#, c-format +msgid "Refine failure. Item %s downgraded." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:652 +#, c-format +msgid "Refine unknown for item %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:656 +msgid "You can't add item to card because weight too high." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:660 +msgid "You can't add item to card because too many items." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:664 +#, c-format +msgid "Item %s bound to you." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:668 +msgid "End all negative status." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:672 +msgid "Immunity to all status." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:676 +msgid "Max hp +100%." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:680 +msgid "Max sp +100%." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:684 +msgid "All stats +20." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:688 +msgid "Enchant weapon with holy element." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:692 +msgid "Enchant armor with holy element." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:696 +msgid "Def +25%." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:700 +msgid "Atk +100%." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:704 +msgid "Flee +50." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:708 +msgid "Full strip failed because of coating." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:712 +msgid "Unknown skill message." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:716 +msgid "Player successfully ignored." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:720 +msgid "Player ignore failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:724 +msgid "Player ignore failed. Because too many ignores." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:728 +msgid "Unknown player ignore failure." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:732 +msgid "Player successfully unignored." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:736 +msgid "Player unignore failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:740 +msgid "Unknown player unignore failure." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:744 +msgid "Unknown ignore type." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:748 +msgid "Pet catch started." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:782 +#, c-format +msgid "Player %s died." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:786 +#, c-format +msgid "Player %s logged out." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:790 +#, c-format +msgid "Player %s warped." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:794 +#, c-format +msgid "Player %s trick dead." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:798 +#, c-format +msgid "Player %s unknown remove." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:802 +#, c-format +msgid "You and %s are now divorced." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:806 +msgid "You were called by your partner." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:810 +#, c-format +msgid "You are calling your partner, %s." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:814 +msgid "Child adoption failed. You already have a baby." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:818 +msgid "Child adoption failed. Your level is too low." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:822 +msgid "" +"Child adoption failed. This player is already married and can't be a baby." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:827 +msgid "Saved location for warp skill." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:831 +msgid "Error saving location. Not enough skill level." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:835 +msgid "Error saving location. You do not have warp skill." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:839 +msgid "Unable to buy while trading." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:846 +msgid "Unable to buy. Npc not found." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:850 +msgid "Unable to buy. Shop system error." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:854 +msgid "Unable to buy. Wrong items selected." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:858 +#, c-format +msgid "Mail destination name %s is wrong." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:862 +msgid "Item attach failed. Weight too big." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:866 +msgid "Item attach failed. Fatal error." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:870 +msgid "Item attach failed. No more space." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:874 +msgid "Item attach failed. Item on tradeable." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:878 +msgid "Item attach failed. Unknown error." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:882 +#, c-format +msgid "Item %s remove failed." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:886 +msgid "Mail send failed. Fatal error." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:890 +msgid "Mail send failed. Too many mails sent." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:894 +msgid "Mail send failed. Wrong attach found." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:898 +msgid "Mail send failed. Receiver name wrong or not checked." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:902 +msgid "Error on getting attach. No space or weight too high." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:906 +msgid "You got money from mail." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:910 +msgid "Error on getting money attach." +msgstr "" + +#. TRANSLATORS: notification message +#: src/resources/notifications.h:914 +msgid "Error on getting money attach. Too many money." +msgstr "" + +#. TRANSLATORS: skill level +#: src/resources/skill/skillinfo.cpp:113 +#, c-format +msgid "Lvl: %d / %d" +msgstr "" + +#. TRANSLATORS: skill type +#: src/resources/skill/skillinfo.cpp:120 +#, c-format +msgid "Type: %s" +msgstr "" + +#. TRANSLATORS: Skill type +#: src/resources/skill/skillinfo.cpp:144 +msgid "Unknown:" +msgstr "" + +#. TRANSLATORS: skill mana +#: src/resources/skill/skillinfo.cpp:151 +#, c-format +msgid " / Mana: -%d" +msgstr "" + +#. TRANSLATORS: skill range +#: src/resources/skill/skillinfo.cpp:159 +#, c-format +msgid "Range: %d" +msgstr "" + +#. TRANSLATORS: Skill type +#: src/resources/skill/skilltypelist.h:37 +msgid "Ground" +msgstr "" + +#. TRANSLATORS: Skill type +#: src/resources/skill/skilltypelist.h:41 +msgid "Unused" +msgstr "" + +#. TRANSLATORS: Skill type +#: src/resources/skill/skilltypelist.h:45 +msgid "TargetTrap" +msgstr "" + +#. TRANSLATORS: chat option changed message +#: src/utils/booleanoptions.h:29 +#, c-format +msgid "Options to /%s are \"yes\", \"no\", \"true\", \"false\", \"1\", \"0\"." +msgstr "" + +#. TRANSLATORS: uptime command +#: src/utils/stringutils.cpp:960 +#, c-format +msgid "%d week" +msgstr "" + +#: src/utils/stringutils.cpp:960 +#, c-format +msgid "%d weeks" +msgstr "" + +#. TRANSLATORS: uptime command +#: src/utils/stringutils.cpp:971 +#, c-format +msgid "%d day" +msgstr "" + +#: src/utils/stringutils.cpp:971 +#, c-format +msgid "%d days" +msgstr "" + +#. TRANSLATORS: uptime command +#: src/utils/stringutils.cpp:981 +#, c-format +msgid "%d hour" +msgstr "" + +#: src/utils/stringutils.cpp:981 +#, c-format +msgid "%d hours" +msgstr "" + +#. TRANSLATORS: uptime command +#: src/utils/stringutils.cpp:991 +#, c-format +msgid "%d minute" +msgstr "" + +#: src/utils/stringutils.cpp:991 +#, c-format +msgid "%d minutes" +msgstr "" + +#. TRANSLATORS: uptime command +#: src/utils/stringutils.cpp:1001 src/utils/stringutils.cpp:1007 +#, c-format +msgid "%d second" +msgstr "" + +#: src/utils/stringutils.cpp:1001 src/utils/stringutils.cpp:1007 +#, c-format +msgid "%d seconds" +msgstr "" diff --git a/run.sh b/run.sh index b988398d9..dece0a138 100755 --- a/run.sh +++ b/run.sh @@ -1,3 +1,3 @@ cd run -./bin/manaplus $* +./bin/manaverse $* cd .. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 25d1e9be9..59d3416fb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -579,8 +579,8 @@ SET(SRCS gui/windows/updaterwindow.h gui/userpalette.cpp gui/userpalette.h - progs/manaplus/gui/viewport.cpp - progs/manaplus/gui/viewport.h + progs/manaverse/gui/viewport.cpp + progs/manaverse/gui/viewport.h gui/viewport.h gui/windowmanager.cpp gui/windowmanager.h @@ -1052,23 +1052,23 @@ SET(SRCS test/testmain.h actions/actiondef.h actions/actionfuncptr.h - progs/manaplus/actions/actions.cpp + progs/manaverse/actions/actions.cpp actions/actions.h - progs/manaplus/actions/chat.cpp + progs/manaverse/actions/chat.cpp actions/chat.h - progs/manaplus/actions/commands.cpp + progs/manaverse/actions/commands.cpp actions/commands.h - progs/manaplus/actions/move.cpp + progs/manaverse/actions/move.cpp actions/move.h - progs/manaplus/actions/pets.cpp + progs/manaverse/actions/pets.cpp actions/pets.h - progs/manaplus/actions/statusbar.cpp + progs/manaverse/actions/statusbar.cpp actions/statusbar.h - progs/manaplus/actions/tabs.cpp + progs/manaverse/actions/tabs.cpp actions/tabs.h - progs/manaplus/actions/target.cpp + progs/manaverse/actions/target.cpp actions/target.h - progs/manaplus/actions/windows.cpp + progs/manaverse/actions/windows.cpp actions/windows.h being/actor.cpp being/actor.h @@ -1120,8 +1120,8 @@ SET(SRCS spellmanager.h chatlogger.cpp chatlogger.h - progs/manaplus/client.cpp - progs/manaplus/client.h + progs/manaverse/client.cpp + progs/manaverse/client.h client.h commandline.cpp commandline.h @@ -2215,18 +2215,18 @@ IF (WIN32) ${SRCS} fs/specialfolder.cpp fs/specialfolder.h - manaplus.rc + manaverse.rc ) SET(DYE_CMD_SRCS ${DYE_CMD_SRCS} fs/specialfolder.cpp fs/specialfolder.h - manaplus.rc + manaverse.rc ) ENDIF () -#SET (PROGRAMS manaplus dyecmd) -SET (PROGRAMS manaplus) +#SET (PROGRAMS manaverse dyecmd) +SET (PROGRAMS manaverse) IF (ENABLE_TMWA) SET(SRCS ${SRCS} ${SRCS_TMWA}) @@ -2234,7 +2234,7 @@ ELSE() SET(SRCS ${SRCS}) ENDIF(ENABLE_TMWA) -ADD_EXECUTABLE(manaplus WIN32 ${SRCS} ${SRCS_EVOL}) +ADD_EXECUTABLE(manaverse WIN32 ${SRCS} ${SRCS_EVOL}) #ADD_EXECUTABLE(dyecmd WIN32 ${DYE_CMD_SRCS}) IF (USE_SDL2) @@ -2255,7 +2255,7 @@ ELSE() ${SDLTTF_LIBRARY}) ENDIF (USE_SDL2) -TARGET_LINK_LIBRARIES(manaplus +TARGET_LINK_LIBRARIES(manaverse ${X11_LIBRARIES} ${SDL_LIBS} ${PNG_LIBRARIES} @@ -2265,7 +2265,7 @@ TARGET_LINK_LIBRARIES(manaplus ${OPENGL_LIBRARIES} ${LIBINTL_LIBRARIES} ${EXTRA_LIBRARIES}) -INSTALL(TARGETS manaplus RUNTIME DESTINATION ${PKG_BINDIR}) +INSTALL(TARGETS manaverse RUNTIME DESTINATION ${PKG_BINDIR}) #TARGET_LINK_LIBRARIES(dyecmd # ${SDLGFX_LIBRARIES} @@ -2286,9 +2286,9 @@ INSTALL(TARGETS manaplus RUNTIME DESTINATION ${PKG_BINDIR}) IF (CMAKE_SYSTEM_NAME STREQUAL SunOS) # we expect the SMCgtxt package to be present on Solaris; # the Solaris gettext is not API-compatible to GNU gettext - SET_TARGET_PROPERTIES(manaplus PROPERTIES LINK_FLAGS "-L/usr/local/lib") + SET_TARGET_PROPERTIES(manaverse PROPERTIES LINK_FLAGS "-L/usr/local/lib") # SET_TARGET_PROPERTIES(dyecmd PROPERTIES LINK_FLAGS "-L/usr/local/lib") ENDIF() -SET_TARGET_PROPERTIES(manaplus PROPERTIES COMPILE_FLAGS "${FLAGS}") +SET_TARGET_PROPERTIES(manaverse PROPERTIES COMPILE_FLAGS "${FLAGS}") #SET_TARGET_PROPERTIES(dyecmd PROPERTIES COMPILE_FLAGS "${DYE_FLAGS}") diff --git a/src/Makefile.am b/src/Makefile.am index a1934ac22..6bab9e41e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -7,11 +7,11 @@ AUTOMAKE_OPTIONS = subdir-objects #AM_TESTS_ENVIRONMENT = \ # ASAN_OPTIONS=detect_leaks=1 -if ENABLE_MANAPLUSGAME +if ENABLE_MANAVERSEGAME if ENABLE_DYECMD -bin_PROGRAMS = manaplus dyecmd +bin_PROGRAMS = manaverse dyecmd else -bin_PROGRAMS = manaplus +bin_PROGRAMS = manaverse endif else if ENABLE_DYECMD @@ -51,96 +51,96 @@ endif dyecmd_CXXFLAGS = -DPKG_DATADIR=\""$(pkgdatadir)/"\" \ -DLOCALEDIR=\""$(localedir)"\" \ -Wall -manaplus_CXXFLAGS = -DPKG_DATADIR=\""$(pkgdatadir)/"\" \ +manaverse_CXXFLAGS = -DPKG_DATADIR=\""$(pkgdatadir)/"\" \ -DLOCALEDIR=\""$(localedir)"\" \ -Wall if ENABLE_WERROR -manaplus_CXXFLAGS += -Werror +manaverse_CXXFLAGS += -Werror dyecmd_CXXFLAGS += -Werror endif if ENABLE_GLIBCDEBUG # _LIBCPP_DEBUG=1 probably giving false positives and it's hard to debug # disabled for now -manaplus_CXXFLAGS += -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -D_LIBCPP_DEBUG=0 +manaverse_CXXFLAGS += -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -D_LIBCPP_DEBUG=0 dyecmd_CXXFLAGS += -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -D_LIBCPP_DEBUG=0 endif if ENABLE_COMMANDLINEPASSWORD -manaplus_CXXFLAGS += -DENABLE_COMMANDLINEPASSWORD +manaverse_CXXFLAGS += -DENABLE_COMMANDLINEPASSWORD endif if USE_X11 -manaplus_CXXFLAGS += -DUSE_X11 +manaverse_CXXFLAGS += -DUSE_X11 dyecmd_CXXFLAGS += -DUSE_X11 endif if ENABLE_ASSERTS -manaplus_CXXFLAGS += -DENABLE_ASSERTS +manaverse_CXXFLAGS += -DENABLE_ASSERTS dyecmd_CXXFLAGS += -DENABLE_ASSERTS if HAVE_RDYNAMIC -manaplus_LDFLAGS = -rdynamic +manaverse_LDFLAGS = -rdynamic dyecmd_LDFLAGS = -rdynamic endif endif if HAVE_EXECINFO -manaplus_CXXFLAGS += -DHAVE_EXECINFO +manaverse_CXXFLAGS += -DHAVE_EXECINFO dyecmd_CXXFLAGS += -DHAVE_EXECINFO endif if HAVE_GLEXT -manaplus_CXXFLAGS += -DHAVE_GLEXT +manaverse_CXXFLAGS += -DHAVE_GLEXT dyecmd_CXXFLAGS += -DHAVE_GLEXT endif if ENABLE_PUGIXML -manaplus_CXXFLAGS += -DENABLE_PUGIXML +manaverse_CXXFLAGS += -DENABLE_PUGIXML dyecmd_CXXFLAGS += -DENABLE_PUGIXML endif if ENABLE_LIBXML -manaplus_CXXFLAGS += -DENABLE_LIBXML +manaverse_CXXFLAGS += -DENABLE_LIBXML dyecmd_CXXFLAGS += -DENABLE_LIBXML endif if ENABLE_TINYXML2 -manaplus_CXXFLAGS += -DENABLE_TINYXML2 +manaverse_CXXFLAGS += -DENABLE_TINYXML2 dyecmd_CXXFLAGS += -DENABLE_TINYXML2 if USE_TINYXML_OLD -manaplus_CXXFLAGS += -DUSE_TINYXML_OLD +manaverse_CXXFLAGS += -DUSE_TINYXML_OLD dyecmd_CXXFLAGS += -DUSE_TINYXML_OLD endif endif if ENABLE_PORTABLE dyecmd_CXXFLAGS += -DENABLE_PORTABLE -manaplus_CXXFLAGS += -DENABLE_PORTABLE +manaverse_CXXFLAGS += -DENABLE_PORTABLE endif if ENABLE_CUSTOMNLS dyecmd_CXXFLAGS += -DENABLE_CUSTOMNLS -manaplus_CXXFLAGS += -DENABLE_CUSTOMNLS +manaverse_CXXFLAGS += -DENABLE_CUSTOMNLS endif if ENABLE_CHECKPLUGIN dyecmd_CXXFLAGS += -DENABLE_CHECKPLUGIN -fplugin=../build/checkplugin.so -fplugin-arg-checkplugin-command=detectnullpointers -manaplus_CXXFLAGS += -DENABLE_CHECKPLUGIN -fplugin=../build/checkplugin.so -fplugin-arg-checkplugin-command=detectnullpointers +manaverse_CXXFLAGS += -DENABLE_CHECKPLUGIN -fplugin=../build/checkplugin.so -fplugin-arg-checkplugin-command=detectnullpointers endif if USE_OPENGL dyecmd_CXXFLAGS += -DUSE_OPENGL -manaplus_CXXFLAGS += -DUSE_OPENGL +manaverse_CXXFLAGS += -DUSE_OPENGL endif if ENABLE_OPENGLERRORS dyecmd_CXXFLAGS += -DOPENGLERRORS -manaplus_CXXFLAGS += -DOPENGLERRORS +manaverse_CXXFLAGS += -DOPENGLERRORS endif if ENABLE_MEM_DEBUG dyecmd_CXXFLAGS += -DENABLE_MEM_DEBUG -DDEBUG_DUMP_LEAKS -manaplus_CXXFLAGS += -DENABLE_MEM_DEBUG -DDEBUG_DUMP_LEAKS +manaverse_CXXFLAGS += -DENABLE_MEM_DEBUG -DDEBUG_DUMP_LEAKS -manaplus_SOURCES = debug/nvwa/_nvwa.h \ +manaverse_SOURCES = debug/nvwa/_nvwa.h \ debug/nvwa/c++11.h \ debug/nvwa/debug_new.cpp \ debug/nvwa/debug_new.h \ @@ -153,15 +153,15 @@ dyecmd_SOURCES = debug/nvwa/_nvwa.h \ debug/nvwa/fast_mutex.h \ debug/nvwa/static_assert.h else -manaplus_SOURCES = +manaverse_SOURCES = dyecmd_SOURCES = endif if ENABLE_STLDEBUG dyecmd_CXXFLAGS += -DENABLE_STLDEBUG -manaplus_CXXFLAGS += -DENABLE_STLDEBUG +manaverse_CXXFLAGS += -DENABLE_STLDEBUG -manaplus_SOURCES += debug/mse/msemsevector.h \ +manaverse_SOURCES += debug/mse/msemsevector.h \ debug/mse/msemstdvector.h \ debug/mse/mseprimitives.h dyecmd_SOURCES += debug/mse/msemsevector.h \ @@ -170,20 +170,20 @@ dyecmd_SOURCES += debug/mse/msemsevector.h \ endif if MINGW -manaplus_SOURCES += manaplus.rc -dyecmd_SOURCES += manaplus.rc +manaverse_SOURCES += manaverse.rc +dyecmd_SOURCES += manaverse.rc endif dyecmd_CXXFLAGS += -DDYECMD dyecmd_SOURCES += progs/dyecmd/dyemain.cpp if USE_MUMBLE -manaplus_CXXFLAGS += -DUSE_MUMBLE +manaverse_CXXFLAGS += -DUSE_MUMBLE endif if ENABLE_CHECKS dyecmd_CXXFLAGS += -DENABLE_CHECKS -manaplus_CXXFLAGS += -DENABLE_CHECKS +manaverse_CXXFLAGS += -DENABLE_CHECKS endif BASE_SRC = @@ -191,14 +191,14 @@ BASE_SRC = if USE_SDL2 if USE_INTERNALSDLGFX dyecmd_CXXFLAGS += -I$(srcdir)/sdl2gfx -DUSE_SDL2 -manaplus_CXXFLAGS += -I$(srcdir)/sdl2gfx -DUSE_SDL2 +manaverse_CXXFLAGS += -I$(srcdir)/sdl2gfx -DUSE_SDL2 BASE_SRC += sdl2gfx/SDL2_framerate.cpp \ sdl2gfx/SDL2_framerate.h \ sdl2gfx/SDL2_rotozoom.cpp \ sdl2gfx/SDL2_rotozoom.h else dyecmd_CXXFLAGS += -DUSE_SDL2 -manaplus_CXXFLAGS += -DUSE_SDL2 +manaverse_CXXFLAGS += -DUSE_SDL2 endif endif @@ -1700,22 +1700,22 @@ SRC = ${BASE_SRC} \ net/ea/tradehandler.h \ net/ea/traderecv.cpp \ net/ea/traderecv.h \ - progs/manaplus/actions/actions.cpp \ - progs/manaplus/actions/chat.cpp \ - progs/manaplus/actions/commands.cpp \ - progs/manaplus/actions/move.cpp \ - progs/manaplus/actions/pets.cpp \ - progs/manaplus/actions/statusbar.cpp \ - progs/manaplus/actions/tabs.cpp \ - progs/manaplus/actions/target.cpp \ - progs/manaplus/actions/windows.cpp \ - progs/manaplus/client.cpp \ - progs/manaplus/client.h \ - progs/manaplus/gui/viewport.cpp \ - progs/manaplus/gui/viewport.h + progs/manaverse/actions/actions.cpp \ + progs/manaverse/actions/chat.cpp \ + progs/manaverse/actions/commands.cpp \ + progs/manaverse/actions/move.cpp \ + progs/manaverse/actions/pets.cpp \ + progs/manaverse/actions/statusbar.cpp \ + progs/manaverse/actions/tabs.cpp \ + progs/manaverse/actions/target.cpp \ + progs/manaverse/actions/windows.cpp \ + progs/manaverse/client.cpp \ + progs/manaverse/client.h \ + progs/manaverse/gui/viewport.cpp \ + progs/manaverse/gui/viewport.h if ENABLE_TMWA -manaplus_CXXFLAGS += -DTMWA_SUPPORT +manaverse_CXXFLAGS += -DTMWA_SUPPORT SRC += \ enums/magicschool.h \ gui/models/magicschoolmodel.h \ @@ -2126,11 +2126,11 @@ dyecmd_SOURCES += progs/dyecmd/gui/viewport.cpp \ progs/dyecmd/actions/target.cpp \ progs/dyecmd/actions/windows.cpp -if ENABLE_MANAPLUSGAME -manaplus_SOURCES += ${SRC} +if ENABLE_MANAVERSEGAME +manaverse_SOURCES += ${SRC} endif -manaplustests_CXXFLAGS += ${manaplus_CXXFLAGS} \ +manaplustests_CXXFLAGS += ${manaverse_CXXFLAGS} \ -DUNITTESTS manaplustests_LDFLAGS = if ENABLE_PUGIXML @@ -2253,7 +2253,7 @@ endif EXTRA_DIST = CMakeLists.txt \ winver.h.in \ - manaplus.rc \ + manaverse.rc \ SDLMain.m # set the include path found by configure diff --git a/src/client.h b/src/client.h index ad12c28a4..6dbda3801 100644 --- a/src/client.h +++ b/src/client.h @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -25,7 +26,7 @@ #include "progs/dyecmd/client.h" PROGS_DYECMD_CLIENT_H #else // DYECMD -#include "progs/manaplus/client.h" -PROGS_MANAPLUS_CLIENT_H +#include "progs/manaverse/client.h" +PROGS_MANAVERSE_CLIENT_H #endif // DYECMD #endif // CLIENT_H diff --git a/src/commandline.cpp b/src/commandline.cpp index 982078635..951f2c655 100644 --- a/src/commandline.cpp +++ b/src/commandline.cpp @@ -42,16 +42,17 @@ static void printHelp() { std::cout << // TRANSLATORS: command line help - _("manaplus [options] [manaplus-file]") << + _("manaverse [options] [manaverse-file]") << std::endl << std::endl << // TRANSLATORS: command line help - _("[manaplus-file] : The manaplus file is an XML file (.manaplus)") << + _("[mana-file] : The mana file is an XML file " + "(.mana)") << std::endl << // TRANSLATORS: command line help _(" used to set custom parameters") << std::endl << // TRANSLATORS: command line help - _(" to the manaplus client.") << + _(" to the manaverse client.") << std::endl << std::endl << // TRANSLATORS: command line help _("Options:") << diff --git a/src/defaults.cpp b/src/defaults.cpp index 0cdcf898f..e909fd765 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -498,7 +498,7 @@ void setBrandingDefaults(Configuration &cfg) AddDEF("wallpapersPath", ""); AddDEF("wallpapersFile", ""); AddDEF("appName", "ManaVerse"); - AddDEF("appIcon", "icons/manaplus"); + AddDEF("appIcon", "icons/manaverse"); AddDEF("loginMusic", "keprohm.ogg"); AddDEF("defaultServer", ""); AddDEF("defaultPort", DEFAULT_PORT); @@ -509,7 +509,7 @@ void setBrandingDefaults(Configuration &cfg) "https://tmw2.org/updates/serverlist.xml"); AddDEF("onlineServerFile", "serverlistplus.xml"); AddDEF("appShort", "mana"); - AddDEF("screenshots", "ManaPlus"); + AddDEF("screenshots", "ManaVerse"); AddDEF("defaultUpdateHost", ""); AddDEF("helpPath", ""); AddDEF("tagsPath", ""); diff --git a/src/dirs.cpp b/src/dirs.cpp index 44b23be0a..ebb86c13e 100644 --- a/src/dirs.cpp +++ b/src/dirs.cpp @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -70,7 +71,7 @@ PRAGMA48(GCC diagnostic pop) #include "debug.h" #if defined __native_client__ -#define _nacl_dir std::string("/persistent/manaplus") +#define _nacl_dir std::string("/persistent/manaverse") #endif // defined __native_client__ #ifdef ANDROID @@ -116,7 +117,7 @@ void extractAssets() FILE *const file = fopen(fileName.c_str(), "w"); for (int f = 0; f < 100; f ++) { - std::string part = strprintf("manaplus-data.zip%u%u", + std::string part = strprintf("manaverse-data.zip%u%u", CAST_U32(f / 10), CAST_U32(f % 10)); logger->log("testing asset: " + part); @@ -140,7 +141,7 @@ void extractAssets() const std::string fileName2 = pathJoin(getenv("APPDIR"), "locale.zip"); FILE *const file2 = fopen(fileName2.c_str(), "w"); - SDL_RWops *const rw = SDL_RWFromFile("manaplus-locale.zip", "r"); + SDL_RWops *const rw = SDL_RWFromFile("manaverse-locale.zip", "r"); if (rw) { const int size = SDL_RWsize(rw); @@ -249,7 +250,7 @@ void Dirs::mountDataDir() { std::string path = settings.options.brandingPath; - // Strip blah.manaplus from the path + // Strip *.mana from the path const int loc = CAST_S32(path.find_last_of('/')); if (loc > 0) @@ -343,19 +344,19 @@ void Dirs::initLocalDataDir() // Use Application Directory instead of .mana settings.localDataDir = pathJoin(VirtFs::getUserDir(), "Library/Application Support", - branding.getValue("appName", "ManaPlus")); + branding.getValue("appName", "ManaVerse")); #elif defined __HAIKU__ settings.localDataDir = pathJoin(VirtFs::getUserDir(), - "config/cache/Mana"); + "config/cache/ManaVerse"); #elif defined WIN32 settings.localDataDir = getSpecialFolderLocation(CSIDL_LOCAL_APPDATA); if (settings.localDataDir.empty()) settings.localDataDir = VirtFs::getUserDir(); settings.localDataDir = pathJoin(settings.localDataDir, - "Mana"); + "ManaVerse"); #elif defined __ANDROID__ settings.localDataDir = pathJoin(getSdStoragePath(), - branding.getValue("appShort", "ManaPlus"), + branding.getValue("appShort", "ManaVerse"), "local"); #elif defined __native_client__ settings.localDataDir = pathJoin(_nacl_dir, "local"); @@ -364,7 +365,7 @@ void Dirs::initLocalDataDir() #else // __APPLE__ settings.localDataDir = pathJoin(VirtFs::getUserDir(), - ".local/share/mana"); + ".local/share/manaverse"); #endif // __APPLE__ } @@ -400,11 +401,11 @@ void Dirs::initConfigDir() { #ifdef __APPLE__ settings.configDir = pathJoin(settings.localDataDir, - branding.getValue("appShort", "mana")); + branding.getValue("appShort", "manaverse")); #elif defined __HAIKU__ settings.configDir = pathJoin(VirtFs::getUserDir(), - "config/settings/Mana", - branding.getValue("appName", "ManaPlus")); + "config/settings/ManaVerse", + branding.getValue("appName", "ManaVerse")); #elif defined WIN32 settings.configDir = getSpecialFolderLocation(CSIDL_APPDATA); if (settings.configDir.empty()) @@ -415,11 +416,11 @@ void Dirs::initConfigDir() { settings.configDir = pathJoin(settings.configDir, "mana", - branding.getValue("appShort", "mana")); + branding.getValue("appShort", "manaverse")); } #elif defined __ANDROID__ settings.configDir = pathJoin(getSdStoragePath(), - branding.getValue("appShort", "ManaPlus"), + branding.getValue("appShort", "ManaVerse"), "config"); #elif defined __native_client__ settings.configDir = pathJoin(_nacl_dir, "config"); @@ -429,7 +430,7 @@ void Dirs::initConfigDir() settings.configDir = pathJoin(VirtFs::getUserDir(), ".config/mana", - branding.getValue("appShort", "mana")); + branding.getValue("appShort", "manaverse")); #endif // __APPLE__ logger->log("Generating config dir: " + settings.configDir); @@ -579,7 +580,7 @@ void Dirs::initScreenshotDir() if (config.getBoolValue("useScreenshotDirectorySuffix")) { const std::string configScreenshotSuffix = - branding.getValue("screenshots", "ManaPlus"); + branding.getValue("screenshots", "ManaVerse"); if (!configScreenshotSuffix.empty()) { diff --git a/src/fs/files.cpp b/src/fs/files.cpp index fcce1c0ea..9cd3bfb0e 100644 --- a/src/fs/files.cpp +++ b/src/fs/files.cpp @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2013-2019 The ManaPlus Developers + * Copyright (C) 2013-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -59,7 +60,7 @@ void Files::extractLocale() const std::string dir = pathJoin("locale", *i); if (VirtFs::isDirectory(dir)) { - const std::string moFile = dir + "/LC_MESSAGES/manaplus.mo"; + const std::string moFile = dir + "/LC_MESSAGES/manaverse.mo"; if (VirtFs::exists((moFile))) { const std::string localFile = pathJoin(localDir, moFile); diff --git a/src/fs/paths.cpp b/src/fs/paths.cpp index 942f69471..5388438c8 100644 --- a/src/fs/paths.cpp +++ b/src/fs/paths.cpp @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -171,13 +172,13 @@ std::string removeLast(const std::string &str) #ifdef WIN32 std::string getSelfName() { - return "manaplus.exe"; + return "manaverse.exe"; } #elif defined(__APPLE__) std::string getSelfName() { - return "manaplus.exe"; + return "manaverse.exe"; } #elif defined __linux__ || defined __linux diff --git a/src/game.cpp b/src/game.cpp index 4e3c399cd..3f2d525c5 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -588,13 +589,13 @@ bool Game::saveScreenshot(SDL_Surface *const screenshot, if (serverName.empty()) { screenShortStr = strprintf("%s_Screenshot_%s_", - branding.getValue("appName", "ManaPlus").c_str(), + branding.getValue("appName", "ManaVerse").c_str(), buffer); } else { screenShortStr = strprintf("%s_Screenshot_%s_%s_", - branding.getValue("appName", "ManaPlus").c_str(), + branding.getValue("appName", "ManaVerse").c_str(), serverName.c_str(), buffer); } diff --git a/src/gui/viewport.h b/src/gui/viewport.h index d5782986b..80327a3f1 100644 --- a/src/gui/viewport.h +++ b/src/gui/viewport.h @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -25,8 +26,8 @@ #include "progs/dyecmd/gui/viewport.h" PROGS_DYECMD_GUI_VIEWPORT_H #else -#include "progs/manaplus/gui/viewport.h" -PROGS_MANAPLUS_GUI_VIEWPORT_H +#include "progs/manaverse/gui/viewport.h" +PROGS_MANAVERSE_GUI_VIEWPORT_H #endif // DYECMD #endif // GUI_VIEWPORT_H diff --git a/src/gui/windowmanager.cpp b/src/gui/windowmanager.cpp index 79e6cb47c..352f06155 100644 --- a/src/gui/windowmanager.cpp +++ b/src/gui/windowmanager.cpp @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -417,7 +418,7 @@ void WindowManager::newChatMessage() void WindowManager::setIcon() { #if !defined(ANDROID) && !defined(__SWITCH__) - std::string iconFile = branding.getValue("appIcon", "icons/manaplus"); + std::string iconFile = branding.getValue("appIcon", "icons/manaverse"); #ifdef WIN32 iconFile.append(".ico"); #else // WIN32 diff --git a/src/gui/windows/updaterwindow.cpp b/src/gui/windows/updaterwindow.cpp index 948ce5a17..f7bee0684 100644 --- a/src/gui/windows/updaterwindow.cpp +++ b/src/gui/windows/updaterwindow.cpp @@ -1080,7 +1080,7 @@ void UpdaterWindow::loadMods(const std::string &dir, if (file.group.empty()) continue; std::string name = file.name; - if (strStartWith(name, "manaplus_")) + if (strStartWith(name, "manaverse_")) { const std::set::const_iterator it = modsList.find(file.group); diff --git a/src/gui/windows/updaterwindow.h b/src/gui/windows/updaterwindow.h index daa80f978..8ba66e08f 100644 --- a/src/gui/windows/updaterwindow.h +++ b/src/gui/windows/updaterwindow.h @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * diff --git a/src/logger.cpp b/src/logger.cpp index c3c4cf699..f36d8cacd 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -50,14 +51,14 @@ #if defined(__ANDROID__) #include #ifdef SPECIAL_LOGGING -#define SPECIALLOG(x) __android_log_print(ANDROID_LOG_INFO, "manaplus", x); +#define SPECIALLOG(x) __android_log_print(ANDROID_LOG_INFO, "manaverse", x); #define DSPECIALLOG(x) __android_log_print(ANDROID_LOG_VERBOSE, \ - "manaplus", x); + "manaverse", x); #else // SPECIAL_LOGGING #define SPECIALLOG(x) if (mDebugLog) \ - __android_log_print(ANDROID_LOG_INFO, "manaplus", x); + __android_log_print(ANDROID_LOG_INFO, "manaverse", x); #define DSPECIALLOG(x) if (mDebugLog) \ - __android_log_print(ANDROID_LOG_VERBOSE, "manaplus", x); + __android_log_print(ANDROID_LOG_VERBOSE, "manaverse", x); #endif // SPECIAL_LOGGING #elif defined __native_client__ #ifdef SPECIAL_LOGGING diff --git a/src/main.h b/src/main.h index b7cafe8e1..b08f1fcd7 100644 --- a/src/main.h +++ b/src/main.h @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -157,10 +158,10 @@ #define SIMD_NAME "" #endif // SIMD_SUPPORTED -#define PACKAGE_EXTENDED_VERSION "ManaPlus (" PACKAGE_OS \ -"; %s; " SDL_NAME ", " XML_NAME SIMD_NAME ", %s; 4144 v" SMALL_VERSION ")" +#define PACKAGE_EXTENDED_VERSION "ManaVerse (" PACKAGE_OS \ +"; %s; " SDL_NAME ", " XML_NAME SIMD_NAME ", %s; jak1 v" SMALL_VERSION ")" -#define FULL_VERSION "ManaPlus " SMALL_VERSION " " PACKAGE_OS ", " \ +#define FULL_VERSION "ManaVerse " SMALL_VERSION " " PACKAGE_OS ", " \ SDL_NAME ", " XML_NAME SIMD_NAME #ifdef ANDROID diff --git a/src/manaplus.rc b/src/manaplus.rc deleted file mode 100644 index 53095ceb1..000000000 --- a/src/manaplus.rc +++ /dev/null @@ -1,25 +0,0 @@ -#include // include for version info constants - -#include "winver.h" - -A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "../data/icons/manaplus.ico" -evol ICON MOVEABLE PURE LOADONCALL DISCARDABLE "../data/evol/icons/evol-client.ico" -tmw ICON MOVEABLE PURE LOADONCALL DISCARDABLE "../data/tmw/icons/tmw-client.ico" - -1 VERSIONINFO -FILEVERSION VER_MAJOR,VER_MINOR,VER_RELEASE,VER_BUILD -PRODUCTVERSION VER_MAJOR,VER_MINOR,VER_RELEASE,VER_BUILD -//FILETYPE VFT_APP -{ - BLOCK "StringFileInfo" { - BLOCK "040904E4" { - VALUE "CompanyName", "The ManaPlus Development Team" - VALUE "FileVersion", PACKAGE_VERSION "4144" - VALUE "FileDescription", "ManaPlus" - VALUE "LegalCopyright", "2004-2014 (C)" - VALUE "OriginalFilename", "manaplus.exe" - VALUE "ProductName", "ManaPlus MMORPG Client" - VALUE "ProductVersion", PACKAGE_VERSION "4144" - } - } -} diff --git a/src/manaverse.rc b/src/manaverse.rc new file mode 100644 index 000000000..57de91dbb --- /dev/null +++ b/src/manaverse.rc @@ -0,0 +1,24 @@ +#include // include for version info constants + +#include "winver.h" + +A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "../data/icons/manaverse.ico" +tmw ICON MOVEABLE PURE LOADONCALL DISCARDABLE "../data/tmw/icons/tmw-client.ico" + +1 VERSIONINFO +FILEVERSION VER_MAJOR,VER_MINOR,VER_RELEASE,VER_BUILD +PRODUCTVERSION VER_MAJOR,VER_MINOR,VER_RELEASE,VER_BUILD +//FILETYPE VFT_APP +{ + BLOCK "StringFileInfo" { + BLOCK "040904E4" { + VALUE "CompanyName", "The ManaVerse Development Team" + VALUE "FileVersion", PACKAGE_VERSION "jak1" + VALUE "FileDescription", "ManaVerse" + VALUE "LegalCopyright", "2020-2023 (C)" + VALUE "OriginalFilename", "manaverse.exe" + VALUE "ProductName", "ManaVerse MMORPG Client" + VALUE "ProductVersion", PACKAGE_VERSION "jak1" + } + } +} diff --git a/src/progs/dyecmd/client.cpp b/src/progs/dyecmd/client.cpp index 483451ed6..4137a4f75 100644 --- a/src/progs/dyecmd/client.cpp +++ b/src/progs/dyecmd/client.cpp @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -193,7 +194,7 @@ void Client::gameInit() else { settings.logFileName = pathJoin(settings.localDataDir, - "manaplus.log"); + "manaverse.log"); } logger->setLogFile(settings.logFileName); diff --git a/src/progs/manaplus/actions/actions.cpp b/src/progs/manaplus/actions/actions.cpp deleted file mode 100644 index 92c0f0050..000000000 --- a/src/progs/manaplus/actions/actions.cpp +++ /dev/null @@ -1,2047 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/actions.h" - -#include "actormanager.h" -#include "configuration.h" -#include "game.h" -#ifdef USE_OPENGL -#include "graphicsmanager.h" -#endif // USE_OPENGL -#include "main.h" -#include "spellmanager.h" - -#include "actions/actiondef.h" - -#include "being/localplayer.h" -#include "being/playerinfo.h" - -#include "const/spells.h" - -#include "const/resources/skill.h" - -#include "fs/files.h" - -#include "gui/gui.h" -#include "gui/popupmanager.h" -#include "gui/sdlinput.h" -#include "gui/windowmanager.h" - -#include "gui/shortcut/dropshortcut.h" -#include "gui/shortcut/emoteshortcut.h" -#include "gui/shortcut/itemshortcut.h" - -#include "gui/popups/popupmenu.h" - -#include "gui/windows/buydialog.h" -#include "gui/windows/okdialog.h" -#include "gui/windows/tradewindow.h" -#include "gui/windows/quitdialog.h" -#include "gui/windows/buyselldialog.h" -#include "gui/windows/chatwindow.h" -#include "gui/windows/helpwindow.h" -#include "gui/windows/inventorywindow.h" -#include "gui/windows/itemamountwindow.h" -#include "gui/windows/npcdialog.h" -#include "gui/windows/outfitwindow.h" -#include "gui/windows/setupwindow.h" -#include "gui/windows/shopwindow.h" -#include "gui/windows/shortcutwindow.h" -#include "gui/windows/skilldialog.h" -#include "gui/windows/whoisonline.h" - -#include "gui/widgets/createwidget.h" - -#include "gui/widgets/tabs/chat/chattab.h" - -#include "input/inputactionoperators.h" - -#if defined USE_OPENGL -#include "render/normalopenglgraphics.h" -#endif // USE_OPENGL - -#include "net/adminhandler.h" -#include "net/beinghandler.h" -#include "net/buyingstorehandler.h" -#include "net/buysellhandler.h" -#include "net/chathandler.h" -#include "net/download.h" -#include "net/homunculushandler.h" -#include "net/gamehandler.h" -#include "net/inventoryhandler.h" -#include "net/ipc.h" -#include "net/mercenaryhandler.h" -#include "net/net.h" -#include "net/npchandler.h" -#include "net/serverfeatures.h" -#include "net/uploadcharinfo.h" -#include "net/tradehandler.h" -#include "net/vendinghandler.h" - -#include "resources/iteminfo.h" -#include "resources/memorymanager.h" - -#include "resources/resourcemanager/resourcemanager.h" - -#include "utils/chatutils.h" -#include "utils/foreach.h" -#include "utils/gettext.h" -#include "utils/parameters.h" -#include "utils/timer.h" - -#ifdef TMWA_SUPPORT -#include "net/playerhandler.h" - -#include "utils/mathutils.h" -#endif // TMWA_SUPPORT - -PRAGMA48(GCC diagnostic push) -PRAGMA48(GCC diagnostic ignored "-Wshadow") -#ifdef ANDROID -#ifndef USE_SDL2 -#include -#endif // USE_OPENGL -#endif // ANDROID -PRAGMA48(GCC diagnostic pop) - -#include - -#include "debug.h" - -extern std::string tradePartnerName; -extern QuitDialog *quitDialog; -extern time_t start_time; -extern char **environ; - -namespace Actions -{ - -static int uploadUpdate(void *ptr, - const DownloadStatusT status, - size_t total A_UNUSED, - const size_t remaining A_UNUSED) A_NONNULL(1); - -static int uploadUpdate(void *ptr, - const DownloadStatusT status, - size_t total A_UNUSED, - const size_t remaining A_UNUSED) -{ - if (status == DownloadStatus::Idle || status == DownloadStatus::Starting) - return 0; - - UploadChatInfo *const info = reinterpret_cast(ptr); - if (info == nullptr) - return 0; - - if (status == DownloadStatus::Complete) - { - std::string str = Net::Download::getUploadResponse(); - const size_t sz = str.size(); - if (sz > 0) - { - if (str[sz - 1] == '\n') - str = str.substr(0, sz - 1); - str.append(info->addStr); - ChatTab *const tab = info->tab; - if (chatWindow != nullptr && - (tab == nullptr || chatWindow->isTabPresent(tab))) - { - str = strprintf("%s [@@%s |%s@@]", - info->text.c_str(), str.c_str(), str.c_str()); - outStringNormal(tab, str, str); - } - else - { - CREATEWIDGET(OkDialog, - // TRANSLATORS: file uploaded message - _("File uploaded"), - str, - // TRANSLATORS: ok dialog button - _("OK"), - DialogType::OK, - Modal_true, - ShowCenter_false, - nullptr, - 260); - } - } - } -// delete2(info->upload) - info->upload = nullptr; - delete info; - return 0; -} - -static void uploadFile(const std::string &str, - const std::string &fileName, - const std::string &addStr, - ChatTab *const tab) -{ - UploadChatInfo *const info = new UploadChatInfo; - Net::Download *const upload = new Net::Download(info, - "http://ix.io", - &uploadUpdate, - false, true, false); - info->upload = upload; - info->text = str; - info->addStr = addStr; - info->tab = tab; - upload->setFile(fileName, -1); - upload->start(); -} - -static Being *findBeing(const std::string &name, const bool npc) -{ - if ((localPlayer == nullptr) || (actorManager == nullptr)) - return nullptr; - - Being *being = nullptr; - - if (name.empty()) - { - being = localPlayer->getTarget(); - } - else - { - being = actorManager->findBeingByName( - name, ActorType::Unknown); - } - if ((being == nullptr) && npc) - { - being = actorManager->findNearestLivingBeing( - localPlayer, 1, ActorType::Npc, AllowSort_true); - if (being != nullptr) - { - if (abs(being->getTileX() - localPlayer->getTileX()) > 1 - || abs(being->getTileY() - localPlayer->getTileY()) > 1) - { - being = nullptr; - } - } - } - if ((being == nullptr) && npc) - { - being = actorManager->findNearestLivingBeing( - localPlayer, 1, ActorType::Player, AllowSort_true); - if (being != nullptr) - { - if (abs(being->getTileX() - localPlayer->getTileX()) > 1 - || abs(being->getTileY() - localPlayer->getTileY()) > 1) - { - being = nullptr; - } - } - } - return being; -} - -static Item *getItemByInvIndex(const int index, - const InventoryTypeT invType) -{ - const Inventory *inv = nullptr; - switch (invType) - { - case InventoryType::Storage: - inv = PlayerInfo::getStorageInventory(); - break; - - case InventoryType::Inventory: - inv = PlayerInfo::getInventory(); - break; - case InventoryType::Trade: - case InventoryType::Npc: - case InventoryType::Cart: - case InventoryType::Vending: - case InventoryType::MailEdit: - case InventoryType::MailView: - case InventoryType::Craft: - case InventoryType::TypeEnd: - default: - break; - } - if (inv != nullptr) - return inv->getItem(index); - return nullptr; -} - -static int getAmountFromEvent(const InputEvent &event, - Item *&item0, - const InventoryTypeT invType) -{ - Item *const item = getItemByInvIndex(atoi(event.args.c_str()), - invType); - item0 = item; - if (item == nullptr) - return 0; - - std::string str = event.args; - removeToken(str, " "); - - if (str.empty()) - return 0; - - int amount = 0; - if (str[0] == '-') - { - if (str.size() > 1) - { - amount = item->getQuantity() - atoi(str.substr(1).c_str()); - if (amount <= 0 || amount > item->getQuantity()) - amount = item->getQuantity(); - } - } - else if (str == "/") - { - amount = item->getQuantity() / 2; - } - else if (str == "all") - { - amount = item->getQuantity(); - } - else - { - amount = atoi(str.c_str()); - } - return amount; -} - -impHandler(emote) -{ - const int emotion = 1 + (event.action - InputAction::EMOTE_1); - if (emotion > 0) - { - if (emoteShortcut != nullptr) - emoteShortcut->useEmotePlayer(emotion); - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - - return false; -} - -impHandler(outfit) -{ - if (inputManager.isActionActive(InputAction::WEAR_OUTFIT)) - { - const int num = event.action - InputAction::OUTFIT_1; - if ((outfitWindow != nullptr) && num >= 0) - { - outfitWindow->wearOutfit(num, - true, - false); - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - } - else if (inputManager.isActionActive(InputAction::COPY_OUTFIT)) - { - const int num = event.action - InputAction::OUTFIT_1; - if ((outfitWindow != nullptr) && num >= 0) - { - outfitWindow->copyOutfit(num); - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - } - - return false; -} - -impHandler0(mouseClick) -{ - if ((guiInput == nullptr) || (gui == nullptr)) - return false; - - int mouseX; - int mouseY; - Gui::getMouseState(mouseX, mouseY); - guiInput->simulateMouseClick(mouseX, mouseY, MouseButton::RIGHT); - return true; -} - -impHandler0(ok) -{ - // Close the Browser if opened - if ((helpWindow != nullptr) && helpWindow->isWindowVisible()) - { - helpWindow->setVisible(Visible_false); - return true; - } - // Close the config window, cancelling changes if opened - else if ((setupWindow != nullptr) && setupWindow->isWindowVisible()) - { - setupWindow->action(ActionEvent(nullptr, "cancel")); - return true; - } - else if (NpcDialog *const dialog = NpcDialog::getActive()) - { - dialog->action(ActionEvent(nullptr, "ok")); - return true; - } - else if (popupMenu->isPopupVisible()) - { - popupMenu->select(); - } - return false; -} - -impHandler(shortcut) -{ - if (itemShortcutWindow != nullptr) - { - const int num = itemShortcutWindow->getTabIndex(); - if (num >= 0 && num < CAST_S32(SHORTCUT_TABS)) - { - if (itemShortcut[num] != nullptr) - { - itemShortcut[num]->useItem(event.action - - InputAction::SHORTCUT_1); - } - } - return true; - } - return false; -} - -impHandler0(quit) -{ - if (Game::instance() == nullptr) - return false; - if (PopupManager::isPopupMenuVisible()) - { - PopupManager::closePopupMenu(); - return true; - } - else if (quitDialog == nullptr) - { - CREATEWIDGETV(quitDialog, QuitDialog, - &quitDialog); - quitDialog->requestMoveToTop(); - return true; - } - return false; -} - -impHandler0(dropItem0) -{ - if (dropShortcut != nullptr) - { - dropShortcut->dropFirst(); - return true; - } - return false; -} - -impHandler0(dropItem) -{ - if (dropShortcut != nullptr) - { - dropShortcut->dropItems(1); - return true; - } - return false; -} - -impHandler(dropItemId) -{ - const Inventory *const inv = PlayerInfo::getInventory(); - if (inv == nullptr) - return false; - - // +++ ignoring item color for now - Item *const item = inv->findItem(atoi(event.args.c_str()), - ItemColor_one); - - if ((item != nullptr) && !PlayerInfo::isItemProtected(item->getId())) - { - ItemAmountWindow::showWindow(ItemAmountWindowUsage::ItemDrop, - inventoryWindow, - item, - 0, - 0); - } - return true; -} - -impHandler(dropItemInv) -{ - Item *const item = getItemByInvIndex(atoi(event.args.c_str()), - InventoryType::Inventory); - if ((item != nullptr) && !PlayerInfo::isItemProtected(item->getId())) - { - ItemAmountWindow::showWindow(ItemAmountWindowUsage::ItemDrop, - inventoryWindow, - item, - 0, - 0); - } - return true; -} - -impHandler(dropItemIdAll) -{ - const Inventory *const inv = PlayerInfo::getInventory(); - if (inv == nullptr) - return false; - - // +++ ignoring item color for now - Item *const item = inv->findItem(atoi(event.args.c_str()), - ItemColor_one); - - if ((item != nullptr) && !PlayerInfo::isItemProtected(item->getId())) - PlayerInfo::dropItem(item, item->getQuantity(), Sfx_true); - return true; -} - -impHandler(dropItemInvAll) -{ - Item *const item = getItemByInvIndex(atoi(event.args.c_str()), - InventoryType::Inventory); - if ((item != nullptr) && !PlayerInfo::isItemProtected(item->getId())) - PlayerInfo::dropItem(item, item->getQuantity(), Sfx_true); - return true; -} - -#ifdef TMWA_SUPPORT -impHandler(heal) -{ - if (Net::getNetworkType() != ServerType::TMWATHENA) - return false; - if (actorManager != nullptr && - localPlayer != nullptr) - { - std::string args = event.args; - - if (!args.empty()) - { - const Being *being = nullptr; - if (args[0] == ':') - { - being = actorManager->findBeing(fromInt(atoi( - args.substr(1).c_str()), BeingId)); - if (being != nullptr && being->getType() == ActorType::Monster) - being = nullptr; - } - else - { - being = actorManager->findBeingByName(args, ActorType::Player); - } - if (being != nullptr) - actorManager->heal(being); - } - else - { - Being *target = localPlayer->getTarget(); - if (inputManager.isActionActive(InputAction::STOP_ATTACK)) - { - if (target == nullptr || - target->getType() != ActorType::Player) - { - target = actorManager->findNearestLivingBeing( - localPlayer, 10, ActorType::Player, AllowSort_true); - } - } - else - { - if (target == nullptr) - target = localPlayer; - } - actorManager->heal(target); - } - - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - return false; -} -#else // TMWA_SUPPORT - -impHandler0(heal) -{ - return false; -} -#endif // TMWA_SUPPORT - -impHandler0(healmd) -{ -#ifdef TMWA_SUPPORT - if (Net::getNetworkType() != ServerType::TMWATHENA) - return false; - if (actorManager != nullptr) - { - const int matk = PlayerInfo::getStatEffective(Attributes::PLAYER_MATK); - int maxHealingRadius; - - // magic levels < 2 - if (PlayerInfo::getSkillLevel(340) < 2 - || PlayerInfo::getSkillLevel(341) < 2) - { - maxHealingRadius = matk / 100 + 1; - } - else - { - maxHealingRadius = (12 * fastSqrtInt(matk) + matk) / 100 + 1; - } - - Being *target = actorManager->findMostDamagedPlayer(maxHealingRadius); - if (target != nullptr) - actorManager->heal(target); - - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } -#endif // TMWA_SUPPORT - - return false; -} - -impHandler0(itenplz) -{ -#ifdef TMWA_SUPPORT - if (Net::getNetworkType() != ServerType::TMWATHENA) - return false; - if (actorManager != nullptr) - { - if (playerHandler != nullptr && - playerHandler->canUseMagic() && - PlayerInfo::getAttribute(Attributes::PLAYER_MP) >= 3) - { - actorManager->itenplz(); - } - return true; - } -#endif // TMWA_SUPPORT - - return false; -} - -impHandler0(setHome) -{ - if (localPlayer != nullptr) - { - localPlayer->setHome(); - return true; - } - return false; -} - -impHandler0(magicAttack) -{ -#ifdef TMWA_SUPPORT - if (Net::getNetworkType() != ServerType::TMWATHENA) - return false; - if (localPlayer != nullptr) - { - localPlayer->magicAttack(); - return true; - } -#endif // TMWA_SUPPORT - - return false; -} - -impHandler0(copyEquippedToOutfit) -{ - if (outfitWindow != nullptr) - { - outfitWindow->copyFromEquiped(); - return true; - } - return false; -} - -impHandler(pickup) -{ - if (localPlayer == nullptr) - return false; - - const std::string args = event.args; - if (args.empty()) - { - localPlayer->pickUpItems(0); - } - else - { - FloorItem *const item = actorManager->findItem(fromInt( - atoi(args.c_str()), BeingId)); - if (item != nullptr) - localPlayer->pickUp(item); - } - return true; -} - -static void doSit() -{ - if (inputManager.isActionActive(InputAction::EMOTE)) - localPlayer->updateSit(); - else - localPlayer->toggleSit(); -} - -impHandler0(sit) -{ - if (localPlayer != nullptr) - { - doSit(); - return true; - } - return false; -} - -impHandler(screenshot) -{ - Game::createScreenshot(event.args); - return true; -} - -impHandler0(ignoreInput) -{ - return true; -} - -impHandler(buy) -{ - if (serverFeatures == nullptr) - return false; - const std::string args = event.args; - Being *being = findBeing(args, false); - if ((being == nullptr) && Net::getNetworkType() == ServerType::TMWATHENA) - { - if (whoIsOnline != nullptr) - { - const std::set &players = - whoIsOnline->getOnlineNicks(); - if (players.find(args) != players.end()) - { - if (buySellHandler != nullptr) - buySellHandler->requestSellList(args); - return true; - } - } - return false; - } - - if (being == nullptr) - being = findBeing(args, true); - - if (being == nullptr) - return false; - - if (being->getType() == ActorType::Npc) - { - if (npcHandler != nullptr) - npcHandler->buy(being); - return true; - } - else if (being->getType() == ActorType::Player) - { - if (vendingHandler != nullptr && - Net::getNetworkType() != ServerType::TMWATHENA) - { - vendingHandler->open(being); - } - else if (buySellHandler != nullptr) - { - buySellHandler->requestSellList(being->getName()); - } - return true; - } - return false; -} - -impHandler(sell) -{ - if (serverFeatures == nullptr) - return false; - - const std::string args = event.args; - Being *being = findBeing(args, false); - if (being == nullptr && - Net::getNetworkType() == ServerType::TMWATHENA) - { - if (whoIsOnline != nullptr) - { - const std::set &players = - whoIsOnline->getOnlineNicks(); - if (players.find(args) != players.end()) - { - if (buySellHandler != nullptr) - buySellHandler->requestBuyList(args); - return true; - } - } - return false; - } - - if (being == nullptr) - being = findBeing(args, true); - - if (being == nullptr) - return false; - - if (being->getType() == ActorType::Npc) - { - if (npcHandler != nullptr) - npcHandler->sell(being->getId()); - return true; - } - else if (being->getType() == ActorType::Player) - { - if ((buyingStoreHandler != nullptr) && - Net::getNetworkType() != ServerType::TMWATHENA) - { - buyingStoreHandler->open(being); - } - else if (buySellHandler != nullptr) - { - buySellHandler->requestBuyList(being->getName()); - } - return true; - } - return false; -} - -impHandler(talk) -{ - const std::string args = event.args; - Being *being = nullptr; - - if (!args.empty() && args[0] == ':') - { - being = actorManager->findBeing(fromInt(atoi( - args.substr(1).c_str()), BeingId)); - } - else - { - being = findBeing(args, true); - } - - if (being == nullptr) - return false; - - if (being->canTalk()) - { - being->talkTo(); - } - else if (being->getType() == ActorType::Player) - { - CREATEWIDGET(BuySellDialog, - being->getName()); - } - return true; -} - -impHandler0(stopAttack) -{ - if (localPlayer != nullptr) - { - localPlayer->stopAttack(false); - // not consume if target attack key pressed - if (inputManager.isActionActive(InputAction::TARGET_ATTACK)) - return false; - return true; - } - return false; -} - -impHandler0(untarget) -{ - if (localPlayer != nullptr) - { - localPlayer->untarget(); - return true; - } - return false; -} - -impHandler(attack) -{ - if ((localPlayer == nullptr) || (actorManager == nullptr)) - return false; - - Being *target = nullptr; - std::string args = event.args; - if (!args.empty()) - { - if (args[0] != ':') - { - target = actorManager->findNearestByName(args, - ActorType::Unknown); - } - else - { - target = actorManager->findBeing(fromInt(atoi( - args.substr(1).c_str()), BeingId)); - if (target != nullptr && - target->getType() != ActorType::Monster) - { - target = nullptr; - } - } - } - if (target == nullptr) - target = localPlayer->getTarget(); - else - localPlayer->setTarget(target); - if (target != nullptr) - localPlayer->attack(target, true, false); - return true; -} - -impHandler(targetAttack) -{ - if ((localPlayer != nullptr) && (actorManager != nullptr)) - { - Being *target = nullptr; - std::string args = event.args; - const bool newTarget = !inputManager.isActionActive( - InputAction::STOP_ATTACK); - - if (!args.empty()) - { - if (args[0] != ':') - { - target = actorManager->findNearestByName(args, - ActorType::Unknown); - } - else - { - target = actorManager->findBeing(fromInt(atoi( - args.substr(1).c_str()), BeingId)); - if (target != nullptr && - target->getType() != ActorType::Monster) - { - target = nullptr; - } - } - } - - if ((target == nullptr) && (settings.targetingType == 0U)) - target = localPlayer->getTarget(); - - if (target == nullptr) - { - target = actorManager->findNearestLivingBeing( - localPlayer, 90, ActorType::Monster, AllowSort_true); - } - - localPlayer->attack2(target, newTarget, false); - return true; - } - return false; -} - -impHandler0(attackHuman) -{ - if ((actorManager == nullptr) || (localPlayer == nullptr)) - return false; - - Being *const target = actorManager->findNearestPvpPlayer(); - if (target != nullptr) - { - localPlayer->setTarget(target); - localPlayer->attack2(target, true, false); - } - return true; -} - -impHandler0(safeVideoMode) -{ - WindowManager::setFullScreen(false); - - return true; -} - -impHandler0(stopSit) -{ - if (localPlayer != nullptr) - { - localPlayer->stopAttack(false); - // not consume if target attack key pressed - if (inputManager.isActionActive(InputAction::TARGET_ATTACK)) - return false; - if (localPlayer->getTarget() == nullptr) - { - doSit(); - return true; - } - return true; - } - return false; -} - -impHandler0(showKeyboard) -{ -#if defined(ANDROID) || defined(__SWITCH__) -#ifdef USE_SDL2 - if (SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE) - SDL_StopTextInput(); - else - SDL_StartTextInput(); -#else // USE_SDL2 - - SDL_ANDROID_ToggleScreenKeyboardTextInput(nullptr); -#endif // USE_SDL2 - - return true; -#else // ANDROID - - return false; -#endif // ANDROID -} - -impHandler0(showWindows) -{ - if (popupMenu != nullptr) - { - popupMenu->showWindowsPopup(); - return true; - } - return false; -} - -impHandler0(openTrade) -{ - const Being *const being = localPlayer->getTarget(); - if ((being != nullptr) && being->getType() == ActorType::Player) - { - if (tradeHandler != nullptr) - tradeHandler->request(being); - tradePartnerName = being->getName(); - if (tradeWindow != nullptr) - tradeWindow->clear(); - return true; - } - return false; -} - -impHandler0(ipcToggle) -{ - if (ipc != nullptr) - { - IPC::stop(); - if (ipc == nullptr) - { - debugChatTab->chatLog("IPC service stopped.", - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - else - { - debugChatTab->chatLog("Unable to stop IPC service.", - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - } - else - { - IPC::start(); - if (ipc != nullptr) - { - debugChatTab->chatLog( - strprintf("IPC service available on port %d", ipc->getPort()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - else - { - debugChatTab->chatLog("Unable to start IPC service", - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - } - return true; -} - -impHandler(where) -{ - ChatTab *const tab = event.tab != nullptr ? event.tab : debugChatTab; - if (tab == nullptr) - return false; - std::ostringstream where; - where << Game::instance()->getCurrentMapName() << ", coordinates: " - << ((localPlayer->getPixelX() - mapTileSize / 2) / mapTileSize) - << ", " << ((localPlayer->getPixelY() - mapTileSize) / mapTileSize); - tab->chatLog(where.str(), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; -} - -impHandler0(who) -{ - if (chatHandler != nullptr) - chatHandler->who(); - return true; -} - -impHandler0(cleanGraphics) -{ - ResourceManager::clearCache(); - - if (debugChatTab != nullptr) - { - // TRANSLATORS: clear graphics command message - debugChatTab->chatLog(_("Cache cleared"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; -} - -impHandler0(cleanFonts) -{ - if (gui != nullptr) - gui->clearFonts(); - if (debugChatTab != nullptr) - { - // TRANSLATORS: clear fonts cache message - debugChatTab->chatLog(_("Cache cleared"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; -} - -impHandler(trade) -{ - if (actorManager == nullptr) - return false; - - const Being *being = actorManager->findBeingByName( - event.args, ActorType::Player); - if (being == nullptr) - being = localPlayer->getTarget(); - if (being != nullptr) - { - if (tradeHandler != nullptr) - tradeHandler->request(being); - tradePartnerName = being->getName(); - if (tradeWindow != nullptr) - tradeWindow->clear(); - } - return true; -} - -impHandler0(priceLoad) -{ - if (shopWindow != nullptr) - { - shopWindow->loadList(); - return true; - } - return false; -} - -impHandler0(priceSave) -{ - if (shopWindow != nullptr) - { - shopWindow->saveList(); - return true; - } - return false; -} - -impHandler0(cacheInfo) -{ - if ((chatWindow == nullptr) || (debugChatTab == nullptr)) - return false; - -/* - Font *const font = chatWindow->getFont(); - if (!font) - return; - - const TextChunkList *const cache = font->getCache(); - if (!cache) - return; - - unsigned int all = 0; - // TRANSLATORS: chat fonts message - debugChatTab->chatLog(_("font cache size"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - std::string str; - for (int f = 0; f < 256; f ++) - { - if (!cache[f].size) - { - const unsigned int sz = CAST_S32(cache[f].size); - all += sz; - str.append(strprintf("%d: %u, ", f, sz)); - } - } - debugChatTab->chatLog(str, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - // TRANSLATORS: chat fonts message - debugChatTab->chatLog(strprintf("%s %d", _("Cache size:"), all), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); -#ifdef DEBUG_FONT_COUNTERS - debugChatTab->chatLog("", - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - debugChatTab->chatLog(strprintf("%s %d", - // TRANSLATORS: chat fonts message - _("Created:"), font->getCreateCounter()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - debugChatTab->chatLog(strprintf("%s %d", - // TRANSLATORS: chat fonts message - _("Deleted:"), font->getDeleteCounter()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); -#endif -*/ - return true; -} - -impHandler0(disconnect) -{ - if (!settings.options.uniqueSession) - { - if (gameHandler != nullptr) - gameHandler->disconnect2(); - return true; - } - else - return false; -} - -impHandler(undress) -{ - if ((actorManager == nullptr) || (localPlayer == nullptr)) - return false; - - const std::string args = event.args; - StringVect pars; - if (!splitParameters(pars, args, " ,", '\"')) - return false; - Being *target = nullptr; - const size_t sz = pars.size(); - if (sz == 0) - { - target = localPlayer->getTarget(); - } - else - { - if (pars[0][0] == ':') - { - target = actorManager->findBeing(fromInt(atoi( - pars[0].substr(1).c_str()), BeingId)); - if ((target != nullptr) && target->getType() == ActorType::Monster) - target = nullptr; - } - else - { - target = actorManager->findNearestByName(args, - ActorType::Unknown); - } - } - - if (sz == 2) - { - if (target != nullptr) - { - const int itemId = atoi(pars[1].c_str()); - target->undressItemById(itemId); - } - } - else - { - if ((target != nullptr) && (beingHandler != nullptr)) - beingHandler->undress(target); - } - - return true; -} - -impHandler0(dirs) -{ - if (debugChatTab == nullptr) - return false; - - debugChatTab->chatLog("config directory: " - + settings.configDir, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - debugChatTab->chatLog("logs directory: " - + settings.localDataDir, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - debugChatTab->chatLog("screenshots directory: " - + settings.screenshotDir, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - debugChatTab->chatLog("temp directory: " - + settings.tempDir, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; -} - -impHandler0(uptime) -{ - if (debugChatTab == nullptr) - return false; - - if (cur_time < start_time) - { - // TRANSLATORS: uptime command - debugChatTab->chatLog(strprintf(_("Client uptime: %s"), "unknown"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - else - { - // TRANSLATORS: uptime command - debugChatTab->chatLog(strprintf(_("Client uptime: %s"), - timeDiffToString(CAST_S32(cur_time - start_time)).c_str()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; -} - -#ifdef DEBUG_DUMP_LEAKS1 -static void showRes(std::string str, ResourceManager::Resources *res) -{ - if (!res) - return; - - str.append(toString(res->size())); - if (debugChatTab) - { - debugChatTab->chatLog(str, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - logger->log(str); - ResourceManager::ResourceIterator iter = res->begin(); - const ResourceManager::ResourceIterator iter_end = res->end(); - while (iter != iter_end) - { - if (iter->second && iter->second->mRefCount) - { - char type = ' '; - char isNew = 'N'; - if (iter->second->getDumped()) - isNew = 'O'; - else - iter->second->setDumped(true); - - SubImage *const subImage = dynamic_cast( - iter->second); - Image *const image = dynamic_cast(iter->second); - int id = 0; - if (subImage) - type = 'S'; - else if (image) - type = 'I'; - if (image) - id = image->getGLImage(); - logger->log("Resource %c%c: %s (%d) id=%d", type, - isNew, iter->second->getIdPath().c_str(), - iter->second->mRefCount, id); - } - ++ iter; - } -} - -impHandler(dump) -{ - if (!debugChatTab) - return false; - - if (!event.args.empty()) - { - ResourceManager::Resources *res = ResourceManager::getResources(); - // TRANSLATORS: dump command - showRes(_("Resource images:"), res); - res = ResourceManager::getOrphanedResources(); - // TRANSLATORS: dump command - showRes(_("Orphaned resource images:"), res); - } - else - { - ResourceManager::Resources *res = ResourceManager::getResources(); - // TRANSLATORS: dump command - debugChatTab->chatLog(_("Resource images:") + toString(res->size()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - res = ResourceManager::getOrphanedResources(); - // TRANSLATORS: dump command - debugChatTab->chatLog(_("Orphaned resource images:") - + toString(res->size()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; -} - -#elif defined ENABLE_MEM_DEBUG -impHandler0(dump) -{ - nvwa::check_leaks(); - return true; -} -#else // DEBUG_DUMP_LEAKS1 - -impHandler0(dump) -{ - return true; -} -#endif // DEBUG_DUMP_LEAKS1 - -impHandler0(serverIgnoreAll) -{ - if (chatHandler != nullptr) - chatHandler->ignoreAll(); - return true; -} - -impHandler0(serverUnIgnoreAll) -{ - if (chatHandler != nullptr) - chatHandler->unIgnoreAll(); - return true; -} - -PRAGMA6(GCC diagnostic push) -PRAGMA6(GCC diagnostic ignored "-Wnull-dereference") -PRAGMA11(GCC diagnostic push) -PRAGMA11(GCC diagnostic ignored "-Warray-bounds") -impHandler0(error) -{ - int *const ptr = nullptr; - *(ptr + 1) = 20; -// logger->log("test %d", *ptr); - exit(1); -} -PRAGMA11(GCC diagnostic pop) -PRAGMA6(GCC diagnostic pop) - -impHandler(dumpGraphics) -{ - std::string str = strprintf("%s,%s,%dX%dX%d,", PACKAGE_OS, SMALL_VERSION, - mainGraphics->getWidth(), mainGraphics->getHeight(), - mainGraphics->getBpp()); - - if (mainGraphics->getFullScreen()) - str.append("F"); - else - str.append("W"); - if (mainGraphics->getHWAccel()) - str.append("H"); - else - str.append("S"); - - if (mainGraphics->getDoubleBuffer()) - str.append("D"); - else - str.append("_"); - -#if defined USE_OPENGL - str.append(strprintf(",%d", mainGraphics->getOpenGL())); -#else // defined USE_OPENGL - - str.append(",0"); -#endif // defined USE_OPENGL - - str.append(strprintf(",%f,", static_cast(settings.guiAlpha))) - .append(config.getBoolValue("adjustPerfomance") ? "1" : "0") - .append(config.getBoolValue("alphaCache") ? "1" : "0") - .append(config.getBoolValue("enableMapReduce") ? "1" : "0") - .append(config.getBoolValue("beingopacity") ? "1" : "0") - .append(",") - .append(config.getBoolValue("enableAlphaFix") ? "1" : "0") - .append(config.getBoolValue("disableAdvBeingCaching") ? "1" : "0") - .append(config.getBoolValue("disableBeingCaching") ? "1" : "0") - .append(config.getBoolValue("particleeffects") ? "1" : "0") - .append(strprintf(",%d-%d", fps, config.getIntValue("fpslimit"))); - outStringNormal(event.tab, str, str); - return true; -} - -impHandler0(dumpEnvironment) -{ - logger->log1("Start environment variables"); - for (char **env = environ; *env != nullptr; ++ env) - logger->log1(*env); - logger->log1("End environment variables"); - if (debugChatTab != nullptr) - { - // TRANSLATORS: dump environment command - debugChatTab->chatLog(_("Environment variables dumped"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; -} - -impHandler(dumpTests) -{ - const std::string str = config.getStringValue("testInfo"); - outStringNormal(event.tab, str, str); - return true; -} - -impHandler0(dumpOGL) -{ -#ifdef USE_OPENGL -#if !defined(ANDROID) && !defined(__native_client__) && !defined(__SWITCH__) - NormalOpenGLGraphics::dumpSettings(); -#endif // !defined(ANDROID) && !defined(__native_client__) && - // !defined(__SWITCH__) -#endif // USE_OPENGL - - return true; -} - -#ifdef USE_OPENGL -impHandler(dumpGL) -{ - std::string str = graphicsManager.getGLVersion(); - outStringNormal(event.tab, str, str); - return true; -} -#else // USE_OPENGL - -impHandler0(dumpGL) -{ - return true; -} -#endif // USE_OPENGL - -impHandler(dumpMods) -{ - std::string str = "enabled mods: " + serverConfig.getValue("mods", ""); - outStringNormal(event.tab, str, str); - return true; -} - -#if defined USE_OPENGL && defined DEBUG_SDLFONT -impHandler0(testSdlFont) -{ - Font *font = new Font("fonts/dejavusans.ttf", 18, TTF_STYLE_NORMAL); - timespec time1; - timespec time2; - NullOpenGLGraphics *nullGraphics = new NullOpenGLGraphics; - STD_VECTOR data; - volatile int width = 0; - - for (int f = 0; f < 300; f ++) - data.push_back("test " + toString(f) + "string"); - nullGraphics->beginDraw(); - - clock_gettime(CLOCK_MONOTONIC, &time1); - Color color(0, 0, 0, 255); - - for (int f = 0; f < 500; f ++) - { - FOR_EACH (STD_VECTOR::const_iterator, it, data) - { - width += font->getWidth(*it); - font->drawString(nullGraphics, color, color, *it, 10, 10); - } - FOR_EACH (STD_VECTOR::const_iterator, it, data) - font->drawString(nullGraphics, color, color, *it, 10, 10); - - font->doClean(); - } - - clock_gettime(CLOCK_MONOTONIC, &time2); - - delete nullGraphics; - delete font; - - int64_t diff = (static_cast( - time2.tv_sec) * 1000000000LL + static_cast( - time2.tv_nsec)) / 100000 - (static_cast( - time1.tv_sec) * 1000000000LL + static_cast( - time1.tv_nsec)) / 100000; - if (debugChatTab) - { - debugChatTab->chatLog("sdlfont time: " + toString(diff), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; -} -#endif // defined USE_OPENGL && defined DEBUG_SDLFONT - -impHandler0(createItems) -{ - BuyDialog *const dialog = CREATEWIDGETR0(BuyDialog); - const ItemDB::ItemInfos &items = ItemDB::getItemInfos(); - FOR_EACH (ItemDB::ItemInfos::const_iterator, it, items) - { - const ItemInfo *const info = (*it).second; - if (info == nullptr) - continue; - const int id = info->getId(); - if (id <= 500) - continue; - - dialog->addItem(id, - ItemType::Unknown, - ItemColor_one, - 100, - 0); - } - dialog->sort(); - return true; -} - -impHandler(createItem) -{ - int id = 0; - int amount = 0; - - if (adminHandler == nullptr) - return false; - - if (parse2Int(event.args, id, amount)) - adminHandler->createItems(id, ItemColor_one, amount); - else - adminHandler->createItems(atoi(event.args.c_str()), ItemColor_one, 1); - return true; -} - -impHandler(uploadConfig) -{ - // TRANSLATORS: upload config chat message - uploadFile(_("Config uploaded to:"), - config.getFileName(), - "?xml", - event.tab); - return true; -} - -impHandler(uploadServerConfig) -{ - // TRANSLATORS: upload config chat message - uploadFile(_("Server config Uploaded to:"), - serverConfig.getFileName(), - "?xml", - event.tab); - return true; -} - -impHandler(uploadLog) -{ - // TRANSLATORS: upload log chat message - uploadFile(_("Log uploaded to:"), - settings.logFileName, - "", - event.tab); - return true; -} - -impHandler0(mercenaryFire) -{ - if (mercenaryHandler != nullptr) - mercenaryHandler->fire(); - return true; -} - -impHandler0(mercenaryToMaster) -{ - if (mercenaryHandler != nullptr) - mercenaryHandler->moveToMaster(); - return true; -} - -impHandler0(homunculusToMaster) -{ - if (homunculusHandler != nullptr) - homunculusHandler->moveToMaster(); - return true; -} - -impHandler0(homunculusFeed) -{ - if (homunculusHandler != nullptr) - homunculusHandler->feed(); - return true; -} - -impHandler(useItem) -{ - StringVect pars; - if (!splitParameters(pars, event.args, " ,", '\"')) - return false; - const int sz = CAST_S32(pars.size()); - if (sz < 1) - return false; - - const int itemId = atoi(pars[0].c_str()); - - if (itemId < SPELL_MIN_ID) - { - const Inventory *const inv = PlayerInfo::getInventory(); - if (inv != nullptr) - { - ItemColor color = ItemColor_one; - int16_t useType = 0; - StringVect pars2; - if (!splitParameters(pars2, pars[0], " ,", '\"')) - return false; - const int sz2 = CAST_S32(pars2.size()); - if (sz2 < 1) - return false; - if (sz2 >= 2) - color = fromInt(atoi(pars2[1].c_str()), ItemColor); - if (sz >= 2) - useType = CAST_S16(atoi(pars[1].c_str())); - const Item *const item = inv->findItem(itemId, - color); - PlayerInfo::useEquipItem(item, useType, Sfx_true); - } - } - else if (itemId < SKILL_MIN_ID && (spellManager != nullptr)) - { - spellManager->useItem(itemId); - } - else if (skillDialog != nullptr) - { - // +++ probably need get data parameter from args - skillDialog->useItem(itemId, - fromBool(config.getBoolValue("skillAutotarget"), AutoTarget), - 0, - std::string()); - } - return true; -} - -impHandler(useItemInv) -{ - int param1 = 0; - int param2 = 0; - const std::string args = event.args; - if (parse2Int(args, param1, param2)) - { - Item *const item = getItemByInvIndex(param1, - InventoryType::Inventory); - PlayerInfo::useEquipItem(item, CAST_S16(param2), Sfx_true); - } - else - { - Item *const item = getItemByInvIndex(atoi(event.args.c_str()), - InventoryType::Inventory); - PlayerInfo::useEquipItem(item, 0, Sfx_true); - } - return true; -} - -impHandler(invToStorage) -{ - Item *item = nullptr; - const int amount = getAmountFromEvent(event, item, - InventoryType::Inventory); - if (item == nullptr) - return true; - if (amount != 0) - { - if (inventoryHandler != nullptr) - { - inventoryHandler->moveItem2(InventoryType::Inventory, - item->getInvIndex(), - amount, - InventoryType::Storage); - } - } - else - { - ItemAmountWindow::showWindow(ItemAmountWindowUsage::StoreAdd, - inventoryWindow, - item, - 0, - 0); - } - return true; -} - -impHandler(tradeAdd) -{ - Item *item = nullptr; - const int amount = getAmountFromEvent(event, item, - InventoryType::Inventory); - if ((item == nullptr) || PlayerInfo::isItemProtected(item->getId())) - return true; - - if (amount != 0) - { - if (tradeWindow != nullptr) - tradeWindow->tradeItem(item, amount, true); - } - else - { - ItemAmountWindow::showWindow(ItemAmountWindowUsage::TradeAdd, - tradeWindow, - item, - 0, - 0); - } - return true; -} - -impHandler(storageToInv) -{ - Item *item = nullptr; - const int amount = getAmountFromEvent(event, item, InventoryType::Storage); - if (amount != 0) - { - if ((inventoryHandler != nullptr) && (item != nullptr)) - { - inventoryHandler->moveItem2(InventoryType::Storage, - item->getInvIndex(), - amount, - InventoryType::Inventory); - } - } - else - { - ItemAmountWindow::showWindow(ItemAmountWindowUsage::StoreRemove, - storageWindow, - item, - 0, - 0); - } - return true; -} - -impHandler(protectItem) -{ - const int id = atoi(event.args.c_str()); - if (id > 0) - PlayerInfo::protectItem(id); - return true; -} - -impHandler(unprotectItem) -{ - const int id = atoi(event.args.c_str()); - if (id > 0) - PlayerInfo::unprotectItem(id); - return true; -} - -impHandler(kick) -{ - if ((localPlayer == nullptr) || (actorManager == nullptr)) - return false; - - Being *target = nullptr; - std::string args = event.args; - if (!args.empty()) - { - if (args[0] != ':') - { - target = actorManager->findNearestByName(args, - ActorType::Unknown); - } - else - { - target = actorManager->findBeing(fromInt(atoi( - args.substr(1).c_str()), BeingId)); - } - } - if (target == nullptr) - target = localPlayer->getTarget(); - if ((target != nullptr) && (adminHandler != nullptr)) - adminHandler->kick(target->getId()); - return true; -} - -impHandler0(clearDrop) -{ - if (dropShortcut != nullptr) - dropShortcut->clear(true); - return true; -} - -impHandler0(testInfo) -{ - if (actorManager != nullptr) - { - logger->log("actors count: %d", CAST_S32( - actorManager->size())); - return true; - } - return false; -} - -impHandler(craftKey) -{ - const int slot = (event.action - InputAction::CRAFT_1); - if (slot >= 0 && slot < 9) - { - if (inventoryWindow != nullptr) - inventoryWindow->moveItemToCraft(slot); - return true; - } - return false; -} - -impHandler0(resetGameModifiers) -{ - GameModifiers::resetModifiers(); - return true; -} - -impHandler(barToChat) -{ - if (chatWindow != nullptr) - { - chatWindow->addInputText(event.args, - true); - return true; - } - return false; -} - -impHandler(seen) -{ - if (actorManager == nullptr) - return false; - - ChatTab *tab = event.tab; - if (tab == nullptr) - tab = localChatTab; - if (tab == nullptr) - return false; - - if (config.getBoolValue("enableIdCollecting") == false) - { - // TRANSLATORS: last seen disabled warning - tab->chatLog(_("Last seen disabled. " - "Enable in players / collect players ID and seen log."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - } - - const std::string name = event.args; - if (name.empty()) - return false; - - std::string dir = settings.usersDir; - dir.append(stringToHexPath(name)).append("/seen.txt"); - if (Files::existsLocal(dir)) - { - StringVect lines; - Files::loadTextFileLocal(dir, lines); - if (lines.size() < 3) - { - // TRANSLATORS: last seen error - tab->chatLog(_("You have never seen this nick."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - } - const std::string message = strprintf( - // TRANSLATORS: last seen message - _("Last seen for %s: %s"), - name.c_str(), - lines[2].c_str()); - tab->chatLog(message, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - else - { - // TRANSLATORS: last seen error - tab->chatLog(_("You have not seen this nick before."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - - return true; -} - -impHandler(dumpMemoryUsage) -{ - if (event.tab != nullptr) - MemoryManager::printAllMemory(event.tab); - else - MemoryManager::printAllMemory(localChatTab); - return true; -} - -impHandler(setEmoteType) -{ - const std::string &args = event.args; - if (args == "player" || args.empty()) - { - settings.emoteType = EmoteType::Player; - } - else if (args == "pet") - { - settings.emoteType = EmoteType::Pet; - } - else if (args == "homun" || args == "homunculus") - { - settings.emoteType = EmoteType::Homunculus; - } - else if (args == "merc" || args == "mercenary") - { - settings.emoteType = EmoteType::Mercenary; - } - return true; -} - -} // namespace Actions diff --git a/src/progs/manaplus/actions/chat.cpp b/src/progs/manaplus/actions/chat.cpp deleted file mode 100644 index 22d0656cb..000000000 --- a/src/progs/manaplus/actions/chat.cpp +++ /dev/null @@ -1,839 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/chat.h" - -#include "configuration.h" - -#include "actions/actiondef.h" - -#include "being/localplayer.h" - -#include "gui/sdlinput.h" - -#include "gui/windows/chatwindow.h" - -#include "listeners/inputactionreplaylistener.h" - -#include "net/charserverhandler.h" -#include "net/chathandler.h" -#include "net/clanhandler.h" -#include "net/guildhandler.h" -#include "net/net.h" -#include "net/partyhandler.h" - -#ifdef TMWA_SUPPORT -#include "net/tmwa/guildmanager.h" -#endif // TMWA_SUPPORT - -#include "resources/iteminfo.h" - -#include "resources/db/itemdb.h" - -#include "utils/booleanoptions.h" -#include "utils/chatutils.h" -#include "utils/parameters.h" - -#include "utils/translation/podict.h" - -#include "debug.h" - -const int DEFAULT_CHAT_WINDOW_SCROLL = 7; - -namespace Actions -{ - -static void outString(ChatTab *const tab, - const std::string &str, - const std::string &def) -{ - if (tab == nullptr) - { - if (chatHandler != nullptr) - chatHandler->talk(def); - return; - } - - switch (tab->getType()) - { - case ChatTabType::CLAN: - { - if (clanHandler != nullptr) - clanHandler->chat(str); - break; - } - case ChatTabType::PARTY: - { - if (partyHandler != nullptr) - partyHandler->chat(str); - break; - } - case ChatTabType::GUILD: - { - if ((guildHandler == nullptr) || (localPlayer == nullptr)) - return; - const Guild *const guild = localPlayer->getGuild(); - if (guild != nullptr) - { -#ifdef TMWA_SUPPORT - if (guild->getServerGuild()) - { - if (Net::getNetworkType() == ServerType::TMWATHENA) - return; - guildHandler->chat(str); - } - else if (guildManager != nullptr) - { - guildManager->chat(str); - } -#else // TMWA_SUPPORT - - if (guild->getServerGuild()) - guildHandler->chat(str); -#endif // TMWA_SUPPORT - } - break; - } - case ChatTabType::CHANNEL: - case ChatTabType::GM: - case ChatTabType::TRADE: - tab->chatInput(str); - break; - default: - case ChatTabType::UNKNOWN: - case ChatTabType::INPUT: - case ChatTabType::WHISPER: - case ChatTabType::DEBUG: - case ChatTabType::BATTLE: - case ChatTabType::LANG: - if (chatHandler != nullptr) - chatHandler->talk(str); - break; - } -} - -impHandler0(toggleChat) -{ - return chatWindow != nullptr ? chatWindow->requestChatFocus() : false; -} - -impHandler0(prevChatTab) -{ - if (chatWindow != nullptr) - { - chatWindow->prevTab(); - return true; - } - return false; -} - -impHandler0(nextChatTab) -{ - if (chatWindow != nullptr) - { - chatWindow->nextTab(); - return true; - } - return false; -} - -impHandler0(closeChatTab) -{ - if (chatWindow != nullptr) - { - chatWindow->closeTab(); - return true; - } - return false; -} - -impHandler0(closeAllChatTabs) -{ - if (chatWindow != nullptr) - { - chatWindow->removeAllWhispers(); - chatWindow->saveState(); - return true; - } - return false; -} - -impHandler0(ignoreAllWhispers) -{ - if (chatWindow != nullptr) - { - chatWindow->ignoreAllWhispers(); - chatWindow->saveState(); - return true; - } - return false; -} - -impHandler0(scrollChatUp) -{ - if ((chatWindow != nullptr) && chatWindow->isWindowVisible()) - { - chatWindow->scroll(-DEFAULT_CHAT_WINDOW_SCROLL); - return true; - } - return false; -} - -impHandler0(scrollChatDown) -{ - if ((chatWindow != nullptr) && chatWindow->isWindowVisible()) - { - chatWindow->scroll(DEFAULT_CHAT_WINDOW_SCROLL); - return true; - } - return false; -} - -static bool splitWhisper(const std::string &args, - std::string &recvnick, - std::string &message) -{ - if (args.substr(0, 1) == "\"") - { - const size_t pos = args.find('"', 1); - if (pos != std::string::npos) - { - recvnick = args.substr(1, pos - 1); - if (pos + 2 < args.length()) - message = args.substr(pos + 2, args.length()); - } - } - else - { - const size_t pos = args.find(' '); - if (pos != std::string::npos) - { - recvnick = args.substr(0, pos); - if (pos + 1 < args.length()) - message = args.substr(pos + 1, args.length()); - } - else - { - recvnick = std::string(args); - message.clear(); - } - } - - trim(message); - - if (message.length() > 0) - { - std::string playerName = localPlayer->getName(); - std::string tempNick = recvnick; - - toLower(playerName); - toLower(tempNick); - - if (tempNick == playerName || args.empty()) - return false; - - return true; - } - return false; -} - -impHandler(msg) -{ - std::string recvnick; - std::string message; - - if (splitWhisper(event.args, recvnick, message)) - { - if (chatWindow == nullptr) - return false; - ChatTab *const tab = chatWindow->addChatTab(recvnick, false, true); - if (tab != nullptr) - { - chatWindow->saveState(); - tab->chatInput(message); - } - } - else - { - if (event.tab != nullptr) - { - event.tab->chatLog( - // TRANSLATORS: whisper send - _("Cannot send empty whisper or channel message!"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - } - return true; -} - -impHandler(msgText) -{ - if (chatWindow == nullptr) - return false; - - if (config.getBoolValue("whispertab")) - { - chatWindow->localChatInput("/q " + event.args); - } - else - { - chatWindow->addInputText( - std::string("/w \"").append(event.args).append("\" "), - true); - } - return true; -} - -impHandler(msg2) -{ - std::string recvnick; - std::string message; - - if (chatHandler != nullptr && - splitWhisper(event.args, recvnick, message)) - { - chatHandler->privateMessage(recvnick, message); - } - return true; -} - -impHandler(query) -{ - const std::string &args = event.args; - if (chatWindow != nullptr) - { - if (chatWindow->addChatTab(args, true, true) != nullptr) - { - chatWindow->saveState(); - return true; - } - } - - if (event.tab != nullptr) - { - // TRANSLATORS: new whisper or channel query - event.tab->chatLog(strprintf(_("Cannot create a whisper tab " - "\"%s\"! It probably already exists."), - args.c_str()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; -} - -impHandler0(clearChatTab) -{ - if (chatWindow != nullptr) - { - chatWindow->clearTab(); - return true; - } - return false; -} - -impHandler(createParty) -{ - if (partyHandler == nullptr) - return false; - - if (event.args.empty()) - { - // TRANSLATORS: dialog header - inputActionReplayListener.openDialog(_("Create party"), - "", - InputAction::CREATE_PARTY); - } - else - { - partyHandler->create(event.args); - } - return true; -} - -impHandler(createGuild) -{ - if ((guildHandler == nullptr) || - Net::getNetworkType() == ServerType::TMWATHENA) - { - return false; - } - - if (event.args.empty()) - { - // TRANSLATORS: dialog header - inputActionReplayListener.openDialog(_("Create guild"), - "", - InputAction::CREATE_GUILD); - } - else - { - guildHandler->create(event.args); - } - return true; -} - -impHandler(party) -{ - if (!event.args.empty()) - { - if (partyHandler != nullptr) - partyHandler->invite(event.args); - } - else - { - if (event.tab != nullptr) - { - // TRANSLATORS: party invite message - event.tab->chatLog(_("Please specify a name."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - } - return true; -} - -impHandler(guild) -{ - if ((guildHandler == nullptr) || (localPlayer == nullptr)) - return false; - - const std::string args = event.args; - if (!args.empty()) - { - const Guild *const guild = localPlayer->getGuild(); - if (guild != nullptr) - { -#ifdef TMWA_SUPPORT - if (guild->getServerGuild()) - guildHandler->invite(args); - else if (guildManager != nullptr) - GuildManager::invite(args); -#else // TMWA_SUPPORT - - guildHandler->invite(args); -#endif // TMWA_SUPPORT - } - } - else - { - if (event.tab != nullptr) - { - // TRANSLATORS: guild invite message - event.tab->chatLog(_("Please specify a name."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - else if (localChatTab != nullptr) - { - // TRANSLATORS: guild invite message - localChatTab->chatLog(_("Please specify a name."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - } - return true; -} - -impHandler(me) -{ - outString(event.tab, textToMe(event.args), event.args); - return true; -} - -impHandler(toggle) -{ - if (event.args.empty()) - { - if ((chatWindow != nullptr) && (event.tab != nullptr)) - { - event.tab->chatLog(chatWindow->getReturnTogglesChat() ? - // TRANSLATORS: message from toggle chat command - _("Return toggles chat.") : _("Message closes chat."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; - } - - switch (parseBoolean(event.args)) - { - case 1: - if (event.tab != nullptr) - { - // TRANSLATORS: message from toggle chat command - event.tab->chatLog(_("Return now toggles chat."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - if (chatWindow != nullptr) - chatWindow->setReturnTogglesChat(true); - return true; - case 0: - if (event.tab != nullptr) - { - // TRANSLATORS: message from toggle chat command - event.tab->chatLog(_("Message now closes chat."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - if (chatWindow != nullptr) - chatWindow->setReturnTogglesChat(false); - return true; - case -1: - if (event.tab != nullptr) - { - event.tab->chatLog(strprintf(BOOLEAN_OPTIONS, "toggle"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; - default: - return true; - } -} - -impHandler(kickParty) -{ - if (!event.args.empty()) - { - if (partyHandler != nullptr) - partyHandler->kick(event.args); - } - else - { - if (event.tab != nullptr) - { - // TRANSLATORS: party kick message - event.tab->chatLog(_("Please specify a name."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - } - return true; -} - -impHandler(kickGuild) -{ - if (!event.args.empty()) - { - if (localPlayer != nullptr) - { - const Guild *const guild = localPlayer->getGuild(); - if (guild != nullptr) - { - if (guild->getServerGuild()) - { - if (guildHandler != nullptr) - guildHandler->kick(guild->getMember(event.args), ""); - } -#ifdef TMWA_SUPPORT - else if (guildManager != nullptr) - { - GuildManager::kick(event.args); - } -#endif // TMWA_SUPPORT - } - } - } - else - { - if (event.tab != nullptr) - { - // TRANSLATORS: party kick message - event.tab->chatLog(_("Please specify a name."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - } - return true; -} - -impHandler(addText) -{ - if (chatWindow != nullptr) - chatWindow->addInputText(event.args, true); - return true; -} - -impHandler0(clearChat) -{ - if (chatWindow != nullptr) - chatWindow->clearTab(); - return true; -} - -impHandler0(chatGeneralTab) -{ - if (chatWindow != nullptr) - chatWindow->selectTabByType(ChatTabType::INPUT); - return true; -} - -impHandler0(chatDebugTab) -{ - if (chatWindow != nullptr) - chatWindow->selectTabByType(ChatTabType::DEBUG); - return true; -} - -impHandler0(chatBattleTab) -{ - if (chatWindow != nullptr) - chatWindow->selectTabByType(ChatTabType::BATTLE); - return true; -} - -impHandler0(chatTradeTab) -{ - if (chatWindow != nullptr) - chatWindow->selectTabByType(ChatTabType::TRADE); - return true; -} - -impHandler0(chatLangTab) -{ - if (chatWindow != nullptr) - chatWindow->selectTabByType(ChatTabType::LANG); - return true; -} - -impHandler0(chatGmTab) -{ - if (chatWindow != nullptr) - chatWindow->selectTabByType(ChatTabType::GM); - return true; -} - -impHandler0(chatPartyTab) -{ - if (chatWindow != nullptr) - chatWindow->selectTabByType(ChatTabType::PARTY); - return true; -} - -impHandler0(chatGuildTab) -{ - if (chatWindow != nullptr) - chatWindow->selectTabByType(ChatTabType::GUILD); - return true; -} - -impHandler(hat) -{ - if ((localPlayer == nullptr) || (charServerHandler == nullptr)) - return false; - - const int sprite = localPlayer->getSpriteID( - charServerHandler->hatSprite()); - std::string str; - if (sprite == 0) - { - // TRANSLATORS: equipped hat chat message - str = _("no hat equipped."); - } - else - { - const ItemInfo &info = ItemDB::get(sprite); - // TRANSLATORS: equipped hat chat message - str = strprintf(_("equipped hat %s."), - info.getName().c_str()); - } - outString(event.tab, str, str); - return true; -} - -impHandler(chatClipboard) -{ - int x = 0; - int y = 0; - - if ((chatWindow != nullptr) && parse2Int(event.args, x, y)) - { - chatWindow->copyToClipboard(x, y); - return true; - } - return false; -} - -impHandler(guildNotice) -{ - if (localPlayer == nullptr) - return false; - const std::string args = event.args; - if (args.empty()) - { - // TRANSLATORS: dialog header - inputActionReplayListener.openDialog(_("Guild notice"), - "", - InputAction::GUILD_NOTICE); - return true; - } - - std::string str2; - if (args.size() > 60) - str2 = args.substr(60); - const Guild *const guild = localPlayer->getGuild(); - if (guild != nullptr) - { - guildHandler->changeNotice(guild->getId(), - args.substr(0, 60), - str2); - } - return true; -} - -impHandler(translate) -{ - if (reverseDictionary == nullptr || - localPlayer == nullptr || - event.args.empty()) - { - return false; - } - - ChatTab *const tab = event.tab; - if (tab == nullptr) - return false; - - std::string srcStr = event.args; - std::string enStr; - toLower(srcStr); - if (localPlayer->getLanguageId() > 0) - { - if (reverseDictionary->haveStr(srcStr)) - enStr = reverseDictionary->getStr(srcStr); - else if (dictionary->haveStr(srcStr)) - enStr = srcStr; - } - else - { - if (dictionary->haveStr(srcStr)) - enStr = srcStr; - } - - if (enStr.empty()) - { - tab->chatLog( - // TRANSLATORS: translation error message - strprintf(_("No translation found for string: %s"), - srcStr.c_str()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - } - - tab->chatInput(enStr); - return true; -} - -impHandler(sendGuiKey) -{ - if (guiInput == nullptr) - return false; - - const std::string args = event.args; - if (args.empty()) - return false; - StringVect pars; - if (!splitParameters(pars, args, " ,", '\"')) - return false; - const int sz = CAST_S32(pars.size()); - if (sz < 1) - return false; - - int keyValue = atoi(pars[0].c_str()); - if (keyValue == 0 && - pars[0].size() == 1) - { - keyValue = CAST_S32(pars[0][0]); - } - if (sz == 2) - { - const InputActionT actionId = InputManager::getActionByConfigField( - pars[1]); - guiInput->simulateKey(keyValue, actionId); - } - else - { - guiInput->simulateKey(keyValue, InputAction::NO_VALUE); - } - return true; -} - -impHandler(sendMouseKey) -{ - if (guiInput == nullptr) - return false; - const std::string args = event.args; - if (args.empty()) - return false; - StringVect pars; - if (!splitParameters(pars, args, " ,", '\"')) - return false; - const int sz = CAST_S32(pars.size()); - if (sz != 3) - return false; - - const int x = atoi(pars[0].c_str()); - const int y = atoi(pars[1].c_str()); - const int key1 = CAST_S32(MouseButton::LEFT); - const int key2 = CAST_S32(MouseButton::MIDDLE); - const int key = atoi(pars[2].c_str()); - if (key < key1 || key > key2) - return false; - guiInput->simulateMouseClick(x, - y, - static_cast(key)); - return true; -} - -impHandler(sendChars) -{ - if (guiInput == nullptr) - return false; - - const std::string args = event.args; - if (args.empty()) - return false; - - const size_t sz = args.size(); - for (size_t f = 0; f < sz; f ++) - { - guiInput->simulateKey(CAST_S32(args[f]), - InputAction::NO_VALUE); - } - - return true; -} - -} // namespace Actions diff --git a/src/progs/manaplus/actions/commands.cpp b/src/progs/manaplus/actions/commands.cpp deleted file mode 100644 index ff0d91e3d..000000000 --- a/src/progs/manaplus/actions/commands.cpp +++ /dev/null @@ -1,2224 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/commands.h" - -#include "actormanager.h" -#include "configuration.h" -#include "game.h" -#include "party.h" - -#include "actions/actiondef.h" - -#include "being/flooritem.h" -#include "being/localplayer.h" -#include "being/playerrelations.h" -#include "being/homunculusinfo.h" -#include "being/playerinfo.h" - -#include "const/resources/skill.h" - -#include "gui/viewport.h" - -#include "gui/popups/popupmenu.h" - -#include "gui/shortcut/emoteshortcut.h" -#include "gui/shortcut/itemshortcut.h" - -#include "gui/windows/mailwindow.h" - -#include "gui/windows/chatwindow.h" -#include "gui/windows/inventorywindow.h" -#include "gui/windows/npcdialog.h" -#include "gui/windows/outfitwindow.h" -#include "gui/windows/shortcutwindow.h" -#include "gui/windows/skilldialog.h" -#include "gui/windows/socialwindow.h" - -#include "gui/widgets/tabs/chat/whispertab.h" - -#include "input/inputactionoperators.h" - -#include "listeners/inputactionreplaylistener.h" - -#include "net/adminhandler.h" -#include "net/chathandler.h" -#include "net/guildhandler.h" -#include "net/familyhandler.h" -#include "net/homunculushandler.h" -#include "net/mail2handler.h" -#include "net/mailhandler.h" -#include "net/net.h" -#include "net/npchandler.h" -#include "net/partyhandler.h" -#include "net/serverfeatures.h" - -#include "resources/chatobject.h" - -#include "resources/db/itemdb.h" - -#include "resources/map/map.h" - -#include "resources/skill/skillinfo.h" - -#include "utils/booleanoptions.h" -#include "utils/chatutils.h" -#include "utils/copynpaste.h" -#include "utils/gmfunctions.h" -#include "utils/parameters.h" -#include "utils/process.h" - -#ifdef HAVE_MALLOC_TRIM -#include -#endif - -#include "debug.h" - -namespace Actions -{ - -static std::string getNick(const InputEvent &event) -{ - std::string args = event.args; - if (args.empty()) - { - if (event.tab == nullptr || - event.tab->getType() != ChatTabType::WHISPER) - { - return std::string(); - } - - WhisperTab *const whisper = static_cast(event.tab); - if (whisper->getNick().empty()) - { - // TRANSLATORS: change relation - event.tab->chatLog(_("Please specify a name."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return std::string(); - } - args = whisper->getNick(); - } - return args; -} - -static void reportRelation(const InputEvent &event, - const RelationT &rel, - const std::string &str1, - const std::string &str2) -{ - if (event.tab != nullptr) - { - if (playerRelations.getRelation(event.args) == rel) - { - // TRANSLATORS: unignore command - event.tab->chatLog(str1, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - else - { - // TRANSLATORS: unignore command - event.tab->chatLog(str2, - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - } -} - -static void changeRelation(const InputEvent &event, - const RelationT relation, - const std::string &relationText) -{ - std::string args = getNick(event); - if (args.empty()) - return; - - if (playerRelations.getRelation(args) == relation) - { - if (event.tab != nullptr) - { - // TRANSLATORS: change relation - event.tab->chatLog(strprintf(_("Player already %s!"), - relationText.c_str()), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return; - } - } - else - { - playerRelations.setRelation(args, relation); - } - - reportRelation(event, - relation, - // TRANSLATORS: change relation - strprintf(_("Player successfully %s!"), relationText.c_str()), - // TRANSLATORS: change relation - strprintf(_("Player could not be %s!"), relationText.c_str())); -} - -impHandler(chatAnnounce) -{ - if (adminHandler != nullptr) - { - adminHandler->announce(event.args); - return true; - } - return false; -} - -impHandler(chatIgnore) -{ - changeRelation(event, Relation::IGNORED, "ignored"); - return true; -} - -impHandler(chatUnignore) -{ - std::string args = getNick(event); - if (args.empty()) - return false; - - const RelationT rel = playerRelations.getRelation(args); - if (rel != Relation::NEUTRAL && rel != Relation::FRIEND) - { - playerRelations.setRelation(args, Relation::NEUTRAL); - } - else - { - if (event.tab != nullptr) - { - // TRANSLATORS: unignore command - event.tab->chatLog(_("Player wasn't ignored!"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; - } - - reportRelation(event, - Relation::NEUTRAL, - // TRANSLATORS: unignore command - _("Player no longer ignored!"), - // TRANSLATORS: unignore command - _("Player could not be unignored!")); - return true; -} - -impHandler(chatErase) -{ - std::string args = getNick(event); - if (args.empty()) - return false; - - if (playerRelations.getRelation(args) == Relation::ERASED) - { - if (event.tab != nullptr) - { - // TRANSLATORS: erase command - event.tab->chatLog(_("Player already erased!"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - return true; - } - playerRelations.setRelation(args, Relation::ERASED); - - reportRelation(event, - Relation::ERASED, - // TRANSLATORS: erase command - _("Player no longer erased!"), - // TRANSLATORS: erase command - _("Player could not be erased!")); - return true; -} - -impHandler(chatFriend) -{ - // TRANSLATORS: adding friend command - changeRelation(event, Relation::FRIEND, _("friend")); - return true; -} - -impHandler(chatDisregard) -{ - // TRANSLATORS: disregard command - changeRelation(event, Relation::DISREGARDED, _("disregarded")); - return true; -} - -impHandler(chatNeutral) -{ - // TRANSLATORS: neutral command - changeRelation(event, Relation::NEUTRAL, _("neutral")); - return true; -} - -impHandler(chatBlackList) -{ - // TRANSLATORS: blacklist command - changeRelation(event, Relation::BLACKLISTED, _("blacklisted")); - return true; -} - -impHandler(chatEnemy) -{ - // TRANSLATORS: enemy command - changeRelation(event, Relation::ENEMY2, _("enemy")); - return true; -} - -impHandler(chatNuke) -{ - if (actorManager == nullptr) - return false; - - const std::string nick = getNick(event); - Being *const being = actorManager->findBeingByName( - nick, ActorType::Player); - if (being == nullptr) - return true; - - actorManager->addBlock(being->getId()); - actorManager->destroy(being); - return true; -} - -impHandler(chatAdd) -{ - if (chatWindow == nullptr) - return false; - - if (event.args.empty()) - return true; - - STD_VECTOR str; - splitToIntVector(str, event.args, ','); - if (str.empty()) - return true; - - int id = str[0]; - if (id == 0) - return true; - - if (ItemDB::exists(id)) - { - const std::string names = ItemDB::getNamesStr(str); - if (!names.empty()) - chatWindow->addItemText(names); - return true; - } - - const FloorItem *const floorItem = actorManager->findItem( - fromInt(id, BeingId)); - - if (floorItem != nullptr) - { - str[0] = floorItem->getItemId(); - const std::string names = ItemDB::getNamesStr(str); - chatWindow->addItemText(names); - } - return true; -} - -impHandler0(present) -{ - if (chatWindow != nullptr) - { - chatWindow->doPresent(); - return true; - } - return false; -} - -impHandler0(printAll) -{ - if (actorManager != nullptr) - { - actorManager->printAllToChat(); - return true; - } - return false; -} - -impHandler(move) -{ - int x = 0; - int y = 0; - - if ((localPlayer != nullptr) && parse2Int(event.args, x, y)) - { - localPlayer->setDestination(x, y); - return true; - } - return false; -} - -impHandler(setTarget) -{ - if ((actorManager == nullptr) || (localPlayer == nullptr)) - return false; - - Being *const target = actorManager->findNearestByName(event.args, - ActorType::Unknown); - if (target != nullptr) - localPlayer->setTarget(target); - return true; -} - -impHandler(commandOutfit) -{ - if (outfitWindow != nullptr) - { - if (!event.args.empty()) - { - const std::string op = event.args.substr(0, 1); - if (op == "n") - { - outfitWindow->wearNextOutfit(true); - } - else if (op == "p") - { - outfitWindow->wearPreviousOutfit(true); - } - else - { - outfitWindow->wearOutfit(atoi(event.args.c_str()) - 1, - false, true); - } - } - else - { - outfitWindow->wearOutfit(atoi(event.args.c_str()) - 1, - false, true); - } - return true; - } - return false; -} - -impHandler(commandEmote) -{ - LocalPlayer::emote(CAST_U8(atoi(event.args.c_str()))); - return true; -} - -impHandler(awayMessage) -{ - if (localPlayer != nullptr) - { - localPlayer->setAway(event.args); - return true; - } - return false; -} - -impHandler(pseudoAway) -{ - if (localPlayer != nullptr) - { - LocalPlayer::setPseudoAway(event.args); - localPlayer->updateStatus(); - return true; - } - return false; -} - -impHandler(follow) -{ - if (localPlayer == nullptr) - return false; - - if (!features.getBoolValue("allowFollow")) - return false; - - if (!event.args.empty()) - { - localPlayer->setFollow(event.args); - } - else if (event.tab != nullptr && - event.tab->getType() == ChatTabType::WHISPER) - { - localPlayer->setFollow(static_cast(event.tab)->getNick()); - } - else - { - const Being *const being = localPlayer->getTarget(); - if (being != nullptr) - localPlayer->setFollow(being->getName()); - } - return true; -} - -impHandler(navigate) -{ - if ((localPlayer == nullptr) || - !localPlayer->canMove()) - { - return false; - } - - int x = 0; - int y = 0; - - if (parse2Int(event.args, x, y)) - localPlayer->navigateTo(x, y); - else - localPlayer->navigateClean(); - return true; -} - -impHandler(navigateTo) -{ - if ((localPlayer == nullptr) || - !localPlayer->canMove()) - { - return false; - } - - const std::string args = event.args; - if (args.empty()) - return true; - - Being *const being = actorManager->findBeingByName(args, - ActorType::Unknown); - if (being != nullptr) - { - localPlayer->navigateTo(being->getTileX(), being->getTileY()); - } - else if (localPlayer->isInParty()) - { - const Party *const party = localPlayer->getParty(); - if (party != nullptr) - { - const PartyMember *const m = party->getMember(args); - const PartyMember *const o = party->getMember( - localPlayer->getName()); - if (m != nullptr && - o != nullptr && - m->getMap() == o->getMap()) - { - localPlayer->navigateTo(m->getX(), m->getY()); - } - } - } - return true; -} - -impHandler(moveCamera) -{ - int x = 0; - int y = 0; - - if (viewport == nullptr) - return false; - - if (parse2Int(event.args, x, y)) - viewport->moveCameraToPosition(x * mapTileSize, y * mapTileSize); - return true; -} - -impHandler0(restoreCamera) -{ - if (viewport == nullptr) - return false; - - viewport->returnCamera(); - return true; -} - -impHandler(imitation) -{ - if (localPlayer == nullptr) - return false; - - if (!event.args.empty()) - { - localPlayer->setImitate(event.args); - } - else if (event.tab != nullptr && - event.tab->getType() == ChatTabType::WHISPER) - { - localPlayer->setImitate(static_cast( - event.tab)->getNick()); - } - else - { - localPlayer->setImitate(""); - } - return true; -} - -impHandler(sendMail) -{ -#ifdef TMWA_SUPPORT - const ServerTypeT type = Net::getNetworkType(); - if (type == ServerType::EATHENA || type == ServerType::EVOL2) -#endif // TMWA_SUPPORT - { - std::string name; - std::string text; - - if (parse2Str(event.args, name, text)) - { - if (settings.enableNewMailSystem) - { - mail2Handler->queueCheckName(MailQueueType::SendMail, - name, - // TRANSLATORS: quick mail message caption - _("Quick message"), - text, - 0); - } - else - { - // TRANSLATORS: quick mail message caption - mailHandler->send(name, _("Quick message"), text); - } - } - } -#ifdef TMWA_SUPPORT - else if (serverConfig.getBoolValue("enableManaMarketBot")) - { - chatHandler->privateMessage("ManaMarket", "!mail " + event.args); - return true; - } -#endif // TMWA_SUPPORT - - return false; -} - -impHandler(info) -{ - if (event.tab == nullptr || - localPlayer == nullptr || - Net::getNetworkType() == ServerType::TMWATHENA) - { - return false; - } - - if (guildHandler != nullptr && - event.tab->getType() == ChatTabType::GUILD) - { - const Guild *const guild = localPlayer->getGuild(); - if (guild != nullptr) - guildHandler->info(); - } - return true; -} - -impHandler(wait) -{ - if (localPlayer != nullptr) - { - localPlayer->waitFor(event.args); - return true; - } - return false; -} - -impHandler(addPriorityAttack) -{ - if ((actorManager == nullptr) || - actorManager->isInPriorityAttackList(event.args)) - { - return false; - } - - actorManager->removeAttackMob(event.args); - actorManager->addPriorityAttackMob(event.args); - - if (socialWindow != nullptr) - socialWindow->updateAttackFilter(); - return true; -} - -impHandler(addAttack) -{ - if (actorManager == nullptr) - return false; - - actorManager->removeAttackMob(event.args); - actorManager->addAttackMob(event.args); - - if (socialWindow != nullptr) - socialWindow->updateAttackFilter(); - return true; -} - -impHandler(removeAttack) -{ - if (actorManager == nullptr) - return false; - - if (event.args.empty()) - { - if (actorManager->isInAttackList(event.args)) - { - actorManager->removeAttackMob(event.args); - actorManager->addIgnoreAttackMob(event.args); - } - else - { - actorManager->removeAttackMob(event.args); - actorManager->addAttackMob(event.args); - } - } - else - { - actorManager->removeAttackMob(event.args); - } - - - if (socialWindow != nullptr) - socialWindow->updateAttackFilter(); - return true; -} - -impHandler(addIgnoreAttack) -{ - if (actorManager == nullptr) - return false; - - actorManager->removeAttackMob(event.args); - actorManager->addIgnoreAttackMob(event.args); - - if (socialWindow != nullptr) - socialWindow->updateAttackFilter(); - return true; -} - -impHandler(setDrop) -{ - GameModifiers::setQuickDropCounter(atoi(event.args.c_str())); - return true; -} - -impHandler(url) -{ - if (event.tab != nullptr) - { - std::string url1 = event.args; - if (!strStartWith(url1, "http") && !strStartWith(url1, "ftp") && - !strStartWith(url1, "?")) - url1 = "http://" + url1; - std::string str(strprintf("[@@%s |%s@@]", - url1.c_str(), event.args.c_str())); - outStringNormal(event.tab, str, str); - return true; - } - return false; -} - -impHandler(openUrl) -{ - std::string url = event.args; - if (!strStartWith(url, "http") && !strStartWith(url, "ftp")) - url = "http://" + url; - openBrowser(url); - return true; -} - -impHandler(execute) -{ - const size_t idx = event.args.find(' '); - std::string name; - std::string params; - if (idx == std::string::npos) - { - name = event.args; - } - else - { - name = event.args.substr(0, idx); - params = event.args.substr(idx + 1); - } - execFile(name, name, params, ""); - return true; -} - -impHandler(enableHighlight) -{ - if (event.tab != nullptr) - { - event.tab->setAllowHighlight(true); - if (chatWindow != nullptr) - { - chatWindow->saveState(); - return true; - } - } - return false; -} - -impHandler(disableHighlight) -{ - if (event.tab != nullptr) - { - event.tab->setAllowHighlight(false); - if (chatWindow != nullptr) - { - chatWindow->saveState(); - return true; - } - } - return false; -} - -impHandler(dontRemoveName) -{ - if (event.tab != nullptr) - { - event.tab->setRemoveNames(false); - if (chatWindow != nullptr) - { - chatWindow->saveState(); - return true; - } - } - return false; -} - -impHandler(removeName) -{ - if (event.tab != nullptr) - { - event.tab->setRemoveNames(true); - if (chatWindow != nullptr) - { - chatWindow->saveState(); - return true; - } - } - return false; -} - -impHandler(disableAway) -{ - if (event.tab != nullptr) - { - event.tab->setNoAway(true); - if (chatWindow != nullptr) - { - chatWindow->saveState(); - return true; - } - } - return false; -} - -impHandler(enableAway) -{ - if (event.tab != nullptr) - { - event.tab->setNoAway(false); - if (chatWindow != nullptr) - { - chatWindow->saveState(); - return true; - } - } - return false; -} - -impHandler(testParticle) -{ - if (localPlayer != nullptr) - { - localPlayer->setTestParticle(event.args, true); - return true; - } - return false; -} - -impHandler(talkRaw) -{ - if (chatHandler != nullptr) - { - chatHandler->talkRaw(event.args); - return true; - } - return false; -} - -impHandler(gm) -{ - if (chatHandler != nullptr) - { - Gm::runCommand("wgm", event.args); - return true; - } - return false; -} - -impHandler(hack) -{ - if (chatHandler != nullptr) - { - chatHandler->sendRaw(event.args); - return true; - } - return false; -} - -impHandler(debugSpawn) -{ - if (localPlayer == nullptr) - return false; - int cnt = atoi(event.args.c_str()); - if (cnt < 1) - cnt = 1; - const int half = cnt / 2; - const Map *const map = localPlayer->getMap(); - int x1 = -half; - if (x1 < 0) - x1 = 0; - int y1 = x1; - int x2 = cnt - half; - if (x2 > map->getWidth()) - x2 = map->getWidth(); - int y2 = x2; - - for (int x = x1; x < x2; x ++) - { - for (int y = y1; y < y2; y ++) - ActorManager::cloneBeing(localPlayer, x, y, cnt); - } - return true; -} - -impHandler(serverIgnoreWhisper) -{ - std::string args = getNick(event); - if (args.empty()) - return false; - - if (chatHandler != nullptr) - { - chatHandler->ignore(args); - return true; - } - return false; -} - -impHandler(serverUnIgnoreWhisper) -{ - std::string args = getNick(event); - if (args.empty()) - return false; - - if (chatHandler != nullptr) - { - chatHandler->unIgnore(args); - return true; - } - return false; -} - -impHandler(setHomunculusName) -{ - const std::string args = event.args; - if (args.empty()) - { - const HomunculusInfo *const info = PlayerInfo::getHomunculus(); - if (info != nullptr) - { - // TRANSLATORS: dialog header - inputActionReplayListener.openDialog(_("Rename your homun"), - info->name, - InputAction::HOMUNCULUS_SET_NAME); - } - return false; - } - - if (homunculusHandler != nullptr) - { - homunculusHandler->setName(args); - return true; - } - return false; -} - -impHandler0(fireHomunculus) -{ - if (homunculusHandler != nullptr) - { - homunculusHandler->fire(); - return true; - } - return false; -} - -impHandler0(leaveParty) -{ - if (partyHandler != nullptr) - { - partyHandler->leave(); - return true; - } - return false; -} - -impHandler0(leaveGuild) -{ - if ((guildHandler != nullptr) && (localPlayer != nullptr)) - { - const Guild *const guild = localPlayer->getGuild(); - if (guild != nullptr) - guildHandler->leave(guild->getId()); - return true; - } - return false; -} - -impHandler(warp) -{ - int x = 0; - int y = 0; - - if ((adminHandler != nullptr) && - (Game::instance() != nullptr) && - parse2Int(event.args, x, y)) - { - adminHandler->warp(Game::instance()->getCurrentMapName(), - x, y); - return true; - } - return false; -} - -impHandler(homunTalk) -{ - if ((serverFeatures == nullptr) || !serverFeatures->haveTalkPet()) - return false; - - std::string args = event.args; - if (findCutFirst(args, "/me ")) - args = textToMe(args); - if (homunculusHandler != nullptr) - { - homunculusHandler->talk(args); - return true; - } - return false; -} - -impHandler(homunEmote) -{ - if ((serverFeatures == nullptr) || !serverFeatures->haveTalkPet()) - return false; - - if ((homunculusHandler != nullptr) && - event.action >= InputAction::HOMUN_EMOTE_1 && - event.action <= InputAction::HOMUN_EMOTE_48) - { - if (emoteShortcut != nullptr) - { - const int emotion = event.action - InputAction::HOMUN_EMOTE_1; - homunculusHandler->emote(emoteShortcut->getEmote(emotion)); - } - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - - return false; -} - -impHandler(commandHomunEmote) -{ - if ((serverFeatures == nullptr) || !serverFeatures->haveTalkPet()) - return false; - - if (homunculusHandler != nullptr) - { - homunculusHandler->emote(CAST_U8( - atoi(event.args.c_str()))); - return true; - } - return false; -} - -impHandler(createPublicChatRoom) -{ - if ((chatHandler == nullptr) || event.args.empty()) - return false; - chatHandler->createChatRoom(event.args, "", 100, true); - return true; -} - -impHandler(joinChatRoom) -{ - if (chatHandler == nullptr) - return false; - const std::string args = event.args; - if (args.empty()) - return false; - ChatObject *const chat = ChatObject::findByName(args); - if (chat == nullptr) - return false; - chatHandler->joinChat(chat, ""); - return true; -} - -impHandler0(leaveChatRoom) -{ - if (chatHandler != nullptr) - { - chatHandler->leaveChatRoom(); - return true; - } - return false; -} - -impHandler(confSet) -{ - std::string name; - std::string val; - - if (parse2Str(event.args, name, val)) - { - config.setValue(name, val); - return true; - } - return false; -} - -impHandler(serverConfSet) -{ - std::string name; - std::string val; - - if (parse2Str(event.args, name, val)) - { - serverConfig.setValue(name, val); - return true; - } - return false; -} - -impHandler(confGet) -{ - const std::string args = event.args; - if (args.empty()) - return false; - - // TRANSLATORS: result from command /confget - const std::string str = strprintf(_("Config value: %s"), - config.getStringValue(args).c_str()); - outStringNormal(event.tab, str, str); - return true; -} - -impHandler(serverConfGet) -{ - const std::string args = event.args; - if (args.empty()) - return false; - - // TRANSLATORS: result from command /serverconfget - const std::string str = strprintf(_("Server config value: %s"), - serverConfig.getStringValue(args).c_str()); - outStringNormal(event.tab, str, str); - return true; -} - -impHandler(slide) -{ - int x = 0; - int y = 0; - - if ((adminHandler != nullptr) && parse2Int(event.args, x, y)) - { - adminHandler->slide(x, y); - return true; - } - return false; -} - -impHandler(selectSkillLevel) -{ - int skill = 0; - int level = 0; - - if ((skillDialog != nullptr) && parse2Int(event.args, skill, level)) - { - skillDialog->selectSkillLevel(skill, level); - return true; - } - return false; -} - -impHandler(skill) -{ - StringVect vect; - splitToStringVector(vect, event.args, ' '); - const int sz = CAST_S32(vect.size()); - if (sz < 1) - return true; - const int skillId = atoi(vect[0].c_str()); - int level = 0; - std::string text; - if (sz > 1) - { - level = atoi(vect[1].c_str()); - if (sz > 2) - text = vect[2]; - } - // +++ add here also cast type and offsets - if (text.empty()) - { - SkillDialog::useSkill(skillId, - AutoTarget_true, - level, - false, - "", - CastType::Default, - 0, - 0); - } - else - { - SkillDialog::useSkill(skillId, - AutoTarget_true, - level, - true, - text, - CastType::Default, - 0, - 0); - } - return true; -} - -impHandler(craft) -{ - const std::string args = event.args; - if (args.empty() || (inventoryWindow == nullptr)) - return false; - - inventoryWindow->moveItemToCraft(atoi(args.c_str())); - return true; -} - -impHandler(npcClipboard) -{ - if (npcHandler != nullptr) - { - int x = 0; - int y = 0; - - NpcDialog *const dialog = npcHandler->getCurrentNpcDialog(); - - if ((dialog != nullptr) && parse2Int(event.args, x, y)) - { - dialog->copyToClipboard(x, y); - return true; - } - } - return false; -} - -impHandler(clipboardCopy) -{ - const std::string args = event.args; - if (args.empty()) - return false; - sendBuffer(args); - return true; -} - -impHandler(addPickup) -{ - if (actorManager != nullptr) - { - actorManager->removePickupItem(event.args); - actorManager->addPickupItem(event.args); - if (socialWindow != nullptr) - socialWindow->updatePickupFilter(); - return true; - } - return false; -} - -impHandler(removePickup) -{ - if (actorManager != nullptr) - { - if (event.args.empty()) - { // default pickup manipulation - if (actorManager->checkDefaultPickup()) - { - actorManager->removePickupItem(event.args); - actorManager->addIgnorePickupItem(event.args); - } - else - { - actorManager->removePickupItem(event.args); - actorManager->addPickupItem(event.args); - } - } - else - { // any other pickups - actorManager->removePickupItem(event.args); - } - if (socialWindow != nullptr) - socialWindow->updatePickupFilter(); - return true; - } - return false; -} - -impHandler(ignorePickup) -{ - if (actorManager != nullptr) - { - actorManager->removePickupItem(event.args); - actorManager->addIgnorePickupItem(event.args); - if (socialWindow != nullptr) - socialWindow->updatePickupFilter(); - return true; - } - return false; -} - -impHandler(monsterInfo) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->monsterInfo(args); - return true; -} - -impHandler(itemInfo) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->itemInfo(args); - return true; -} - -impHandler(whoDrops) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->whoDrops(args); - return true; -} - -impHandler(mobSearch) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->mobSearch(args); - return true; -} - -impHandler(mobSpawnSearch) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->mobSpawnSearch(args); - return true; -} - -impHandler(playerGmCommands) -{ - adminHandler->playerGmCommands(event.args); - return true; -} - -impHandler(playerCharGmCommands) -{ - adminHandler->playerCharGmCommands(event.args); - return true; -} - -impHandler(commandShowLevel) -{ - adminHandler->showLevel(event.args); - return true; -} - -impHandler(commandShowStats) -{ - adminHandler->showStats(event.args); - return true; -} - -impHandler(commandShowStorage) -{ - adminHandler->showStorageList(event.args); - return true; -} - -impHandler(commandShowCart) -{ - adminHandler->showCartList(event.args); - return true; -} - -impHandler(commandShowInventory) -{ - adminHandler->showInventoryList(event.args); - return true; -} - -impHandler(locatePlayer) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->locatePlayer(args); - return true; -} - -impHandler(commandShowAccountInfo) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->showAccountInfo(args); - return true; -} - -impHandler(commandSpawn) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->spawn(args); - return true; -} - -impHandler(commandSpawnSlave) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->spawnSlave(args); - return true; -} - -impHandler(commandSpawnClone) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->spawnClone(args); - return true; -} - -impHandler(commandSpawnSlaveClone) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->spawnSlaveClone(args); - return true; -} - -impHandler(commandSpawnEvilClone) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->spawnEvilClone(args); - return true; -} - -impHandler(commandSavePosition) -{ - adminHandler->savePosition(event.args); - return true; -} - -impHandler(commandLoadPosition) -{ - adminHandler->loadPosition(event.args); - return true; -} - -impHandler(commandRandomWarp) -{ - adminHandler->randomWarp(event.args); - return true; -} - -impHandler(commandGotoNpc) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->gotoNpc(args); - return true; -} - -impHandler(commandGotoPc) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->gotoName(args); - return true; -} - -impHandler(commandRecallPc) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->recallName(args); - return true; -} - -impHandler(commandIpCheck) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->ipcheckName(args); - return true; -} - -impHandler(commandKiller) -{ - adminHandler->killer(event.args); - return true; -} - -impHandler(commandKillable) -{ - adminHandler->killable(event.args); - return true; -} - -impHandler(commandHeal) -{ - adminHandler->heal(event.args); - return true; -} - -impHandler(commandAlive) -{ - adminHandler->alive(event.args); - return true; -} - -impHandler(commandDisguise) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->disguise(args); - return true; -} - -impHandler(commandImmortal) -{ - adminHandler->immortal(event.args); - return true; -} - -impHandler(commandHide) -{ - adminHandler->hide(event.args); - return true; -} - -impHandler(commandNuke) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->nuke(args); - return true; -} - -impHandler(commandKill) -{ - adminHandler->kill(event.args); - return true; -} - -impHandler(commandJail) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->jail(args); - return true; -} - -impHandler(commandUnjail) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->unjail(args); - return true; -} - -impHandler(commandNpcMove) -{ - const std::string args = event.args; - if (args.empty()) - return false; - StringVect pars; - if (!splitParameters(pars, args, " ,", '\"')) - return false; - - if (pars.size() != 3) - return false; - - adminHandler->npcMove(pars[0], - atoi(pars[1].c_str()), - atoi(pars[2].c_str())); - return true; -} - -impHandler(commandNpcHide) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->hideNpc(args); - return true; -} - -impHandler(commandNpcShow) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->showNpc(args); - return true; -} - -impHandler(commandChangePartyLeader) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->changePartyLeader(args); - return true; -} - -impHandler(commandPartyRecall) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->partyRecall(args); - return true; -} - -impHandler(commandBreakGuild) -{ - adminHandler->breakGuild(event.args); - return true; -} - -impHandler(commandGuildRecall) -{ - const std::string args = event.args; - if (args.empty()) - return false; - adminHandler->guildRecall(args); - return true; -} - -impHandler(mailTo) -{ - if (mailWindow == nullptr) - return false; - const std::string args = event.args; - if (settings.enableNewMailSystem) - { - mail2Handler->queueCheckName(MailQueueType::EditMail, - args, - std::string(), - std::string(), - 0); - } - else - { - MailWindow::createMail(args); - } - return true; -} - -impHandler(adoptChild) -{ - const std::string nick = getNick(event); - Being *const being = actorManager->findBeingByName( - nick, ActorType::Player); - if (being == nullptr) - return true; - familyHandler->askForChild(being); - return true; -} - -impHandler(showSkillLevels) -{ - const std::string args = event.args; - if (args.empty()) - return false; - const SkillInfo *restrict const skill = skillDialog->getSkill( - atoi(args.c_str())); - if (skill == nullptr) - return false; - popupMenu->showSkillLevelPopup(skill); - return true; -} - -impHandler(showSkillType) -{ - const std::string args = event.args; - if (args.empty()) - return false; - const SkillInfo *restrict const skill = skillDialog->getSkill( - atoi(args.c_str())); - if (skill == nullptr) - return false; - popupMenu->showSkillTypePopup(skill); - return true; -} - -impHandler(selectSkillType) -{ - int skill = 0; - int type = 0; - - if ((skillDialog != nullptr) && parse2Int(event.args, skill, type)) - { - skillDialog->selectSkillCastType(skill, - static_cast(type)); - return true; - } - return false; -} - -impHandler(showSkillOffsetX) -{ - const std::string args = event.args; - if (args.empty()) - return false; - const SkillInfo *restrict const skill = skillDialog->getSkill( - atoi(args.c_str())); - if (skill == nullptr) - return false; - popupMenu->showSkillOffsetPopup(skill, true); - return true; -} - -impHandler(showSkillOffsetY) -{ - const std::string args = event.args; - if (args.empty()) - return false; - const SkillInfo *restrict const skill = skillDialog->getSkill( - atoi(args.c_str())); - if (skill == nullptr) - return false; - popupMenu->showSkillOffsetPopup(skill, false); - return true; -} - -impHandler(setSkillOffsetX) -{ - int skill = 0; - int offset = 0; - - if ((skillDialog != nullptr) && parse2Int(event.args, skill, offset)) - { - skillDialog->setSkillOffsetX(skill, offset); - return true; - } - return false; -} - -impHandler(setSkillOffsetY) -{ - int skill = 0; - int offset = 0; - - if ((skillDialog != nullptr) && parse2Int(event.args, skill, offset)) - { - skillDialog->setSkillOffsetY(skill, offset); - return true; - } - return false; -} - -impHandler(partyItemShare) -{ - if (localPlayer == nullptr) - return false; - - if (localPlayer->isInParty() == false) - return true; - - ChatTab *tab = event.tab; - if (tab == nullptr) - tab = localChatTab; - if (tab == nullptr) - return true; - - const std::string args = event.args; - if (args.empty()) - { - switch (partyHandler->getShareItems()) - { - case PartyShare::YES: - // TRANSLATORS: chat message - tab->chatLog(_("Item sharing enabled."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::NO: - // TRANSLATORS: chat message - tab->chatLog(_("Item sharing disabled."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::NOT_POSSIBLE: - // TRANSLATORS: chat message - tab->chatLog(_("Item sharing not possible."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::UNKNOWN: - // TRANSLATORS: chat message - tab->chatLog(_("Item sharing unknown."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - default: - break; - } - } - - const signed char opt = parseBoolean(args); - - switch (opt) - { - case 1: - partyHandler->setShareItems( - PartyShare::YES); - break; - case 0: - partyHandler->setShareItems( - PartyShare::NO); - break; - case -1: - tab->chatLog(strprintf(BOOLEAN_OPTIONS, "item"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - break; - default: - break; - } - return true; -} - -impHandler(partyExpShare) -{ - if (localPlayer == nullptr) - return false; - - if (localPlayer->isInParty() == false) - return true; - - ChatTab *tab = event.tab; - if (tab == nullptr) - tab = localChatTab; - if (tab == nullptr) - return true; - - const std::string args = event.args; - if (args.empty()) - { - switch (partyHandler->getShareExperience()) - { - case PartyShare::YES: - // TRANSLATORS: chat message - tab->chatLog(_("Experience sharing enabled."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::NO: - // TRANSLATORS: chat message - tab->chatLog(_("Experience sharing disabled."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::NOT_POSSIBLE: - // TRANSLATORS: chat message - tab->chatLog(_("Experience sharing not possible."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::UNKNOWN: - // TRANSLATORS: chat message - tab->chatLog(_("Experience sharing unknown."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - default: - break; - } - } - - const signed char opt = parseBoolean(args); - - switch (opt) - { - case 1: - partyHandler->setShareExperience( - PartyShare::YES); - break; - case 0: - partyHandler->setShareExperience( - PartyShare::NO); - break; - case -1: - tab->chatLog(strprintf(BOOLEAN_OPTIONS, "exp"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - break; - default: - break; - } - return true; -} - -impHandler(partyAutoItemShare) -{ - if (localPlayer == nullptr) - return false; - - if (localPlayer->isInParty() == false) - return true; - - ChatTab *tab = event.tab; - if (tab == nullptr) - tab = localChatTab; - if (tab == nullptr) - return true; - - const std::string args = event.args; - if (args.empty()) - { - switch (partyHandler->getShareAutoItems()) - { - case PartyShare::YES: - // TRANSLATORS: chat message - tab->chatLog(_("Auto item sharing enabled."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::NO: - // TRANSLATORS: chat message - tab->chatLog(_("Auto item sharing disabled."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::NOT_POSSIBLE: - // TRANSLATORS: chat message - tab->chatLog(_("Auto item sharing not possible."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - case PartyShare::UNKNOWN: - // TRANSLATORS: chat message - tab->chatLog(_("Auto item sharing unknown."), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - return true; - default: - break; - } - } - - const signed char opt = parseBoolean(args); - - switch (opt) - { - case 1: - partyHandler->setShareAutoItems( - PartyShare::YES); - break; - case 0: - partyHandler->setShareAutoItems( - PartyShare::NO); - break; - case -1: - tab->chatLog(strprintf(BOOLEAN_OPTIONS, "item"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - break; - default: - break; - } - return true; -} - -impHandler0(outfitToChat) -{ - if ((outfitWindow == nullptr) || (chatWindow == nullptr)) - return false; - - const std::string str = outfitWindow->getOutfitString(); - if (!str.empty()) - chatWindow->addInputText(str, true); - return true; -} - -impHandler0(outfitClear) -{ - if (outfitWindow == nullptr) - return false; - - outfitWindow->clearCurrentOutfit(); - return true; -} - -impHandler(moveAttackUp) -{ - if (actorManager == nullptr) - return false; - const std::string args = event.args; - const int idx = actorManager->getAttackMobIndex(args); - if (idx > 0) - { - std::list mobs - = actorManager->getAttackMobs(); - std::list::iterator it = mobs.begin(); - std::list::iterator it2 = it; - while (it != mobs.end()) - { - if (*it == args) - { - -- it2; - mobs.splice(it2, mobs, it); - actorManager->setAttackMobs(mobs); - actorManager->rebuildAttackMobs(); - break; - } - ++ it; - ++ it2; - } - - if (socialWindow != nullptr) - socialWindow->updateAttackFilter(); - return true; - } - return false; -} - -impHandler(moveAttackDown) -{ - if (actorManager == nullptr) - return false; - const std::string args = event.args; - const int idx = actorManager->getAttackMobIndex(args); - const int size = actorManager->getAttackMobsSize(); - if (idx + 1 < size) - { - std::list mobs - = actorManager->getAttackMobs(); - std::list::iterator it = mobs.begin(); - std::list::iterator it2 = it; - while (it != mobs.end()) - { - if (*it == args) - { - ++ it2; - if (it2 == mobs.end()) - break; - - mobs.splice(it, mobs, it2); - actorManager->setAttackMobs(mobs); - actorManager->rebuildAttackMobs(); - break; - } - ++ it; - ++ it2; - } - - if (socialWindow != nullptr) - socialWindow->updateAttackFilter(); - return true; - } - return false; -} - -impHandler(movePriorityAttackUp) -{ - if (actorManager == nullptr) - return false; - const std::string args = event.args; - const int idx = actorManager-> - getPriorityAttackMobIndex(args); - if (idx > 0) - { - std::list mobs - = actorManager->getPriorityAttackMobs(); - std::list::iterator it = mobs.begin(); - std::list::iterator it2 = it; - while (it != mobs.end()) - { - if (*it == args) - { - -- it2; - mobs.splice(it2, mobs, it); - actorManager->setPriorityAttackMobs(mobs); - actorManager->rebuildPriorityAttackMobs(); - break; - } - ++ it; - ++ it2; - } - - if (socialWindow != nullptr) - socialWindow->updateAttackFilter(); - return true; - } - return false; -} - -impHandler(movePriorityAttackDown) -{ - if (actorManager == nullptr) - return false; - const std::string args = event.args; - const int idx = actorManager - ->getPriorityAttackMobIndex(args); - const int size = actorManager->getPriorityAttackMobsSize(); - if (idx + 1 < size) - { - std::list mobs - = actorManager->getPriorityAttackMobs(); - std::list::iterator it = mobs.begin(); - std::list::iterator it2 = it; - while (it != mobs.end()) - { - if (*it == args) - { - ++ it2; - if (it2 == mobs.end()) - break; - - mobs.splice(it, mobs, it2); - actorManager->setPriorityAttackMobs(mobs); - actorManager->rebuildPriorityAttackMobs(); - break; - } - ++ it; - ++ it2; - } - - if (socialWindow != nullptr) - socialWindow->updateAttackFilter(); - return true; - } - return false; -} - -impHandler(addSkillShortcut) -{ - const std::string args = event.args; - if (args.empty() || - itemShortcutWindow == nullptr) - { - return false; - } - const SkillInfo *restrict const skill = skillDialog->getSkill( - atoi(args.c_str())); - if (skill == nullptr) - return false; - - const int num = itemShortcutWindow->getTabIndex(); - if (num < 0 || - num >= CAST_S32(SHORTCUT_TABS) || - num == CAST_S32(SHORTCUT_AUTO_TAB)) - { - return false; - } - - ItemShortcut *const selShortcut = itemShortcut[num]; - const size_t index = selShortcut->getFreeIndex(); - if (index == SHORTCUT_ITEMS) - return true; - - selShortcut->setItem(index, - skill->id + SKILL_MIN_ID, - fromInt(skill->customSelectedLevel, ItemColor)); - selShortcut->setItemData(index, - skill->toDataStr()); - -// popupMenu->showSkillLevelPopup(skill); - return true; -} - -impHandler0(trimMemory) -{ -#ifdef HAVE_MALLOC_TRIM - malloc_trim(0); -#else - // TRANSLATORS: chat error about trim command - localChatTab->chatLog(_("Trim memory not supported"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); -#endif - return true; -} - -} // namespace Actions diff --git a/src/progs/manaplus/actions/move.cpp b/src/progs/manaplus/actions/move.cpp deleted file mode 100644 index b9e658f81..000000000 --- a/src/progs/manaplus/actions/move.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/move.h" - -#include "game.h" - -#include "actions/actiondef.h" -#include "actions/pets.h" - -#include "being/crazymoves.h" -#include "being/localplayer.h" - -#include "enums/being/beingdirection.h" - -#include "gui/windows/socialwindow.h" -#include "gui/windows/npcdialog.h" -#include "gui/windows/outfitwindow.h" - -#include "gui/popups/popupmenu.h" - -#include "input/inputactionoperators.h" - -#include "net/playerhandler.h" - -#include "debug.h" - -namespace Actions -{ - -static bool closeMoveNpcDialog(bool focus) -{ - NpcDialog *const dialog = NpcDialog::getActive(); - if (dialog != nullptr) - { - if (dialog->isCloseState() != 0) - { - dialog->closeDialog(); - return true; - } - else if (focus) - { - dialog->refocus(); - } - } - return false; -} - -impHandler(moveUp) -{ - if (inputManager.isActionActive(InputAction::EMOTE)) - return directUp(event); - else if (inputManager.isActionActive(InputAction::PET_EMOTE)) - return petDirectUp(event); - else if (inputManager.isActionActive(InputAction::STOP_ATTACK)) - return petMoveUp(event); - else if (!localPlayer->canMove()) - return directUp(event); - if (popupMenu->isPopupVisible()) - { - popupMenu->moveUp(); - return true; - } - return closeMoveNpcDialog(false); -} - -impHandler(moveDown) -{ - if (inputManager.isActionActive(InputAction::EMOTE)) - return directDown(event); - else if (inputManager.isActionActive(InputAction::PET_EMOTE)) - return petDirectDown(event); - else if (inputManager.isActionActive(InputAction::STOP_ATTACK)) - return petMoveDown(event); - else if (!localPlayer->canMove()) - return directDown(event); - if (popupMenu->isPopupVisible()) - { - popupMenu->moveDown(); - return true; - } - return closeMoveNpcDialog(false); -} - -impHandler(moveLeft) -{ - if (outfitWindow != nullptr && - inputManager.isActionActive(InputAction::WEAR_OUTFIT)) - { - outfitWindow->wearPreviousOutfit(false); - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - if (inputManager.isActionActive(InputAction::EMOTE)) - return directLeft(event); - else if (inputManager.isActionActive(InputAction::PET_EMOTE)) - return petDirectLeft(event); - else if (inputManager.isActionActive(InputAction::STOP_ATTACK)) - return petMoveLeft(event); - else if (!localPlayer->canMove()) - return directLeft(event); - return closeMoveNpcDialog(false); -} - -impHandler(moveRight) -{ - if (outfitWindow != nullptr && - inputManager.isActionActive(InputAction::WEAR_OUTFIT)) - { - outfitWindow->wearNextOutfit(false); - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - if (inputManager.isActionActive(InputAction::EMOTE)) - return directRight(event); - else if (inputManager.isActionActive(InputAction::PET_EMOTE)) - return petDirectRight(event); - else if (inputManager.isActionActive(InputAction::STOP_ATTACK)) - return petMoveRight(event); - else if (!localPlayer->canMove()) - return directRight(event); - return closeMoveNpcDialog(false); -} - -impHandler(moveForward) -{ - if (inputManager.isActionActive(InputAction::EMOTE)) - return directRight(event); - return closeMoveNpcDialog(false); -} - -impHandler(moveToPoint) -{ - const int num = event.action - InputAction::MOVE_TO_POINT_1; - if ((socialWindow != nullptr) && num >= 0) - { - socialWindow->selectPortal(num); - return true; - } - - return false; -} - -impHandler0(crazyMoves) -{ - if (localPlayer != nullptr) - { - ::crazyMoves->crazyMove(); - return true; - } - return false; -} - -impHandler0(moveToTarget) -{ - if (localPlayer != nullptr && - !inputManager.isActionActive(InputAction::TARGET_ATTACK) && - !inputManager.isActionActive(InputAction::ATTACK)) - { - localPlayer->moveToTarget(-1); - return true; - } - return false; -} - -impHandler0(moveToHome) -{ - if (localPlayer != nullptr && - !inputManager.isActionActive(InputAction::TARGET_ATTACK) && - !inputManager.isActionActive(InputAction::ATTACK)) - { - localPlayer->moveToHome(); - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - return false; -} - -impHandler0(directUp) -{ - if (localPlayer != nullptr) - { - if (localPlayer->getDirection() != BeingDirection::UP) - { -// if (PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION)) - { - localPlayer->setDirection(BeingDirection::UP); - if (playerHandler != nullptr) - playerHandler->setDirection(BeingDirection::UP); - } - } - return true; - } - return false; -} - -impHandler0(directDown) -{ - if (localPlayer != nullptr) - { - if (localPlayer->getDirection() != BeingDirection::DOWN) - { -// if (PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION)) - { - localPlayer->setDirection(BeingDirection::DOWN); - if (playerHandler != nullptr) - { - playerHandler->setDirection( - BeingDirection::DOWN); - } - } - } - return true; - } - return false; -} - -impHandler0(directLeft) -{ - if (localPlayer != nullptr) - { - if (localPlayer->getDirection() != BeingDirection::LEFT) - { -// if (PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION)) - { - localPlayer->setDirection(BeingDirection::LEFT); - if (playerHandler != nullptr) - { - playerHandler->setDirection( - BeingDirection::LEFT); - } - } - } - return true; - } - return false; -} - -impHandler0(directRight) -{ - if (localPlayer != nullptr) - { - if (localPlayer->getDirection() != BeingDirection::RIGHT) - { -// if (PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION)) - { - localPlayer->setDirection(BeingDirection::RIGHT); - if (playerHandler != nullptr) - { - playerHandler->setDirection( - BeingDirection::RIGHT); - } - } - } - return true; - } - return false; -} - -} // namespace Actions diff --git a/src/progs/manaplus/actions/pets.cpp b/src/progs/manaplus/actions/pets.cpp deleted file mode 100644 index fd8c959f8..000000000 --- a/src/progs/manaplus/actions/pets.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/pets.h" - -#include "actormanager.h" -#include "game.h" - -#include "actions/actiondef.h" - -#include "being/localplayer.h" -#include "being/playerinfo.h" - -#include "enums/being/beingdirection.h" - -#include "input/inputactionoperators.h" - -#include "listeners/inputactionreplaylistener.h" - -#include "gui/shortcut/emoteshortcut.h" - -#include "net/chathandler.h" -#include "net/pethandler.h" -#include "net/serverfeatures.h" - -#include "utils/chatutils.h" -#include "utils/gettext.h" -#include "utils/stringutils.h" - -#include "debug.h" - -namespace Actions -{ - -static const Being *getPet() -{ - const BeingId id = PlayerInfo::getPetBeingId(); - if (id == BeingId_zero) - return nullptr; - return actorManager->findBeing(id); -} - -impHandler(commandEmotePet) -{ - petHandler->emote(CAST_U8(atoi(event.args.c_str()))); - return true; -} - -impHandler(talkPet) -{ - if (!serverFeatures->haveTalkPet()) - return false; - - std::string args = event.args; - if (findCutFirst(args, "/me ")) - args = textToMe(args); - chatHandler->talkPet(args); - return true; -} - -impHandler(setPetName) -{ - const std::string args = event.args; - if (args.empty()) - { - const Being *const pet = getPet(); - if (pet == nullptr) - return false; - // TRANSLATORS: dialog header - inputActionReplayListener.openDialog(_("Rename your pet"), - pet->getName(), - InputAction::PET_SET_NAME); - return false; - } - - petHandler->setName(args); - return true; -} - -impHandler(petEmote) -{ - if (!serverFeatures->haveTalkPet()) - return false; - - if (event.action >= InputAction::PET_EMOTE_1 - && event.action <= InputAction::PET_EMOTE_48) - { - if (emoteShortcut != nullptr) - { - const int emotion = event.action - InputAction::PET_EMOTE_1; - petHandler->emote(emoteShortcut->getEmote(emotion)); - } - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - - return false; -} - -impHandler(catchPet) -{ - if ((localPlayer == nullptr) || (actorManager == nullptr)) - return false; - - Being *target = nullptr; - const std::string args = event.args; - if (!args.empty()) - { - if (args[0] == ':') - { - target = actorManager->findBeing(fromInt(atoi( - args.substr(1).c_str()), BeingId)); - } - else - { - target = actorManager->findNearestByName(args, - ActorType::Unknown); - } - } - - if (target == nullptr) - target = localPlayer->getTarget(); - else - localPlayer->setTarget(target); - if (target != nullptr) - petHandler->catchPet(target); - return true; -} - -impHandler0(petMoveUp) -{ - const Being *const pet = getPet(); - if (pet == nullptr) - return false; - petHandler->move(pet->getTileX(), pet->getTileY() - 1); - return true; -} - -impHandler0(petMoveDown) -{ - const Being *const pet = getPet(); - if (pet == nullptr) - return false; - petHandler->move(pet->getTileX(), pet->getTileY() + 1); - return true; -} - -impHandler0(petMoveLeft) -{ - const Being *const pet = getPet(); - if (pet == nullptr) - return false; - petHandler->move(pet->getTileX() - 1, pet->getTileY()); - return true; -} - -impHandler0(petMoveRight) -{ - const Being *const pet = getPet(); - if (pet == nullptr) - return false; - petHandler->move(pet->getTileX() + 1, pet->getTileY()); - return true; -} - -impHandler0(petDirectUp) -{ - petHandler->setDirection(BeingDirection::UP); - return true; -} - -impHandler0(petDirectDown) -{ - petHandler->setDirection(BeingDirection::DOWN); - return true; -} - -impHandler0(petDirectLeft) -{ - petHandler->setDirection(BeingDirection::LEFT); - return true; -} - -impHandler0(petDirectRight) -{ - petHandler->setDirection(BeingDirection::RIGHT); - return true; -} - -impHandler(petMove) -{ - int x = 0; - int y = 0; - - if (parse2Int(event.args, x, y)) - { - petHandler->move(x, y); - return true; - } - return false; -} - -impHandler0(petFeed) -{ - if (petHandler != nullptr) - petHandler->feed(); - return true; -} - -impHandler0(petDropLoot) -{ - if (petHandler != nullptr) - petHandler->dropLoot(); - return true; -} - -impHandler0(petReturnToEgg) -{ - if (petHandler != nullptr) - petHandler->returnToEgg(); - return true; -} - -impHandler0(petUnequip) -{ - if (petHandler != nullptr) - petHandler->unequip(); - return true; -} - -} // namespace Actions diff --git a/src/progs/manaplus/actions/statusbar.cpp b/src/progs/manaplus/actions/statusbar.cpp deleted file mode 100644 index 50ae32935..000000000 --- a/src/progs/manaplus/actions/statusbar.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/statusbar.h" - -#include "game.h" -#include "soundmanager.h" - -#include "actions/actiondef.h" - -#include "being/localplayer.h" -#include "being/playerrelation.h" -#include "being/playerrelations.h" - -#include "gui/viewport.h" - -#include "gui/widgets/tabs/chat/chattab.h" - -#include "listeners/updatestatuslistener.h" - -#include "resources/map/map.h" - -#include "utils/gettext.h" - -PRAGMA48(GCC diagnostic push) -PRAGMA48(GCC diagnostic ignored "-Wshadow") -#ifdef ANDROID -#ifndef USE_SDL2 -#include -#endif // USE_SDL2 -#endif // ANDROID -PRAGMA48(GCC diagnostic pop) - -#include "debug.h" - -namespace Actions -{ - -impHandler0(switchQuickDrop) -{ - callYellowBarCond(changeQuickDropCounter); -} - -impHandler0(changeCrazyMove) -{ - callYellowBar(changeCrazyMoveType); -} - -impHandler0(changePickupType) -{ - callYellowBar(changePickUpType); -} - -impHandler0(changeMoveType) -{ - callYellowBar(changeMoveType); -} - -impHandler0(changeAttackWeaponType) -{ - callYellowBar(changeAttackWeaponType); -} - -impHandler0(changeAttackType) -{ - callYellowBar(changeAttackType); -} - -impHandler0(changeTargetingType) -{ - callYellowBar(changeTargetingType); -} - -impHandler0(changeFollowMode) -{ - callYellowBar(changeFollowMode); -} - -impHandler0(changeImitationMode) -{ - callYellowBar(changeImitationMode); -} - -impHandler0(changeMagicAttackType) -{ - callYellowBar(changeMagicAttackType); -} - -impHandler0(changePvpMode) -{ - callYellowBar(changePvpAttackType); -} - -impHandler0(changeMoveToTarget) -{ - callYellowBar(changeMoveToTargetType); -} - -impHandler0(changeGameModifier) -{ - if (localPlayer != nullptr) - { - GameModifiers::changeGameModifiers(false); - return true; - } - return false; -} - -impHandler0(changeAudio) -{ - soundManager.changeAudio(); - if (localPlayer != nullptr) - localPlayer->updateMusic(); - return true; -} - -impHandler0(away) -{ - GameModifiers::changeAwayMode(true); - if (localPlayer != nullptr) - { - localPlayer->updateStatus(); - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - return false; -} - -impHandler0(camera) -{ - if (viewport != nullptr) - { - viewport->toggleCameraMode(); - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - return true; - } - return false; -} - -impHandler0(changeMapMode) -{ - if (viewport != nullptr) - viewport->toggleMapDrawType(); - UpdateStatusListener::distributeEvent(); - if (Game::instance() != nullptr) - { - if (Map *const map = Game::instance()->getCurrentMap()) - map->redrawMap(); - } - return true; -} - -impHandler0(changeTrade) -{ - unsigned int deflt = playerRelations.getDefault(); - if ((deflt & PlayerRelation::TRADE) != 0U) - { - if (localChatTab != nullptr) - { - // TRANSLATORS: disable trades message - localChatTab->chatLog(_("Ignoring incoming trade requests"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - deflt &= ~PlayerRelation::TRADE; - } - else - { - if (localChatTab != nullptr) - { - // TRANSLATORS: enable trades message - localChatTab->chatLog(_("Accepting incoming trade requests"), - ChatMsgType::BY_SERVER, - IgnoreRecord_false, - TryRemoveColors_true); - } - deflt |= PlayerRelation::TRADE; - } - - playerRelations.setDefault(deflt); - return true; -} - -} // namespace Actions diff --git a/src/progs/manaplus/actions/tabs.cpp b/src/progs/manaplus/actions/tabs.cpp deleted file mode 100644 index 9a421bfa6..000000000 --- a/src/progs/manaplus/actions/tabs.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/tabs.h" - -#include "actions/actiondef.h" - -#include "gui/windows/inventorywindow.h" -#include "gui/windows/socialwindow.h" -#include "gui/windows/shortcutwindow.h" - -#include "debug.h" - -namespace Actions -{ - -impHandler0(prevSocialTab) -{ - if (socialWindow != nullptr) - { - socialWindow->prevTab(); - return true; - } - return false; -} - -impHandler0(nextSocialTab) -{ - if (socialWindow != nullptr) - { - socialWindow->nextTab(); - return true; - } - return false; -} - -impHandler0(nextShortcutsTab) -{ - if (itemShortcutWindow != nullptr) - { - itemShortcutWindow->nextTab(); - return true; - } - return false; -} - -impHandler0(prevShortcutsTab) -{ - if (itemShortcutWindow != nullptr) - { - itemShortcutWindow->prevTab(); - return true; - } - return false; -} - -impHandler0(nextCommandsTab) -{ - if (spellShortcutWindow != nullptr) - { - spellShortcutWindow->nextTab(); - return true; - } - return false; -} - -impHandler0(prevCommandsTab) -{ - if (spellShortcutWindow != nullptr) - { - spellShortcutWindow->prevTab(); - return true; - } - return false; -} - -impHandler0(nextInvTab) -{ - InventoryWindow::nextTab(); - return true; -} - -impHandler0(prevInvTab) -{ - InventoryWindow::prevTab(); - return true; -} - -} // namespace Actions diff --git a/src/progs/manaplus/actions/target.cpp b/src/progs/manaplus/actions/target.cpp deleted file mode 100644 index 7760ff746..000000000 --- a/src/progs/manaplus/actions/target.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/target.h" - -#include "actions/actiondef.h" - -#include "being/localplayer.h" - -#include "gui/popups/popupmenu.h" - -#include "debug.h" - -namespace Actions -{ - -static bool setTarget(const ActorTypeT type, const AllowSort allowSort) -{ - if (localPlayer != nullptr) - return localPlayer->setNewTarget(type, allowSort) != nullptr; - return false; -} - -impHandler0(targetPlayer) -{ - return setTarget(ActorType::Player, AllowSort_true); -} - -impHandler0(targetMonster) -{ - return setTarget(ActorType::Monster, AllowSort_true); -} - -impHandler0(targetClosestMonster) -{ - return setTarget(ActorType::Monster, AllowSort_false); -} - -impHandler0(targetNPC) -{ - return setTarget(ActorType::Npc, AllowSort_true); -} - -impHandler0(targetMercenary) -{ - return setTarget(ActorType::Mercenary, AllowSort_true); -} - -impHandler0(targetSkillUnit) -{ - return setTarget(ActorType::SkillUnit, AllowSort_true); -} - -impHandler0(targetPet) -{ - return setTarget(ActorType::Pet, AllowSort_true); -} - -impHandler0(contextMenu) -{ - if (localPlayer == nullptr) - return false; - const Being *const target = localPlayer->getTarget(); - if (target == nullptr) - return true; - - popupMenu->showPopup(target->getPixelX(), - target->getPixelY(), - target); - return true; -} - -} // namespace Actions diff --git a/src/progs/manaplus/actions/windows.cpp b/src/progs/manaplus/actions/windows.cpp deleted file mode 100644 index 2f803923e..000000000 --- a/src/progs/manaplus/actions/windows.cpp +++ /dev/null @@ -1,392 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus 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 "actions/windows.h" - -#include "actormanager.h" -#include "client.h" - -#include "actions/actiondef.h" - -#include "being/localplayer.h" - -#include "gui/dialogsmanager.h" - -#include "gui/windows/bankwindow.h" -#include "gui/windows/clanwindow.h" -#include "gui/windows/skilldialog.h" -#include "gui/windows/socialwindow.h" -#include "gui/windows/statuswindow.h" -#include "gui/windows/questswindow.h" -#include "gui/windows/whoisonline.h" -#include "gui/windows/chatwindow.h" -#include "gui/windows/debugwindow.h" -#include "gui/windows/didyouknowwindow.h" -#include "gui/windows/equipmentwindow.h" -#include "gui/windows/helpwindow.h" -#include "gui/windows/inventorywindow.h" -#include "gui/windows/killstats.h" -#include "gui/windows/mailwindow.h" -#include "gui/windows/minimap.h" -#include "gui/windows/outfitwindow.h" -#include "gui/windows/setupwindow.h" -#include "gui/windows/serverinfowindow.h" -#include "gui/windows/shopwindow.h" -#include "gui/windows/shortcutwindow.h" -#include "gui/windows/updaterwindow.h" - -#include "gui/widgets/createwidget.h" - -#include "gui/widgets/tabs/chat/chattab.h" - -#include "utils/gettext.h" - -#include "net/net.h" - -#include "debug.h" - -namespace Actions -{ - -impHandler0(setupWindowShow) -{ - if (setupWindow != nullptr) - { - if (setupWindow->isWindowVisible()) - { - setupWindow->doCancel(); - } - else - { - setupWindow->setVisible(Visible_true); - setupWindow->requestMoveToTop(); - } - return true; - } - return false; -} - -impHandler0(hideWindows) -{ - if (setupWindow != nullptr) - setupWindow->hideWindows(); - return true; -} - -static bool showHelpPage(const std::string &page, const bool showHide) -{ - if (helpWindow != nullptr) - { - if (showHide && helpWindow->isWindowVisible()) - { - helpWindow->setVisible(Visible_false); - } - else - { - helpWindow->loadHelp(page); - helpWindow->requestMoveToTop(); - } - return true; - } - return false; -} - -impHandler(helpWindowShow) -{ - if ((chatWindow == nullptr) || !chatWindow->isInputFocused()) - return showHelpPage("index", true); - if (event.tab == nullptr) - return showHelpPage("chatcommands", true); - switch (event.tab->getType()) - { - case ChatTabType::PARTY: - return showHelpPage("chatparty", true); - case ChatTabType::GUILD: - return showHelpPage("chatguild", true); - case ChatTabType::WHISPER: - return showHelpPage("chatwhisper", true); - case ChatTabType::DEBUG: - return showHelpPage("chatdebug", true); - case ChatTabType::TRADE: - return showHelpPage("chattrade", true); - case ChatTabType::BATTLE: - return showHelpPage("chatbattle", true); - case ChatTabType::LANG: - return showHelpPage("chatlang", true); - case ChatTabType::GM: - return showHelpPage("chatgm", true); - case ChatTabType::CHANNEL: - return showHelpPage("chatchannel", true); - case ChatTabType::CLAN: - return showHelpPage("chatclan", true); - default: - case ChatTabType::UNKNOWN: - case ChatTabType::INPUT: - return showHelpPage("chatcommands", true); - } -} - -impHandler0(aboutWindowShow) -{ - return showHelpPage("about", false); -} - -static void showHideWindow(Window *const window) -{ - if (window != nullptr) - { - window->setVisible(fromBool( - !window->isWindowVisible(), Visible)); - if (window->isWindowVisible()) - window->requestMoveToTop(); - } -} - -impHandler0(statusWindowShow) -{ - showHideWindow(statusWindow); - return true; -} - -impHandler0(inventoryWindowShow) -{ - showHideWindow(inventoryWindow); - return true; -} - -impHandler0(equipmentWindowShow) -{ - showHideWindow(equipmentWindow); - return true; -} - -impHandler0(skillDialogShow) -{ - showHideWindow(skillDialog); - return true; -} - -impHandler0(minimapWindowShow) -{ - if (minimap != nullptr) - { - minimap->toggle(); - return true; - } - return false; -} - -impHandler0(chatWindowShow) -{ - showHideWindow(chatWindow); - return true; -} - -impHandler0(shortcutWindowShow) -{ - showHideWindow(itemShortcutWindow); - return true; -} - -impHandler0(debugWindowShow) -{ - showHideWindow(debugWindow); - return true; -} - -impHandler0(socialWindowShow) -{ - showHideWindow(socialWindow); - return true; -} - -impHandler0(emoteShortcutWindowShow) -{ - showHideWindow(emoteShortcutWindow); - return true; -} - -impHandler0(outfitWindowShow) -{ - showHideWindow(outfitWindow); - return true; -} - -impHandler0(shopWindowShow) -{ - showHideWindow(shopWindow); - return true; -} - -impHandler0(dropShortcutWindowShow) -{ - showHideWindow(dropShortcutWindow); - return true; -} - -impHandler0(killStatsWindowShow) -{ - showHideWindow(killStats); - return true; -} - -impHandler0(spellShortcutWindowShow) -{ - showHideWindow(spellShortcutWindow); - return true; -} - -impHandler0(whoIsOnlineWindowShow) -{ - showHideWindow(whoIsOnline); - return true; -} - -impHandler0(didYouKnowWindowShow) -{ - showHideWindow(didYouKnowWindow); - return true; -} - -impHandler0(questsWindowShow) -{ - showHideWindow(questsWindow); - return true; -} - -impHandler0(bankWindowShow) -{ -#ifdef TMWA_SUPPORT - if (Net::getNetworkType() == ServerType::TMWATHENA) - return false; -#endif // TMWA_SUPPORT - - showHideWindow(bankWindow); - return true; -} - -impHandler0(cartWindowShow) -{ - if (Net::getNetworkType() == ServerType::TMWATHENA || - (localPlayer == nullptr) || - !localPlayer->getHaveCart()) - { - return false; - } - - showHideWindow(cartWindow); - if (inventoryWindow != nullptr) - inventoryWindow->updateDropButton(); - return true; -} - -impHandler0(updaterWindowShow) -{ - if (updaterWindow != nullptr) - updaterWindow->deleteSelf(); - else - DialogsManager::createUpdaterWindow(); - return true; -} - -impHandler0(quickWindowShow) -{ - if (setupWindow != nullptr) - { - if (setupWindow->isWindowVisible()) - setupWindow->doCancel(); - setupWindow->setVisible(Visible_true); - // TRANSLATORS: settings tab name - setupWindow->activateTab(_("Quick")); - setupWindow->requestMoveToTop(); - return true; - } - return false; -} - -impHandler0(mailWindowShow) -{ - showHideWindow(mailWindow); - return true; -} - -impHandler0(serverInfoWindowShow) -{ - if (serverInfoWindow != nullptr && - serverInfoWindow->isWindowVisible()) - { - serverInfoWindow->close(); - serverInfoWindow = nullptr; - } - else - { - serverInfoWindow = CREATEWIDGETR(ServerInfoWindow, - client->getCurrentServer()); - serverInfoWindow->requestMoveToTop(); - } - return true; -} - -impHandler0(clanWindowShow) -{ - showHideWindow(clanWindow); - return true; -} - -impHandler(showItems) -{ - const std::string args = event.args; - if (args.empty()) - return false; - - Being *being = nullptr; - if (args[0] == ':') - { - being = actorManager->findBeing(fromInt(atoi( - args.substr(1).c_str()), BeingId)); - if ((being != nullptr) && being->getType() == ActorType::Monster) - being = nullptr; - } - else - { - being = actorManager->findBeingByName(args, ActorType::Player); - } - if (being == nullptr) - return true; - if (being == localPlayer) - { - if (equipmentWindow != nullptr && - !equipmentWindow->isWindowVisible()) - { - equipmentWindow->setVisible(Visible_true); - } - } - else - { - if (beingEquipmentWindow != nullptr) - { - beingEquipmentWindow->setBeing(being); - beingEquipmentWindow->setVisible(Visible_true); - } - } - return true; -} - -} // namespace Actions diff --git a/src/progs/manaplus/client.cpp b/src/progs/manaplus/client.cpp deleted file mode 100644 index d8ba7e1c2..000000000 --- a/src/progs/manaplus/client.cpp +++ /dev/null @@ -1,2089 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2004-2009 The Mana World Development Team - * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus 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 "progs/manaplus/client.h" - -#include "chatlogger.h" -#include "configmanager.h" -#include "dirs.h" -#include "eventsmanager.h" -#include "game.h" -#include "graphicsmanager.h" -#include "main.h" -#include "party.h" -#include "pincodemanager.h" -#include "settings.h" -#include "soundmanager.h" -#include "spellmanager.h" - -#include "being/localclan.h" -#include "being/localplayer.h" -#include "being/playerinfo.h" -#include "being/playerrelations.h" - -#include "const/net/net.h" - -#include "enums/being/attributesstrings.h" - -#include "fs/virtfs/fs.h" -#include "fs/virtfs/tools.h" - -#include "gui/dialogsmanager.h" -#include "gui/gui.h" -#include "gui/skin.h" -#include "gui/popupmanager.h" -#include "gui/windowmanager.h" - -#include "gui/shortcut/dropshortcut.h" -#include "gui/shortcut/emoteshortcut.h" -#include "gui/shortcut/itemshortcut.h" -#include "gui/shortcut/spellshortcut.h" - -#include "gui/windows/changeemaildialog.h" -#include "gui/windows/changepassworddialog.h" -#include "gui/windows/charselectdialog.h" -#include "gui/windows/connectiondialog.h" -#include "gui/windows/equipmentwindow.h" -#include "gui/windows/logindialog.h" -#include "gui/windows/npcdialog.h" -#include "gui/windows/okdialog.h" -#include "gui/windows/registerdialog.h" -#include "gui/windows/serverdialog.h" -#include "gui/windows/setupwindow.h" -#include "gui/windows/updaterwindow.h" -#include "gui/windows/quitdialog.h" -#include "gui/windows/worldselectdialog.h" - -#include "gui/widgets/button.h" -#include "gui/widgets/createwidget.h" -#include "gui/widgets/desktop.h" -#include "gui/widgets/windowcontainer.h" - -#include "input/inputmanager.h" -#include "input/joystick.h" -#include "input/keyboardconfig.h" - -#include "input/touch/touchmanager.h" - -#include "net/charserverhandler.h" -#include "net/chathandler.h" -#include "net/download.h" -#include "net/gamehandler.h" -#include "net/generalhandler.h" -#include "net/guildhandler.h" -#include "net/inventoryhandler.h" -#include "net/ipc.h" -#include "net/loginhandler.h" -#include "net/net.h" -#include "net/updatetypeoperators.h" -#include "net/useragent.h" -#include "net/packetlimiter.h" -#include "net/partyhandler.h" - -#ifdef TMWA_SUPPORT -#include "net/tmwa/guildmanager.h" -#endif // TMWA_SUPPORT - -#include "particle/particleengine.h" - -#include "resources/dbmanager.h" -#include "resources/imagehelper.h" - -#include "resources/dye/dyepalette.h" - -#include "resources/resourcemanager/resourcemanager.h" - -#include "resources/sprite/spritereference.h" - -#include "utils/checkutils.h" -#include "utils/cpu.h" -#include "utils/delete2.h" -#include "utils/dumplibs.h" -#include "utils/dumpsizes.h" -#include "utils/env.h" -#include "utils/fuzzer.h" -#include "utils/gettext.h" -#include "utils/gettexthelper.h" -#include "utils/mrand.h" -#ifdef ANDROID -#include "fs/paths.h" -#endif // ANDROID -#include "utils/perfstat.h" -#include "utils/sdlcheckutils.h" -#include "utils/sdlhelper.h" -#include "utils/timer.h" - -#include "utils/translation/translationmanager.h" - -#include "listeners/assertlistener.h" -#include "listeners/errorlistener.h" - -#ifdef USE_OPENGL -#include "test/testlauncher.h" -#include "test/testmain.h" -#else // USE_OPENGL -#include "configuration.h" -#endif // USE_OPENGL - -#ifdef WIN32 -PRAGMA48(GCC diagnostic push) -PRAGMA48(GCC diagnostic ignored "-Wshadow") -#include -PRAGMA48(GCC diagnostic pop) -#include "fs/specialfolder.h" -#undef ERROR -#endif // WIN32 - -#ifdef ANDROID -#ifndef USE_SDL2 -PRAGMA48(GCC diagnostic push) -PRAGMA48(GCC diagnostic ignored "-Wshadow") -#include -PRAGMA48(GCC diagnostic pop) -#include -#endif // USE_SDL2 -#endif // ANDROID - -#include - -#ifdef USE_MUMBLE -#include "mumblemanager.h" -#endif // USE_MUMBLE - -PRAGMA48(GCC diagnostic push) -PRAGMA48(GCC diagnostic ignored "-Wshadow") -#ifdef USE_SDL2 -#include -#else // USE_SDL2 -#include -#endif // USE_SDL2 -PRAGMA48(GCC diagnostic pop) - -#include "debug.h" - -std::string errorMessage; -LoginData loginData; - -Client *client = nullptr; - -extern FPSmanager fpsManager; -extern int evolPacketOffset; - -volatile bool runCounters; -bool isSafeMode = false; -int serverVersion = 0; -int packetVersion = 0; -int packetVersionMain = 0; -int packetVersionRe = 0; -int packetVersionZero = 0; -int packetsType = 0; -int itemIdLen = 2; -bool packets_main = true; -bool packets_re = false; -bool packets_zero = false; -unsigned int tmwServerVersion = 0; -time_t start_time; -unsigned int mLastHost = 0; -unsigned long mSearchHash = 0; -int textures_count = 0; -volatile bool isTerminate = false; - -namespace -{ - class AccountListener final : public ActionListener - { - public: - AccountListener() - { } - - A_DELETE_COPY(AccountListener) - - void action(const ActionEvent &event A_UNUSED) override final - { - client->setState(State::CHAR_SELECT); - } - } accountListener; - - class LoginListener final : public ActionListener - { - public: - LoginListener() - { } - - A_DELETE_COPY(LoginListener) - - void action(const ActionEvent &event A_UNUSED) override final - { - client->setState(State::PRE_LOGIN); - } - } loginListener; -} // namespace - -Client::Client() : - ActionListener(), - mCurrentServer(), - mGame(nullptr), - mCurrentDialog(nullptr), - mQuitDialog(nullptr), - mSetupButton(nullptr), - mVideoButton(nullptr), - mHelpButton(nullptr), - mAboutButton(nullptr), - mThemesButton(nullptr), - mPerfomanceButton(nullptr), -#ifdef ANDROID - mCloseButton(nullptr), -#endif // ANDROID - mState(State::CHOOSE_SERVER), - mOldState(State::START), - mSkin(nullptr), - mButtonPadding(1), - mButtonSpacing(3), - mPing(0), - mConfigAutoSaved(false) -{ - WindowManager::init(); -} - -void Client::testsInit() -{ - if (!settings.options.test.empty() && - settings.options.test != "99") - { - gameInit(); - } - else - { - initRand(); - logger = new Logger; - SDL::initLogger(); - Dirs::initLocalDataDir(); - Dirs::initTempDir(); - Dirs::initConfigDir(); - GettextHelper::initLang(); - } -} - -void Client::gameInit() -{ - logger = new Logger; - SDL::initLogger(); - - initRand(); - - assertListener = new AssertListener; - // Load branding information - if (!settings.options.brandingPath.empty()) - { - branding.init(settings.options.brandingPath, - UseVirtFs_false, - SkipError_false); - } - setBrandingDefaults(branding); - - Dirs::initRootDir(); - Dirs::initHomeDir(); - - // Configure logger - if (!settings.options.logFileName.empty()) - { - settings.logFileName = settings.options.logFileName; - } - else - { - settings.logFileName = pathJoin(settings.localDataDir, - "manaplus.log"); - } - logger->log("Log file: " + settings.logFileName); - logger->setLogFile(settings.logFileName); - -#ifdef USE_FUZZER - Fuzzer::init(); -#endif // USE_FUZZER - - if (settings.options.ipc == true) - IPC::start(); - if (settings.options.test.empty()) - ConfigManager::backupConfig("config.xml"); - ConfigManager::initConfiguration(); - SDL::setLogLevel(config.getIntValue("sdlLogLevel")); - settings.init(); - Net::loadIgnorePackets(); - setPathsDefaults(paths); - initFeatures(); - initPaths(); - logger->log("init 4"); - logger->setDebugLog(config.getBoolValue("debugLog")); - logger->setReportUnimplemented(config.getBoolValue("unimplimentedLog")); - - config.incValue("runcount"); - -#ifndef ANDROID - if (settings.options.test.empty()) - ConfigManager::storeSafeParameters(); -#endif // ANDROID - - if (!VirtFs::setWriteDir(settings.localDataDir)) - { - logger->error(strprintf("%s couldn't be set as home directory! " - "Exiting.", settings.localDataDir.c_str())); - } - - GettextHelper::initLang(); - - chatLogger = new ChatLogger; - if (settings.options.chatLogDir.empty()) - { - chatLogger->setBaseLogDir(settings.localDataDir - + std::string("/logs/")); - } - else - { - chatLogger->setBaseLogDir(settings.options.chatLogDir); - } - - // Log the client version - logger->log1(FULL_VERSION); - logger->log("Start configPath: " + config.getConfigPath()); - - Dirs::initScreenshotDir(); - - updateEnv(); - SDL::allowScreenSaver(config.getBoolValue("allowscreensaver")); - dumpLibs(); - dumpSizes(); - - // Initialize SDL - logger->log1("Initializing SDL..."); - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) - { - logger->safeError(strprintf("Could not initialize SDL: %s", - SDL_GetError())); - } -#ifndef __SWITCH__ - atexit(SDL_Quit); -#endif - PacketLimiter::initPacketLimiter(); -#ifndef USE_SDL2 - SDL_EnableUNICODE(1); -#endif // USE_SDL2 - - WindowManager::applyKeyRepeat(); - eventsManager.init(); - eventsManager.enableEvents(); - -#ifdef WIN32 - Dirs::mountDataDir(); -#endif // WIN32 -#ifndef USE_SDL2 - WindowManager::setIcon(); -#endif // USE_SDL2 - - ConfigManager::checkConfigVersion(); - logVars(); - Cpu::detect(); - DyePalette::initFunctions(); -#if defined(USE_OPENGL) -#if !defined(ANDROID) && !defined(__APPLE__) -#if !defined(__native_client__) && !defined(__SWITCH__) && !defined(UNITTESTS) - if (!settings.options.safeMode && - settings.options.renderer < 0 && - settings.options.test.empty() && - !settings.options.validate && - !config.getBoolValue("videodetected")) - { - graphicsManager.detectVideoSettings(); - } -#endif // !defined(__native_client__) && !defined(__SWITCH__) && - // !defined(UNITTESTS) -#endif // !defined(ANDROID) && !defined(__APPLE__) && -#endif // defined(USE_OPENGL) - - initGraphics(); - UserAgent::update(); - - touchManager.init(); - -#ifndef WIN32 - Dirs::extractDataDir(); - Dirs::mountDataDir(); -#endif // WIN32 - - Dirs::updateDataPath(); - - // Add the main data directories to our VirtFs search path - if (!settings.options.dataPath.empty()) - { - VirtFs::mountDir(settings.options.dataPath, - Append_false); - } - - // Add the local data directory to VirtFs search path - VirtFs::mountDir(settings.localDataDir, - Append_false); - TranslationManager::loadCurrentLang(); - TranslationManager::loadDictionaryLang(); -#ifdef ENABLE_CUSTOMNLS - TranslationManager::loadGettextLang(); -#endif // ENABLE_CUSTOMNLS - -#ifdef USE_SDL2 - WindowManager::setIcon(); -#endif // USE_SDL2 - WindowManager::initTitle(); - - mainGraphics->postInit(); - - theme = new Theme; - Theme::selectSkin(); - ActorSprite::load(); - touchManager.init(); - - // Initialize the item and emote shortcuts. - for (size_t f = 0; f < SHORTCUT_TABS; f ++) - itemShortcut[f] = new ItemShortcut(f); - emoteShortcut = new EmoteShortcut; - dropShortcut = new DropShortcut; - - gui = new Gui; - gui->postInit(mainGraphics); - dialogsManager = new DialogsManager; - popupManager = new PopupManager; - - initSoundManager(); - - // Initialize keyboard - keyboard.init(); - inputManager.init(); - - // Initialise player relations - playerRelations.init(); - Joystick::init(); - WindowManager::createWindows(); - - keyboard.update(); - if (joystick != nullptr) - joystick->update(); - - // Initialize default server - mCurrentServer.hostname = settings.options.serverName; - mCurrentServer.port = settings.options.serverPort; - if (!settings.options.serverType.empty()) - { - mCurrentServer.type = ServerInfo::parseType( - settings.options.serverType); - } - - loginData.username = settings.options.username; - loginData.password = settings.options.password; - LoginDialog::savedPassword = settings.options.password; - loginData.remember = (serverConfig.getValue("remember", 1) != 0); - loginData.registerLogin = false; - - if (mCurrentServer.hostname.empty()) - { - mCurrentServer.hostname = branding.getValue("defaultServer", ""); - settings.options.serverName = mCurrentServer.hostname; - } - - if (mCurrentServer.port == 0) - { - mCurrentServer.port = CAST_U16(branding.getValue( - "defaultPort", CAST_S32(DEFAULT_PORT))); - mCurrentServer.type = ServerInfo::parseType( - branding.getValue("defaultServerType", "tmwathena")); - } - - chatLogger->setServerName(mCurrentServer.hostname); - - if (loginData.username.empty() && loginData.remember) - loginData.username = serverConfig.getValue("username", ""); - - if (mState != State::ERROR) - mState = State::CHOOSE_SERVER; - - startTimers(); - - const int fpsLimit = config.getIntValue("fpslimit"); - settings.limitFps = fpsLimit > 0; - - SDL_initFramerate(&fpsManager); - WindowManager::setFramerate(fpsLimit); - initConfigListeners(); - - settings.guiAlpha = config.getFloatValue("guialpha"); - optionChanged("fpslimit"); - - start_time = time(nullptr); - - PlayerInfo::init(); - -#ifdef ANDROID -#ifndef USE_SDL2 - WindowManager::updateScreenKeyboard(SDL_GetScreenKeyboardHeight(nullptr)); -#endif // USE_SDL2 -#endif // ANDROID - -#ifdef USE_MUMBLE - if (!mumbleManager) - mumbleManager = new MumbleManager; -#endif // USE_MUMBLE - - mSkin = theme->load("windowmenu.xml", - "", - true, - Theme::getThemePath()); - if (mSkin != nullptr) - { - mButtonPadding = mSkin->getPadding(); - mButtonSpacing = mSkin->getOption("spacing", 3); - } - if (settings.options.error) - inputManager.executeAction(InputAction::ERROR); - - if (settings.options.validate == true) - runValidate(); -} - -Client::~Client() -{ - if (!settings.options.testMode) - gameClear(); - else - testsClear(); - CHECKLISTENERS -} - -void Client::initConfigListeners() -{ - config.addListener("fpslimit", this); - config.addListener("guialpha", this); - config.addListener("gamma", this); - config.addListener("enableGamma", this); - config.addListener("particleEmitterSkip", this); - config.addListener("vsync", this); - config.addListener("repeateDelay", this); - config.addListener("repeateInterval", this); - config.addListener("logInput", this); -} - -void Client::initSoundManager() -{ - // Initialize sound engine - try - { - if (config.getBoolValue("sound")) - soundManager.init(); - - soundManager.setSfxVolume(config.getIntValue("sfxVolume")); - soundManager.setMusicVolume(config.getIntValue("musicVolume")); - } - catch (const char *const err) - { - mState = State::ERROR; - errorMessage = err; - logger->log("Warning: %s", err); - } - soundManager.playMusic(branding.getValue( - "loginMusic", - "keprohm.ogg"), - SkipError_true); -} - -void Client::initGraphics() -{ -#ifndef USE_SDL2 - WindowManager::applyVSync(); -#endif // USE_SDL2 - - runCounters = config.getBoolValue("packetcounters"); - - graphicsManager.initGraphics(); -#ifdef USE_SDL2 - WindowManager::applyVSync(); -#endif // USE_SDL2 - - imageHelper->postInit(); - setConfigDefaults2(config); - WindowManager::applyGrabMode(); - WindowManager::applyGamma(); - - mainGraphics->beginDraw(); -} - -void Client::testsClear() -{ - if (!settings.options.test.empty()) - gameClear(); - else - BeingInfo::clear(); -} - -void Client::gameClear() -{ - if (logger != nullptr) - logger->log1("Quitting1"); - isTerminate = true; - config.removeListeners(this); - - delete2(assertListener) - - IPC::stop(); - eventsManager.shutdown(); - WindowManager::deleteWindows(); - if (windowContainer != nullptr) - windowContainer->slowLogic(); - - stopTimers(); - DbManager::unloadDb(); - - if (loginHandler != nullptr) - loginHandler->clearWorlds(); - - if (chatHandler != nullptr) - chatHandler->clear(); - - if (charServerHandler != nullptr) - charServerHandler->clear(); - - delete2(ipc) - -#ifdef USE_MUMBLE - delete2(mumbleManager) -#endif // USE_MUMBLE - - PlayerInfo::deinit(); - - // Before config.write() since it writes the shortcuts to the config - for (unsigned f = 0; f < SHORTCUT_TABS; f ++) - delete2(itemShortcut[f]) - delete2(emoteShortcut) - delete2(dropShortcut) - - playerRelations.store(); - - if (logger != nullptr) - logger->log1("Quitting2"); - - delete2(mCurrentDialog) - delete2(popupManager) - delete2(dialogsManager) - delete2(gui) - - if (inventoryHandler != nullptr) - inventoryHandler->clear(); - - if (logger != nullptr) - logger->log1("Quitting3"); - - touchManager.clear(); - - GraphicsManager::deleteRenderers(); - - if (logger != nullptr) - logger->log1("Quitting4"); - - XML::cleanupXML(); - - if (logger != nullptr) - logger->log1("Quitting5"); - - BeingInfo::clear(); - - // Shutdown sound - soundManager.close(); - - if (logger != nullptr) - logger->log1("Quitting6"); - - ActorSprite::unload(); - - ResourceManager::deleteInstance(); - - soundManager.shutdown(); - - if (logger != nullptr) - logger->log1("Quitting8"); - - WindowManager::deleteIcon(); - - if (logger != nullptr) - logger->log1("Quitting9"); - - delete2(joystick) - - keyboard.deinit(); - - if (logger != nullptr) - logger->log1("Quitting10"); - - touchManager.shutdown(); - -#ifdef DEBUG_CONFIG - config.enableKeyLogging(); -#endif // DEBUG_CONFIG - - config.removeOldKeys(); - config.write(); - serverConfig.write(); - - config.clear(); - serverConfig.clear(); - - if (logger != nullptr) - logger->log1("Quitting11"); - -#ifdef USE_PROFILER - Perfomance::clear(); -#endif // USE_PROFILER - -#ifdef DEBUG_OPENGL_LEAKS - if (logger) - logger->log("textures left: %d", textures_count); -#endif // DEBUG_OPENGL_LEAKS - - Graphics::cleanUp(); - - if (logger != nullptr) - logger->log1("Quitting12"); - - delete2(chatLogger) - TranslationManager::close(); -} - -int Client::testsExec() -{ -#ifdef USE_OPENGL - if (settings.options.test.empty()) - { - TestMain test; - return test.exec(); - } - else - { - TestLauncher launcher(settings.options.test); - return launcher.exec(); - } -#else // USE_OPENGL - - return 0; -#endif // USE_OPENGL -} - -#define ADDBUTTON(var, object) var = object; \ - x -= var->getWidth() + mButtonSpacing; \ - var->setPosition(x, mButtonPadding); \ - top->add(var); - -void Client::stateConnectGame1() -{ - if ((gameHandler != nullptr) && - (loginHandler != nullptr) && - gameHandler->isConnected()) - { - loginHandler->disconnect(); - } -} - -void Client::stateConnectServer1() -{ - if (mOldState == State::CHOOSE_SERVER) - { - settings.serverName = mCurrentServer.hostname; - ConfigManager::initServerConfig(mCurrentServer.hostname); - PacketLimiter::initPacketLimiter(); - initTradeFilter(); - Dirs::initUsersDir(); - playerRelations.init(); - - // Initialize the item and emote shortcuts. - for (unsigned f = 0; f < SHORTCUT_TABS; f ++) - { - delete itemShortcut[f]; - itemShortcut[f] = new ItemShortcut(f); - } - delete emoteShortcut; - emoteShortcut = new EmoteShortcut; - - // Initialize the drop shortcuts. - delete dropShortcut; - dropShortcut = new DropShortcut; - - initFeatures(); - PlayerInfo::loadData(); - loginData.registerUrl = mCurrentServer.registerUrl; - loginData.packetVersion = mCurrentServer.packetVersion; - if (!mCurrentServer.onlineListUrl.empty()) - settings.onlineListUrl = mCurrentServer.onlineListUrl; - else - settings.onlineListUrl = settings.serverName; - settings.persistentIp = mCurrentServer.persistentIp; - settings.supportUrl = mCurrentServer.supportUrl; - settings.updateMirrors = mCurrentServer.updateMirrors; - settings.enableRemoteCommands = (serverConfig.getValue( - "enableRemoteCommands", 1) != 0); - - if (settings.options.username.empty()) - { - if (loginData.remember) - loginData.username = serverConfig.getValue("username", ""); - else - loginData.username.clear(); - } - else - { - loginData.username = settings.options.username; - } -#ifdef SAVE_PASSWORD - LoginDialog::savedPassword = loginData.remember ? - serverConfig.getValue("password", "") : ""; - loginData.password = LoginDialog::savedPassword; - settings.options.password = LoginDialog::savedPassword; -#endif - settings.login = loginData.username; - WindowManager::updateTitle(); - - loginData.remember = (serverConfig.getValue("remember", 1) != 0); - Net::connectToServer(mCurrentServer); - -#ifdef USE_MUMBLE - if (mumbleManager) - mumbleManager->setServer(mCurrentServer.hostname); -#endif // USE_MUMBLE - -#ifdef TMWA_SUPPORT - GuildManager::init(); -#endif // TMWA_SUPPORT - - if (!mConfigAutoSaved) - { - mConfigAutoSaved = true; - config.write(); - } - } - else if (loginHandler != nullptr && - loginHandler->isConnected()) - { - mState = State::PRE_LOGIN; - } -} - -void Client::stateWorldSelect1() -{ - if (mOldState == State::UPDATE && - (loginHandler != nullptr)) - { - if (loginHandler->getWorlds().size() < 2) - mState = State::PRE_LOGIN; - } -} - -void Client::stateGame1() -{ - if (gui == nullptr) - return; - - BasicContainer2 *const top = static_cast( - gui->getTop()); - - if (top == nullptr) - return; - - CREATEWIDGETV(desktop, Desktop, nullptr); - top->add(desktop); - int x = top->getWidth() - mButtonPadding; - ADDBUTTON(mSetupButton, new Button(desktop, - // TRANSLATORS: setup tab quick button - _("Setup"), "Setup", BUTTON_SKIN, this)) - ADDBUTTON(mPerfomanceButton, new Button(desktop, - // TRANSLATORS: perfoamance tab quick button - _("Performance"), "Perfomance", BUTTON_SKIN, this)) - ADDBUTTON(mVideoButton, new Button(desktop, - // TRANSLATORS: video tab quick button - _("Video"), "Video", BUTTON_SKIN, this)) - ADDBUTTON(mThemesButton, new Button(desktop, - // TRANSLATORS: theme tab quick button - _("Theme"), "Themes", BUTTON_SKIN, this)) - ADDBUTTON(mAboutButton, new Button(desktop, - // TRANSLATORS: theme tab quick button - _("About"), "about", BUTTON_SKIN, this)) - ADDBUTTON(mHelpButton, new Button(desktop, - // TRANSLATORS: theme tab quick button - _("Help"), "help", BUTTON_SKIN, this)) -#ifdef ANDROID - ADDBUTTON(mCloseButton, new Button(desktop, - // TRANSLATORS: close quick button - _("Close"), "close", BUTTON_SKIN, this)) -#endif // ANDROID - - desktop->setSize(mainGraphics->getWidth(), - mainGraphics->getHeight()); -} - -void Client::stateSwitchLogin1() -{ - if (mOldState == State::GAME && - (gameHandler != nullptr)) - { - gameHandler->disconnect(); - } -} - -int Client::gameExec() -{ - int lastTickTime = tick_time; - - Perf::init(); - - while (mState != State::EXIT) - { - PROFILER_START(); - PERF_STAT(0); - if (eventsManager.handleEvents()) - continue; - - PERF_STAT(1); - - BLOCK_START("Client::gameExec 3") - if (generalHandler != nullptr) - generalHandler->flushNetwork(); - BLOCK_END("Client::gameExec 3") - - PERF_STAT(2); - - BLOCK_START("Client::gameExec 4") - if (gui != nullptr) - gui->logic(); - - PERF_STAT(3); - - cur_time = time(nullptr); - int k = 0; - while (lastTickTime != tick_time && - k < 40) - { - if (mGame != nullptr) - mGame->logic(); - else if (gui != nullptr) - gui->handleInput(); - - ++lastTickTime; - k ++; - } - - PERF_STAT(4); - - soundManager.logic(); - - PERF_STAT(5); - - logic_count = logic_count + k; - if (gui != nullptr) - gui->slowLogic(); - - PERF_STAT(6); - - if (mGame != nullptr) - mGame->slowLogic(); - - PERF_STAT(7); - - slowLogic(); - - PERF_STAT(8); - - BLOCK_END("Client::gameExec 4") - - // This is done because at some point tick_time will wrap. - lastTickTime = tick_time; - - BLOCK_START("Client::gameExec 6") - if (mState == State::CONNECT_GAME) - { - stateConnectGame1(); - } - else if (mState == State::CONNECT_SERVER) - { - stateConnectServer1(); - } - else if (mState == State::WORLD_SELECT) - { - stateWorldSelect1(); - } - else if (mOldState == State::START || - (mOldState == State::GAME && mState != State::GAME)) - { - stateGame1(); - } - else if (mState == State::SWITCH_LOGIN) - { - stateSwitchLogin1(); - } - BLOCK_END("Client::gameExec 6") - - PERF_STAT(9); - - if (mState != mOldState) - { - BLOCK_START("Client::gameExec 7") - PlayerInfo::stateChange(mState); - - if (mOldState == State::GAME) - { - delete2(mGame) - assertListener = new AssertListener; - Game::clearInstance(); - ResourceManager::cleanOrphans(false); - Party::clearParties(); - Guild::clearGuilds(); - NpcDialog::clearDialogs(); - if (guildHandler != nullptr) - guildHandler->clear(); - if (partyHandler != nullptr) - partyHandler->clear(); - if (chatLogger != nullptr) - chatLogger->clear(); - if (!settings.options.dataPath.empty()) - UpdaterWindow::unloadMods(settings.options.dataPath); - else - UpdaterWindow::unloadMods(settings.oldUpdates); - if (!settings.options.skipUpdate) - UpdaterWindow::unloadMods(settings.oldUpdates + "/fix/"); - } - else if (mOldState == State::CHAR_SELECT) - { - if (mState != State::CHANGEPASSWORD && - charServerHandler != nullptr) - { - charServerHandler->clear(); - } - } - - mOldState = mState; - - // Get rid of the dialog of the previous state - delete2(mCurrentDialog) - - // State has changed, while the quitDialog was active, it might - // not be correct anymore - if (mQuitDialog != nullptr) - { - mQuitDialog->scheduleDelete(); - mQuitDialog = nullptr; - } - BLOCK_END("Client::gameExec 7") - - BLOCK_START("Client::gameExec 8") - switch (mState) - { - case State::CHOOSE_SERVER: - { - BLOCK_START("Client::gameExec STATE_CHOOSE_SERVER") - logger->log1("State: CHOOSE SERVER"); - unloadData(); - pincodeManager.closeDialogs(); - - // Allow changing this using a server choice dialog - // We show the dialog box only if the command-line - // options weren't set. - if (settings.options.serverName.empty() && - settings.options.serverPort == 0 && - !branding.getValue("onlineServerList", "a").empty()) - { - // Don't allow an alpha opacity - // lower than the default value - theme->setMinimumOpacity(0.8F); - - CREATEWIDGETV(mCurrentDialog, ServerDialog, - &mCurrentServer, - settings.configDir); - } - else - { - mState = State::CONNECT_SERVER; - - // Reset options so that cancelling or connect - // timeout will show the server dialog. - settings.options.serverName.clear(); - settings.options.serverPort = 0; - } - BLOCK_END("Client::gameExec STATE_CHOOSE_SERVER") - break; - } - - case State::CONNECT_SERVER: - BLOCK_START("Client::gameExec State::CONNECT_SERVER") - logger->log1("State: CONNECT SERVER"); - loginData.updateHosts.clear(); - CREATEWIDGETV(mCurrentDialog, ConnectionDialog, - // TRANSLATORS: connection dialog header - _("Connecting to server"), - State::SWITCH_SERVER); - TranslationManager::loadCurrentLang(); - TranslationManager::loadDictionaryLang(); - pincodeManager.init(); - BLOCK_END("Client::gameExec State::CONNECT_SERVER") - break; - - case State::PRE_LOGIN: - logger->log1("State: PRE_LOGIN"); - break; - - case State::LOGIN: - BLOCK_START("Client::gameExec State::LOGIN") - logger->log1("State: LOGIN"); - // Don't allow an alpha opacity - // lower than the default value - theme->setMinimumOpacity(0.8F); - - if (packetVersion == 0) - { - packetVersion = loginData.packetVersion; - if (packetVersion != 0) - { - loginHandler->updatePacketVersion(); - logger->log("Preconfigured packet version: %d", - packetVersion); - } - } - - loginData.updateType = static_cast( - serverConfig.getValue("updateType", 0)); - - mSearchHash = Net::Download::adlerBuffer( - const_cast(mCurrentServer.hostname.c_str()), - CAST_S32(mCurrentServer.hostname.size())); - if (settings.options.username.empty() || - settings.options.password.empty()) - { - CREATEWIDGETV(mCurrentDialog, LoginDialog, - loginData, - &mCurrentServer, - &settings.options.updateHost); - } - else - { - mState = State::LOGIN_ATTEMPT; - // Clear the password so that when login fails, the - // dialog will show up next time. - settings.options.password.clear(); - } - BLOCK_END("Client::gameExec State::LOGIN") - break; - - case State::LOGIN_ATTEMPT: - BLOCK_START("Client::gameExec State::LOGIN_ATTEMPT") - logger->log1("State: LOGIN ATTEMPT"); - CREATEWIDGETV(mCurrentDialog, ConnectionDialog, - // TRANSLATORS: connection dialog header - _("Logging in"), - State::SWITCH_SERVER); - if (loginHandler != nullptr) - loginHandler->loginOrRegister(&loginData); - BLOCK_END("Client::gameExec State::LOGIN_ATTEMPT") - break; - - case State::WORLD_SELECT: - BLOCK_START("Client::gameExec State::WORLD_SELECT") - logger->log1("State: WORLD SELECT"); - { - TranslationManager::loadCurrentLang(); - TranslationManager::loadDictionaryLang(); - if (loginHandler == nullptr) - { - BLOCK_END("Client::gameExec State::WORLD_SELECT") - break; - } - Worlds worlds = loginHandler->getWorlds(); - - if (worlds.empty()) - { - // Trust that the netcode knows what it's doing - mState = State::UPDATE; - } - else if (worlds.size() == 1) - { - loginHandler->chooseServer( - 0, mCurrentServer.persistentIp); - mState = State::UPDATE; - } - else - { - CREATEWIDGETV(mCurrentDialog, WorldSelectDialog, - worlds); - if (settings.options.chooseDefault) - { - static_cast(mCurrentDialog) - ->action(ActionEvent(nullptr, "ok")); - } - } - } - BLOCK_END("Client::gameExec State::WORLD_SELECT") - break; - - case State::WORLD_SELECT_ATTEMPT: - BLOCK_START("Client::gameExec State::WORLD_SELECT_ATTEMPT") - logger->log1("State: WORLD SELECT ATTEMPT"); - CREATEWIDGETV(mCurrentDialog, ConnectionDialog, - // TRANSLATORS: connection dialog header - _("Entering game world"), - State::WORLD_SELECT); - BLOCK_END("Client::gameExec State::WORLD_SELECT_ATTEMPT") - break; - - case State::UPDATE: - BLOCK_START("Client::gameExec State::UPDATE") - logger->log1("State: UPDATE"); - - // Determine which source to use for the update host - if (!settings.options.updateHost.empty()) - settings.updateHost = settings.options.updateHost; - else - settings.updateHost = loginData.updateHost; - Dirs::initUpdatesDir(); - - if (!settings.oldUpdates.empty()) - UpdaterWindow::unloadUpdates(settings.oldUpdates); - - if (settings.options.skipUpdate) - { - mState = State::LOAD_DATA; - settings.oldUpdates.clear(); - UpdaterWindow::loadDirMods(settings.options.dataPath); - } - else if ((loginData.updateType & UpdateType::Skip) != 0) - { - settings.oldUpdates = pathJoin(settings.localDataDir, - settings.updatesDir); - UpdaterWindow::loadLocalUpdates(settings.oldUpdates); - mState = State::LOAD_DATA; - } - else - { - settings.oldUpdates = pathJoin(settings.localDataDir, - settings.updatesDir); - CREATEWIDGETV(mCurrentDialog, UpdaterWindow, - settings.updateHost, - settings.oldUpdates, - settings.options.dataPath.empty(), - loginData.updateType); - } - BLOCK_END("Client::gameExec State::UPDATE") - break; - - case State::LOAD_DATA: - { - BLOCK_START("Client::gameExec State::LOAD_DATA") - logger->log1("State: LOAD DATA"); - - loadData(); - - mState = State::GET_CHARACTERS; - BLOCK_END("Client::gameExec State::LOAD_DATA") - break; - } - case State::GET_CHARACTERS: - BLOCK_START("Client::gameExec State::GET_CHARACTERS") - logger->log1("State: GET CHARACTERS"); - CREATEWIDGETV(mCurrentDialog, ConnectionDialog, - // TRANSLATORS: connection dialog header - _("Requesting characters"), - State::SWITCH_SERVER); - if (charServerHandler != nullptr) - charServerHandler->requestCharacters(); - BLOCK_END("Client::gameExec State::GET_CHARACTERS") - break; - - case State::CHAR_SELECT: - BLOCK_START("Client::gameExec State::CHAR_SELECT") - logger->log1("State: CHAR SELECT"); - // Don't allow an alpha opacity - // lower than the default value - theme->setMinimumOpacity(0.8F); - - settings.login = loginData.username; - WindowManager::updateTitle(); - - CREATEWIDGETV(mCurrentDialog, CharSelectDialog, - loginData); - pincodeManager.updateState(); - - if (!(static_cast(mCurrentDialog)) - ->selectByName(settings.options.character, - CharSelectDialog::Choose)) - { - (static_cast(mCurrentDialog)) - ->selectByName( - serverConfig.getValue("lastCharacter", ""), - settings.options.chooseDefault ? - CharSelectDialog::Choose : - CharSelectDialog::Focus); - } - - // Choosing character on the command line should work only - // once, clear it so that 'switch character' works. - settings.options.character.clear(); - BLOCK_END("Client::gameExec State::CHAR_SELECT") - break; - - case State::CONNECT_GAME: - BLOCK_START("Client::gameExec State::CONNECT_GAME") - logger->log1("State: CONNECT GAME"); - CREATEWIDGETV(mCurrentDialog, ConnectionDialog, - // TRANSLATORS: connection dialog header - _("Connecting to the game server"), - State::CHOOSE_SERVER); - if (gameHandler != nullptr) - gameHandler->connect(); - BLOCK_END("Client::gameExec State::CONNECT_GAME") - break; - - case State::CHANGE_MAP: - BLOCK_START("Client::gameExec State::CHANGE_MAP") - logger->log1("State: CHANGE_MAP"); - CREATEWIDGETV(mCurrentDialog, ConnectionDialog, - // TRANSLATORS: connection dialog header - _("Changing game servers"), - State::SWITCH_CHARACTER); - if (gameHandler != nullptr) - gameHandler->connect(); - BLOCK_END("Client::gameExec State::CHANGE_MAP") - break; - - case State::GAME: - BLOCK_START("Client::gameExec State::GAME") - if (localPlayer != nullptr) - { - logger->log("Memorizing selected character %s", - localPlayer->getName().c_str()); - serverConfig.setValue("lastCharacter", - localPlayer->getName()); -#ifdef USE_MUMBLE - if (mumbleManager) - mumbleManager->setPlayer(localPlayer->getName()); -#endif // USE_MUMBLE - Perf::init(); - } - - // Fade out logon-music here too to give the desired effect - // of "flowing" into the game. - soundManager.fadeOutMusic(1000); - - // Allow any alpha opacity - theme->setMinimumOpacity(-1.0F); - - if (chatLogger != nullptr) - chatLogger->setServerName(settings.serverName); - -#ifdef ANDROID - delete2(mCloseButton) -#endif // ANDROID - - delete2(mSetupButton) - delete2(mVideoButton) - delete2(mThemesButton) - delete2(mAboutButton) - delete2(mHelpButton) - delete2(mPerfomanceButton) - delete2(desktop) - - mCurrentDialog = nullptr; - - logger->log1("State: GAME"); - if (generalHandler != nullptr) - generalHandler->reloadPartially(); - mGame = new Game; - BLOCK_END("Client::gameExec State::GAME") - break; - - case State::LOGIN_ERROR: - BLOCK_START("Client::gameExec State::LOGIN_ERROR") - logger->log1("State: LOGIN ERROR"); - CREATEWIDGETV(mCurrentDialog, OkDialog, - // TRANSLATORS: error dialog header - _("Error"), - errorMessage, - // TRANSLATORS: ok dialog button - _("Close"), - DialogType::ERROR, - Modal_true, - ShowCenter_true, - nullptr, - 260); - mCurrentDialog->addActionListener(&loginListener); - mCurrentDialog = nullptr; // OkDialog deletes itself - BLOCK_END("Client::gameExec State::LOGIN_ERROR") - break; - - case State::ACCOUNTCHANGE_ERROR: - BLOCK_START("Client::gameExec State::ACCOUNTCHANGE_ERROR") - logger->log1("State: ACCOUNT CHANGE ERROR"); - CREATEWIDGETV(mCurrentDialog, OkDialog, - // TRANSLATORS: error dialog header - _("Error"), - errorMessage, - // TRANSLATORS: ok dialog button - _("Close"), - DialogType::ERROR, - Modal_true, - ShowCenter_true, - nullptr, - 260); - mCurrentDialog->addActionListener(&accountListener); - mCurrentDialog = nullptr; // OkDialog deletes itself - BLOCK_END("Client::gameExec State::ACCOUNTCHANGE_ERROR") - break; - - case State::REGISTER_PREP: - BLOCK_START("Client::gameExec State::REGISTER_PREP") - logger->log1("State: REGISTER_PREP"); - CREATEWIDGETV(mCurrentDialog, ConnectionDialog, - // TRANSLATORS: connection dialog header - _("Requesting registration details"), - State::LOGIN); - loginHandler->getRegistrationDetails(); - BLOCK_END("Client::gameExec State::REGISTER_PREP") - break; - - case State::REGISTER: - logger->log1("State: REGISTER"); - CREATEWIDGETV(mCurrentDialog, RegisterDialog, - loginData); - break; - - case State::REGISTER_ATTEMPT: - BLOCK_START("Client::gameExec State::REGISTER_ATTEMPT") - logger->log("Username is %s", loginData.username.c_str()); - if (loginHandler != nullptr) - loginHandler->registerAccount(&loginData); - BLOCK_END("Client::gameExec State::REGISTER_ATTEMPT") - break; - - case State::CHANGEPASSWORD: - BLOCK_START("Client::gameExec State::CHANGEPASSWORD") - logger->log1("State: CHANGE PASSWORD"); - CREATEWIDGETV(mCurrentDialog, ChangePasswordDialog, - loginData); - mCurrentDialog->setVisible(Visible_true); - BLOCK_END("Client::gameExec State::CHANGEPASSWORD") - break; - - case State::CHANGEPASSWORD_ATTEMPT: - BLOCK_START("Client::gameExec " - "State::CHANGEPASSWORD_ATTEMPT") - logger->log1("State: CHANGE PASSWORD ATTEMPT"); - if (loginHandler != nullptr) - { - loginHandler->changePassword(loginData.password, - loginData.newPassword); - } - BLOCK_END("Client::gameExec State::CHANGEPASSWORD_ATTEMPT") - break; - - case State::CHANGEPASSWORD_SUCCESS: - BLOCK_START("Client::gameExec " - "State::CHANGEPASSWORD_SUCCESS") - logger->log1("State: CHANGE PASSWORD SUCCESS"); - CREATEWIDGETV(mCurrentDialog, OkDialog, - // TRANSLATORS: password change message header - _("Password Change"), - // TRANSLATORS: password change message text - _("Password changed successfully!"), - // TRANSLATORS: ok dialog button - _("OK"), - DialogType::ERROR, - Modal_true, - ShowCenter_true, - nullptr, - 260); - mCurrentDialog->addActionListener(&accountListener); - mCurrentDialog = nullptr; // OkDialog deletes itself - loginData.password = loginData.newPassword; - loginData.newPassword.clear(); - BLOCK_END("Client::gameExec State::CHANGEPASSWORD_SUCCESS") - break; - - case State::CHANGEEMAIL: - logger->log1("State: CHANGE EMAIL"); - CREATEWIDGETV(mCurrentDialog, - ChangeEmailDialog, - loginData); - mCurrentDialog->setVisible(Visible_true); - break; - - case State::CHANGEEMAIL_ATTEMPT: - logger->log1("State: CHANGE EMAIL ATTEMPT"); - if (loginHandler != nullptr) - loginHandler->changeEmail(loginData.email); - break; - - case State::CHANGEEMAIL_SUCCESS: - logger->log1("State: CHANGE EMAIL SUCCESS"); - CREATEWIDGETV(mCurrentDialog, OkDialog, - // TRANSLATORS: email change message header - _("Email Change"), - // TRANSLATORS: email change message text - _("Email changed successfully!"), - // TRANSLATORS: ok dialog button - _("OK"), - DialogType::ERROR, - Modal_true, - ShowCenter_true, - nullptr, - 260); - mCurrentDialog->addActionListener(&accountListener); - mCurrentDialog = nullptr; // OkDialog deletes itself - break; - - case State::SWITCH_SERVER: - BLOCK_START("Client::gameExec State::SWITCH_SERVER") - logger->log1("State: SWITCH SERVER"); - - if (loginHandler != nullptr) - loginHandler->disconnect(); - if (gameHandler != nullptr) - { - gameHandler->disconnect(); - gameHandler->clear(); - } - settings.serverName.clear(); - settings.login.clear(); - WindowManager::updateTitle(); - serverConfig.write(); - serverConfig.unload(); - if (setupWindow != nullptr) - setupWindow->externalUnload(); - - mState = State::CHOOSE_SERVER; - BLOCK_END("Client::gameExec State::SWITCH_SERVER") - break; - - case State::SWITCH_LOGIN: - BLOCK_START("Client::gameExec State::SWITCH_LOGIN") - logger->log1("State: SWITCH LOGIN"); - - if (loginHandler != nullptr) - { - loginHandler->logout(); - loginHandler->disconnect(); - } - if (gameHandler != nullptr) - gameHandler->disconnect(); - if (loginHandler != nullptr) - loginHandler->connect(); - - settings.login.clear(); - WindowManager::updateTitle(); - mState = State::LOGIN; - BLOCK_END("Client::gameExec State::SWITCH_LOGIN") - break; - - case State::SWITCH_CHARACTER: - BLOCK_START("Client::gameExec State::SWITCH_CHARACTER") - logger->log1("State: SWITCH CHARACTER"); - - // Done with game - if (gameHandler != nullptr) - gameHandler->disconnect(); - - settings.login.clear(); - WindowManager::updateTitle(); - mState = State::GET_CHARACTERS; - BLOCK_END("Client::gameExec State::SWITCH_CHARACTER") - break; - - case State::LOGOUT_ATTEMPT: - logger->log1("State: LOGOUT ATTEMPT"); - break; - - case State::WAIT: - logger->log1("State: WAIT"); - break; - - case State::EXIT: - BLOCK_START("Client::gameExec State::EXIT") - logger->log1("State: EXIT"); - Net::unload(); - BLOCK_END("Client::gameExec State::EXIT") - break; - - case State::FORCE_QUIT: - BLOCK_START("Client::gameExec State::FORCE_QUIT") - logger->log1("State: FORCE QUIT"); - if (generalHandler != nullptr) - generalHandler->unload(); - mState = State::EXIT; - BLOCK_END("Client::gameExec State::FORCE_QUIT") - break; - - case State::ERROR: - BLOCK_START("Client::gameExec State::ERROR") - config.write(); -#ifdef SAVE_PASSWORD - if (errorMessage == "Wrong password.") - { - serverConfig.setValue("password", ""); - serverConfig.write(); - } -#endif - if (mOldState == State::GAME) - serverConfig.write(); - logger->log1("State: ERROR"); - logger->log("Error: %s\n", errorMessage.c_str()); - pincodeManager.closeDialogs(); - mCurrentDialog = DialogsManager::openErrorDialog( - // TRANSLATORS: error message header - _("Error"), - errorMessage, - Modal_true); - mCurrentDialog->addActionListener(&errorListener); - mCurrentDialog = nullptr; // OkDialog deletes itself - gameHandler->disconnect(); - BLOCK_END("Client::gameExec State::ERROR") - break; - - case State::AUTORECONNECT_SERVER: - // ++++++ - break; - - case State::START: - default: - mState = State::FORCE_QUIT; - break; - } - BLOCK_END("Client::gameExec 8") - } - - PERF_STAT(10); - - // Update the screen when application is visible, delay otherwise. - if (!WindowManager::getIsMinimized()) - { - frame_count = frame_count + 1; - if (gui != nullptr) - gui->draw(); - mainGraphics->updateScreen(); - } - else - { - SDL_Delay(100); - } - - PERF_STAT(11); - - BLOCK_START("~Client::SDL_framerateDelay") - if (settings.limitFps) - SDL_framerateDelay(&fpsManager); - BLOCK_END("~Client::SDL_framerateDelay") - - PERF_STAT(12); - PERF_NEXTFRAME(); - PROFILER_END(); - } - - return settings.exitcode; -} - -void Client::optionChanged(const std::string &name) -{ - if (name == "fpslimit") - { - const int fpsLimit = config.getIntValue("fpslimit"); - settings.limitFps = fpsLimit > 0; - WindowManager::setFramerate(fpsLimit); - } - else if (name == "guialpha" || - name == "enableGuiOpacity") - { - const float alpha = config.getFloatValue("guialpha"); - settings.guiAlpha = alpha; - ImageHelper::setEnableAlpha(alpha != 1.0F && - config.getBoolValue("enableGuiOpacity")); - } - else if (name == "gamma" || - name == "enableGamma") - { - WindowManager::applyGamma(); - } - else if (name == "particleEmitterSkip") - { - ParticleEngine::emitterSkip = - config.getIntValue("particleEmitterSkip") + 1; - } - else if (name == "vsync") - { - WindowManager::applyVSync(); - } - else if (name == "repeateInterval" || - name == "repeateDelay") - { - WindowManager::applyKeyRepeat(); - } -} - -void Client::action(const ActionEvent &event) -{ - std::string tab; - const std::string &eventId = event.getId(); - - if (eventId == "close") - { - setState(State::FORCE_QUIT); - return; - } - if (eventId == "Setup") - { - tab.clear(); - } - else if (eventId == "help") - { - inputManager.executeAction(InputAction::WINDOW_HELP); - return; - } - else if (eventId == "about") - { - inputManager.executeAction(InputAction::WINDOW_ABOUT); - return; - } - else if (eventId == "Video") - { - tab = "Video"; - } - else if (eventId == "Themes") - { - tab = "Theme"; - } - else if (eventId == "Perfomance") - { - tab = "Perfomance"; - } - else - { - return; - } - - if (setupWindow != nullptr) - { - setupWindow->setVisible(fromBool( - !setupWindow->isWindowVisible(), Visible)); - if (setupWindow->isWindowVisible()) - { - if (!tab.empty()) - setupWindow->activateTab(tab); - setupWindow->requestMoveToTop(); - } - } -} - -void Client::initFeatures() -{ - features.init(paths.getStringValue("featuresFile"), - UseVirtFs_true, - SkipError_true); - setFeaturesDefaults(features); - settings.fixDeadAnimation = features.getBoolValue("fixDeadAnimation"); -} - -void Client::initPaths() -{ - settings.gmCommandSymbol = paths.getStringValue("gmCommandSymbol"); - settings.gmCharCommandSymbol = paths.getStringValue("gmCharCommandSymbol"); - settings.linkCommandSymbol = paths.getStringValue("linkCommandSymbol"); - if (settings.linkCommandSymbol.empty()) - settings.linkCommandSymbol = "="; - settings.overweightPercent = paths.getIntValue("overweightPercent"); - settings.fixedInventorySize = paths.getIntValue("fixedInventorySize"); - settings.playerNameOffset = paths.getIntValue( - "playerNameOffset"); - settings.playerBadgeAtRightOffset = paths.getIntValue( - "playerBadgeAtRightOffset"); - settings.unknownSkillsAutoTab = paths.getBoolValue("unknownSkillsAutoTab"); - settings.enableNewMailSystem = paths.getBoolValue("enableNewMailSystem"); -} - -void Client::initTradeFilter() -{ - const std::string tradeListName = - settings.serverConfigDir + "/tradefilter.txt"; - - std::ofstream tradeFile; - struct stat statbuf; - - if ((stat(tradeListName.c_str(), &statbuf) != 0) || - !S_ISREG(statbuf.st_mode)) - { - tradeFile.open(tradeListName.c_str(), - std::ios::out); - if (tradeFile.is_open()) - { - tradeFile << ": sell" << std::endl; - tradeFile << ": buy" << std::endl; - tradeFile << ": trade" << std::endl; - tradeFile << "i sell" << std::endl; - tradeFile << "i buy" << std::endl; - tradeFile << "i trade" << std::endl; - tradeFile << "i trading" << std::endl; - tradeFile << "i am buy" << std::endl; - tradeFile << "i am sell" << std::endl; - tradeFile << "i am trade" << std::endl; - tradeFile << "i am trading" << std::endl; - tradeFile << "i'm buy" << std::endl; - tradeFile << "i'm sell" << std::endl; - tradeFile << "i'm trade" << std::endl; - tradeFile << "i'm trading" << std::endl; - } - else - { - reportAlways("Error opening file for writing: %s", - tradeListName.c_str()) - } - tradeFile.close(); - } -} - -bool Client::isTmw() -{ - const std::string &name = settings.serverName; - if (name == "server.themanaworld.org" || - name == "themanaworld.org" || - name == "167.114.129.72") - { - return true; - } - return false; -} - -void Client::moveButtons(const int width) -{ - if (mSetupButton != nullptr) - { - int x = width - mSetupButton->getWidth() - mButtonPadding; - mSetupButton->setPosition(x, mButtonPadding); -#ifndef WIN32 - x -= mPerfomanceButton->getWidth() + mButtonSpacing; - mPerfomanceButton->setPosition(x, mButtonPadding); - - x -= mVideoButton->getWidth() + mButtonSpacing; - mVideoButton->setPosition(x, mButtonPadding); - - x -= mThemesButton->getWidth() + mButtonSpacing; - mThemesButton->setPosition(x, mButtonPadding); - - x -= mAboutButton->getWidth() + mButtonSpacing; - mAboutButton->setPosition(x, mButtonPadding); - - x -= mHelpButton->getWidth() + mButtonSpacing; - mHelpButton->setPosition(x, mButtonPadding); -#ifdef ANDROID - x -= mCloseButton->getWidth() + mButtonSpacing; - mCloseButton->setPosition(x, mButtonPadding); -#endif // ANDROID -#endif // WIN32 - } -} - -void Client::windowRemoved(const Window *const window) -{ - if (mCurrentDialog == window) - mCurrentDialog = nullptr; -} - -void Client::focusWindow() -{ - if (mCurrentDialog != nullptr) - { - mCurrentDialog->requestFocus(); - } -} - -void Client::updatePinState() -{ - if (mCurrentDialog == nullptr || - mState != State::CHAR_SELECT) - { - return; - } - CharSelectDialog *const dialog = - dynamic_cast(mCurrentDialog); - if (dialog != nullptr) - pincodeManager.updateState(); -} - -void Client::logVars() -{ -#ifdef ANDROID - logger->log("APPDIR: %s", getenv("APPDIR")); - logger->log("DATADIR2: %s", getSdStoragePath().c_str()); -#endif // ANDROID -} - -void Client::slowLogic() -{ - if ((gameHandler == nullptr) || - !gameHandler->mustPing()) - { - return; - } - - if (get_elapsed_time1(mPing) > 1500) - { - mPing = tick_time; - if (mState == State::UPDATE || - mState == State::LOGIN || - mState == State::LOGIN_ATTEMPT || - mState == State::REGISTER || - mState == State::REGISTER_ATTEMPT) - { - if (loginHandler != nullptr) - loginHandler->ping(); - if (generalHandler != nullptr) - generalHandler->flushSend(); - } - else if (mState == State::CHAR_SELECT) - { - if (charServerHandler != nullptr) - charServerHandler->ping(); - if (generalHandler != nullptr) - generalHandler->flushSend(); - } - } -} - -void Client::loadData() -{ - // If another data path has been set, - // we don't load any other files... - if (settings.options.dataPath.empty()) - { - // Add customdata directory - VirtFs::searchAndAddArchives( - "customdata/", - "zip", - Append_false); - } - - if (!settings.options.skipUpdate) - { - VirtFs::searchAndAddArchives( - settings.updatesDir + "/local/", - "zip", - Append_false); - - VirtFs::mountDir(pathJoin( - settings.localDataDir, - settings.updatesDir, - "local/"), - Append_false); - } - - logger->log("Init paths"); - paths.init("paths.xml", - UseVirtFs_true, - SkipError_false); - setPathsDefaults(paths); - initPaths(); - if (SpriteReference::Empty == nullptr) - { - SpriteReference::Empty = new SpriteReference( - paths.getStringValue("spriteErrorFile"), - 0); - } - - if (BeingInfo::unknown == nullptr) - BeingInfo::unknown = new BeingInfo; - - initFeatures(); - TranslationManager::loadCurrentLang(); - TranslationManager::loadDictionaryLang(); - PlayerInfo::stateChange(mState); - - AttributesEnum::init(); - DbManager::loadDb(); - - delete spellManager; - spellManager = new SpellManager; - delete spellShortcut; - spellShortcut = new SpellShortcut; - - EquipmentWindow::prepareSlotNames(); - - ActorSprite::load(); - - if (desktop != nullptr) - desktop->reloadWallpaper(); -} - -void Client::unloadData() -{ - DbManager::unloadDb(); - mCurrentServer.supportUrl.clear(); - settings.supportUrl.clear(); - if (settings.options.dataPath.empty()) - { - // Add customdata directory - VirtFs::searchAndRemoveArchives( - "customdata/", - "zip"); - } - - if (!settings.oldUpdates.empty()) - { - UpdaterWindow::unloadUpdates(settings.oldUpdates); - settings.oldUpdates.clear(); - } - - if (!settings.options.skipUpdate) - { - VirtFs::searchAndRemoveArchives( - pathJoin(settings.updatesDir, "local/"), - "zip"); - - VirtFs::unmountDirSilent(pathJoin( - settings.localDataDir, - settings.updatesDir, - "local/")); - } - - ResourceManager::clearCache(); - - loginData.clearUpdateHost(); - localClan.clear(); - serverVersion = 0; - packetVersion = 0; - packetVersionMain = 0; - packetVersionRe = 0; - packetVersionZero = 0; - tmwServerVersion = 0; - evolPacketOffset = 0; -} - -void Client::runValidate() -{ - loadData(); - WindowManager::createValidateWindows(); - - WindowManager::deleteValidateWindows(); - unloadData(); - delete2(client) - VirtFs::deinit(); - exit(0); -} diff --git a/src/progs/manaplus/client.h b/src/progs/manaplus/client.h deleted file mode 100644 index 26152270d..000000000 --- a/src/progs/manaplus/client.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2004-2009 The Mana World Development Team - * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus 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 . - */ - -#ifndef PROGS_MANAPLUS_CLIENT_H -#define PROGS_MANAPLUS_CLIENT_H - -#include "enums/state.h" - -#include "listeners/actionlistener.h" -#include "listeners/configlistener.h" - -#include "net/serverinfo.h" - -#include "localconsts.h" - -class Button; -class Game; -class LoginData; -class Skin; -class Window; -class QuitDialog; - -extern bool isSafeMode; -extern int serverVersion; -extern unsigned int tmwServerVersion; -extern time_t start_time; -extern int textures_count; - -extern std::string errorMessage; -extern LoginData loginData; - -/** - * The core part of the client. This class initializes all subsystems, runs - * the event loop, and shuts everything down again. - */ -class Client final : public ConfigListener, - public ActionListener -{ - public: - Client(); - - A_DELETE_COPY(Client) - - ~Client() override final; - - void gameInit(); - - void testsInit(); - - int gameExec(); - - static int testsExec(); - - void setState(const StateT state) - { mState = state; } - - StateT getState() const noexcept2 A_WARN_UNUSED - { return mState; } - - static bool isTmw() A_WARN_UNUSED; - - void optionChanged(const std::string &name) override final; - - void action(const ActionEvent &event) override final; - - static void initTradeFilter(); - - void moveButtons(const int width); - - void windowRemoved(const Window *const window); - - void focusWindow(); - - void updatePinState(); - - void slowLogic(); - - ServerInfo &getCurrentServer() - { return mCurrentServer; } - - private: - void initSoundManager(); - - void initConfigListeners(); - - static void initGraphics(); - - static void initFeatures(); - - static void initPaths(); - - void gameClear(); - - void testsClear(); - -#ifdef ANDROID - static void logVars(); -#else // ANDROID - - static void logVars(); -#endif // ANDROID - - static void stateConnectGame1(); - - void stateConnectServer1(); - - void stateWorldSelect1(); - - void stateGame1(); - - void stateSwitchLogin1(); - - void loadData(); - - void unloadData(); - - void runValidate() -#ifndef BAD_CILKPLUS - __attribute__ ((noreturn)) -#endif // BAD_CILKPLUS -; - - ServerInfo mCurrentServer; - - Game *mGame; - Window *mCurrentDialog; - QuitDialog *mQuitDialog; - Button *mSetupButton; - Button *mVideoButton; - Button *mHelpButton; - Button *mAboutButton; - Button *mThemesButton; - Button *mPerfomanceButton; -#ifdef ANDROID - Button *mCloseButton; -#endif // ANDROID - - StateT mState; - StateT mOldState; - - Skin *mSkin; - int mButtonPadding; - int mButtonSpacing; - int mPing; - bool mConfigAutoSaved; -}; - -extern Client *client; -extern unsigned int mLastHost; -extern unsigned long mSearchHash; - -#endif // PROGS_MANAPLUS_CLIENT_H diff --git a/src/progs/manaplus/gui/viewport.cpp b/src/progs/manaplus/gui/viewport.cpp deleted file mode 100644 index 5483b3d0e..000000000 --- a/src/progs/manaplus/gui/viewport.cpp +++ /dev/null @@ -1,1152 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2004-2009 The Mana World Development Team - * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus 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 "progs/manaplus/gui/viewport.h" - -#include "actormanager.h" -#include "configuration.h" -#include "game.h" -#include "settings.h" -#include "sdlshared.h" -#include "textmanager.h" - -#include "being/flooritem.h" -#include "being/localplayer.h" -#include "being/playerinfo.h" - -#include "enums/resources/map/blockmask.h" -#include "enums/resources/map/mapitemtype.h" - -#include "gui/gui.h" -#include "gui/popupmanager.h" -#include "gui/userpalette.h" - -#include "gui/fonts/font.h" - -#include "gui/popups/beingpopup.h" -#include "gui/popups/popupmenu.h" -#include "gui/popups/textpopup.h" - -#include "gui/windows/ministatuswindow.h" - -#include "input/inputmanager.h" - -#include "utils/checkutils.h" -#include "utils/foreach.h" - -#include "resources/map/map.h" -#include "resources/map/mapitem.h" -#include "resources/map/speciallayer.h" - -#include "debug.h" - -Viewport *viewport = nullptr; - -extern volatile int tick_time; - -Viewport::Viewport() : - WindowContainer(nullptr), - MouseListener(), - ConfigListener(), - mMouseX(0), - mMouseY(0), - mMap(nullptr), - mHoverBeing(nullptr), - mHoverItem(nullptr), - mHoverSign(nullptr), - mScrollRadius(config.getIntValue("ScrollRadius")), - mScrollLaziness(config.getIntValue("ScrollLaziness")), - mScrollCenterOffsetX(config.getIntValue("ScrollCenterOffsetX")), - mScrollCenterOffsetY(config.getIntValue("ScrollCenterOffsetY")), - mMousePressX(0), - mMousePressY(0), - mPixelViewX(0), - mPixelViewY(0), - mMidTileX(0), - mMidTileY(0), - mViewXmax(0), - mViewYmax(0), - mLocalWalkTime(-1), - mCameraRelativeX(0), - mCameraRelativeY(0), - mShowBeingPopup(config.getBoolValue("showBeingPopup")), - mSelfMouseHeal(config.getBoolValue("selfMouseHeal")), - mEnableLazyScrolling(config.getBoolValue("enableLazyScrolling")), - mMouseDirectionMove(config.getBoolValue("mouseDirectionMove")), - mLongMouseClick(config.getBoolValue("longmouseclick")), - mAllowMoveByMouse(config.getBoolValue("allowMoveByMouse")), - mMouseClicked(false), - mPlayerFollowMouse(false) -{ - setOpaque(Opaque_false); - addMouseListener(this); - - config.addListener("ScrollLaziness", this); - config.addListener("ScrollRadius", this); - config.addListener("showBeingPopup", this); - config.addListener("selfMouseHeal", this); - config.addListener("enableLazyScrolling", this); - config.addListener("mouseDirectionMove", this); - config.addListener("longmouseclick", this); - config.addListener("allowMoveByMouse", this); - - setFocusable(true); - updateMidVars(); -} - -Viewport::~Viewport() -{ - config.removeListeners(this); - CHECKLISTENERS -} - -void Viewport::setMap(Map *const map) -{ - if ((mMap != nullptr) && (map != nullptr)) - map->setDrawLayersFlags(mMap->getDrawLayersFlags()); - mMap = map; - updateMaxVars(); -} - -void Viewport::draw(Graphics *const graphics) -{ - BLOCK_START("Viewport::draw 1") - static int lastTick = tick_time; - - if ((mMap == nullptr) || (localPlayer == nullptr)) - { - graphics->setColor(Color(64, 64, 64, 255)); - graphics->fillRectangle( - Rect(0, 0, getWidth(), getHeight())); - BLOCK_END("Viewport::draw 1") - return; - } - - // Avoid freaking out when tick_time overflows - if (tick_time < lastTick) - lastTick = tick_time; - - // Calculate viewpoint - - const int player_x = localPlayer->mPixelX - mMidTileX; - const int player_y = localPlayer->mPixelY - mMidTileY; - - if (mScrollLaziness < 1) - mScrollLaziness = 1; // Avoids division by zero - - if (mEnableLazyScrolling) - { - int cnt = 0; - - // Apply lazy scrolling - while (lastTick < tick_time && cnt < mapTileSize) - { - if (player_x > mPixelViewX + mScrollRadius) - { - mPixelViewX += CAST_S32( - static_cast(player_x - - mPixelViewX - mScrollRadius) / - static_cast(mScrollLaziness)); - } - if (player_x < mPixelViewX - mScrollRadius) - { - mPixelViewX += CAST_S32( - static_cast(player_x - - mPixelViewX + mScrollRadius) / - static_cast(mScrollLaziness)); - } - if (player_y > mPixelViewY + mScrollRadius) - { - mPixelViewY += CAST_S32( - static_cast(player_y - - mPixelViewY - mScrollRadius) / - static_cast(mScrollLaziness)); - } - if (player_y < mPixelViewY - mScrollRadius) - { - mPixelViewY += CAST_S32( - static_cast(player_y - - mPixelViewY + mScrollRadius) / - static_cast(mScrollLaziness)); - } - lastTick ++; - cnt ++; - } - - // Auto center when player is off screen - if (cnt > 30 || player_x - mPixelViewX - > graphics->mWidth / 2 || mPixelViewX - - player_x > graphics->mWidth / 2 || mPixelViewY - - player_y > graphics->getHeight() / 2 || player_y - - mPixelViewY > graphics->getHeight() / 2) - { - if (player_x <= 0 || player_y <= 0) - { - logger->log("incorrect player position: %d, %d, %d, %d", - player_x, player_y, mPixelViewX, mPixelViewY); - logger->log("tile position: %d, %d", - localPlayer->getTileX(), localPlayer->getTileY()); - } - mPixelViewX = player_x; - mPixelViewY = player_y; - } - } - else - { - mPixelViewX = player_x; - mPixelViewY = player_y; - } - - if (mPixelViewX < 0) - mPixelViewX = 0; - if (mPixelViewY < 0) - mPixelViewY = 0; - if (mPixelViewX > mViewXmax) - mPixelViewX = mViewXmax; - if (mPixelViewY > mViewYmax) - mPixelViewY = mViewYmax; - - // Draw tiles and sprites - mMap->draw(graphics, mPixelViewX, mPixelViewY); - - const MapTypeT drawType = settings.mapDrawType; - if (drawType != MapType::NORMAL) - { - if (drawType != MapType::SPECIAL4) - { - mMap->drawCollision(graphics, mPixelViewX, - mPixelViewY, drawType); - } - if (drawType == MapType::DEBUGTYPE) - drawDebugPath(graphics); - } - - if (localPlayer->getCheckNameSetting()) - { - localPlayer->setCheckNameSetting(false); - localPlayer->setName(localPlayer->getName()); - } - - // Draw text - if (textManager != nullptr) - textManager->draw(graphics, mPixelViewX, mPixelViewY); - - // Draw player names, speech, and emotion sprite as needed - const ActorSprites &actors = actorManager->getAll(); - FOR_EACH (ActorSpritesIterator, it, actors) - { - if ((*it)->getType() == ActorType::FloorItem) - continue; - Being *const b = static_cast(*it); - b->drawEmotion(graphics, mPixelViewX, mPixelViewY); - b->drawSpeech(mPixelViewX, mPixelViewY); - } - - if (miniStatusWindow != nullptr) - miniStatusWindow->drawIcons(graphics); - - // Draw contained widgets - WindowContainer::draw(graphics); - BLOCK_END("Viewport::draw 1") -} - -void Viewport::safeDraw(Graphics *const graphics) -{ - Viewport::draw(graphics); -} - -void Viewport::logic() -{ - BLOCK_START("Viewport::logic") - // Make the player follow the mouse position - // if the mouse is dragged elsewhere than in a window. - Gui::getMouseState(mMouseX, mMouseY); - BLOCK_END("Viewport::logic") -} - -void Viewport::followMouse() -{ - if (gui == nullptr) - return; - const MouseStateType button = Gui::getMouseState(mMouseX, mMouseY); - // If the left button is dragged - if (mPlayerFollowMouse && ((button & SDL_BUTTON(1)) != 0)) - { - // We create a mouse event and send it to mouseDragged. - const MouseEvent event(nullptr, - MouseEventType::DRAGGED, - MouseButton::LEFT, - mMouseX, - mMouseY, - 0); - - walkByMouse(event); - } -} - -void Viewport::drawDebugPath(Graphics *const graphics) -{ - if (localPlayer == nullptr || - userPalette == nullptr || - actorManager == nullptr || - mMap == nullptr || - gui == nullptr) - { - return; - } - - Gui::getMouseState(mMouseX, mMouseY); - - static Path debugPath; - static Vector lastMouseDestination = Vector(0.0F, 0.0F, 0.0F); - const int mousePosX = mMouseX + mPixelViewX; - const int mousePosY = mMouseY + mPixelViewY; - Vector mouseDestination(mousePosX, mousePosY, 0.0F); - - if (mouseDestination.x != lastMouseDestination.x - || mouseDestination.y != lastMouseDestination.y) - { - debugPath = mMap->findPath( - CAST_S32(localPlayer->mPixelX - mapTileSize / 2) / mapTileSize, - CAST_S32(localPlayer->mPixelY - mapTileSize) / mapTileSize, - mousePosX / mapTileSize, - mousePosY / mapTileSize, - localPlayer->getBlockWalkMask(), - 500); - lastMouseDestination = mouseDestination; - } - drawPath(graphics, debugPath, userPalette->getColorWithAlpha( - UserColorId::ROAD_POINT)); - - const ActorSprites &actors = actorManager->getAll(); - FOR_EACH (ActorSpritesConstIterator, it, actors) - { - const Being *const being = dynamic_cast(*it); - if ((being != nullptr) && being != localPlayer) - { - const Path &beingPath = being->getPath(); - drawPath(graphics, beingPath, userPalette->getColorWithAlpha( - UserColorId::ROAD_POINT)); - } - } -} - -void Viewport::drawPath(Graphics *const graphics, - const Path &path, - const Color &color) const -{ - graphics->setColor(color); - Font *const font = getFont(); - - int cnt = 1; - FOR_EACH (Path::const_iterator, i, path) - { - const int squareX = i->x * mapTileSize - mPixelViewX + 12; - const int squareY = i->y * mapTileSize - mPixelViewY + 12; - - graphics->fillRectangle(Rect(squareX, squareY, 8, 8)); - if (mMap != nullptr) - { - const std::string str = toString(cnt); - font->drawString(graphics, - color, color, - str, - squareX + 4 - font->getWidth(str) / 2, - squareY + 12); - } - cnt ++; - } -} - -bool Viewport::openContextMenu(const MouseEvent &event) -{ - mPlayerFollowMouse = false; - const int eventX = event.getX(); - const int eventY = event.getY(); - if (popupMenu == nullptr) - return false; - if (mHoverBeing != nullptr) - { - validateSpeed(); - if (actorManager != nullptr) - { - STD_VECTOR beings; - const int x = mMouseX + mPixelViewX; - const int y = mMouseY + mPixelViewY; - actorManager->findBeingsByPixel(beings, x, y, AllPlayers_true); - if (beings.size() > 1) - popupMenu->showPopup(eventX, eventY, beings); - else - popupMenu->showPopup(eventX, eventY, mHoverBeing); - return true; - } - } - else if (mHoverItem != nullptr) - { - validateSpeed(); - popupMenu->showPopup(eventX, eventY, mHoverItem); - return true; - } - else if (mHoverSign != nullptr) - { - validateSpeed(); - popupMenu->showPopup(eventX, eventY, mHoverSign); - return true; - } - else if (settings.cameraMode != 0U) - { - if (mMap == nullptr) - return false; - popupMenu->showMapPopup(eventX, eventY, - (mMouseX + mPixelViewX) / mMap->getTileWidth(), - (mMouseY + mPixelViewY) / mMap->getTileHeight(), - false); - return true; - } - return false; -} - -bool Viewport::leftMouseAction() -{ - const bool stopAttack = inputManager.isActionActive( - InputAction::STOP_ATTACK); - // Interact with some being - if (mHoverBeing != nullptr) - { - if (!mHoverBeing->isAlive()) - return true; - - if (mHoverBeing->canTalk()) - { - validateSpeed(); - mHoverBeing->talkTo(); - return true; - } - - const ActorTypeT type = mHoverBeing->getType(); - switch (type) - { - case ActorType::Player: - validateSpeed(); - if (actorManager != nullptr) - { -#ifdef TMWA_SUPPORT - if (localPlayer != mHoverBeing || mSelfMouseHeal) - actorManager->heal(mHoverBeing); -#endif // TMWA_SUPPORT - - if (localPlayer == mHoverBeing && - mHoverItem != nullptr) - { - localPlayer->pickUp(mHoverItem); - } - return true; - } - break; - case ActorType::Monster: - case ActorType::Npc: - case ActorType::SkillUnit: - if (!stopAttack) - { - if (localPlayer->withinAttackRange(mHoverBeing, - false, 0) || - inputManager.isActionActive(InputAction::ATTACK)) - { - validateSpeed(); - if (!mStatsReUpdated && localPlayer != mHoverBeing) - { - localPlayer->attack(mHoverBeing, - !inputManager.isActionActive( - InputAction::STOP_ATTACK), - false); - return true; - } - } - else if (!inputManager.isActionActive( - InputAction::ATTACK)) - { - validateSpeed(); - if (!mStatsReUpdated && localPlayer != mHoverBeing) - { - localPlayer->setGotoTarget(mHoverBeing); - return true; - } - } - } - break; - case ActorType::FloorItem: - case ActorType::Portal: - case ActorType::Pet: - case ActorType::Mercenary: - case ActorType::Homunculus: - case ActorType::Elemental: - break; - case ActorType::Unknown: - case ActorType::Avatar: - default: - reportAlways("Left click on unknown actor type: %d", - CAST_S32(type)) - break; - } - } - // Picks up a item if we clicked on one - if (mHoverItem != nullptr) - { - validateSpeed(); - localPlayer->pickUp(mHoverItem); - } - else if (stopAttack) - { - if (mMap != nullptr) - { - const int mouseTileX = (mMouseX + mPixelViewX) - / mMap->getTileWidth(); - const int mouseTileY = (mMouseY + mPixelViewY) - / mMap->getTileHeight(); - inputManager.executeChatCommand(InputAction::PET_MOVE, - strprintf("%d %d", mouseTileX, mouseTileY), - nullptr); - } - return true; - } - // Just walk around - else if (!inputManager.isActionActive(InputAction::ATTACK) && - localPlayer->canMove()) - { - validateSpeed(); - localPlayer->stopAttack(false); - localPlayer->cancelFollow(); - mPlayerFollowMouse = mAllowMoveByMouse; - if (mPlayerFollowMouse) - { - // Make the player go to the mouse position - followMouse(); - } - } - return false; -} - -void Viewport::mousePressed(MouseEvent &event) -{ - if (event.getSource() != this || event.isConsumed()) - return; - - // Check if we are alive and kickin' - if ((mMap == nullptr) || (localPlayer == nullptr)) - return; - - // Check if we are busy - // if commented, allow context menu if npc dialog open - if (PlayerInfo::isTalking()) - { - mMouseClicked = false; - return; - } - - mMouseClicked = true; - - mMousePressX = event.getX(); - mMousePressY = event.getY(); - const MouseButtonT eventButton = event.getButton(); - - // Right click might open a popup - if (eventButton == MouseButton::RIGHT) - { - if (openContextMenu(event)) - return; - } - - // If a popup is active, just remove it - if (PopupManager::isPopupMenuVisible()) - { - mPlayerFollowMouse = false; - PopupManager::hidePopupMenu(); - return; - } - - // Left click can cause different actions - if (!mLongMouseClick && eventButton == MouseButton::LEFT) - { - if (leftMouseAction()) - { - mPlayerFollowMouse = false; - return; - } - } - else if (eventButton == MouseButton::MIDDLE) - { - mPlayerFollowMouse = false; - validateSpeed(); - // Find the being nearest to the clicked position - if (actorManager != nullptr) - { - const int pixelX = mMousePressX + mPixelViewX; - const int pixelY = mMousePressY + mPixelViewY; - Being *const target = actorManager->findNearestLivingBeing( - pixelX, pixelY, 20, ActorType::Monster, nullptr); - - if (target != nullptr) - localPlayer->setTarget(target); - } - } -} - -void Viewport::getMouseTile(int &destX, int &destY) const -{ - getMouseTile(mMouseX, mMouseY, destX, destY); -} - -void Viewport::getMouseTile(const int x, const int y, - int &destX, int &destY) const -{ - if (mMap == nullptr) - return; - const int tw = mMap->getTileWidth(); - const int th = mMap->getTileHeight(); - destX = CAST_S32(x + mPixelViewX) - / static_cast(tw); - - if (mMap->isHeightsPresent()) - { - const int th2 = th / 2; - const int clickY = y + mPixelViewY - th2; - destY = y + mPixelViewY; - int newDiffY = 1000000; - const int heightTiles = mainGraphics->mHeight / th; - const int tileViewY = mPixelViewY / th; - for (int f = tileViewY; f < tileViewY + heightTiles; f ++) - { - if (!mMap->getWalk(destX, - f, - BlockMask::WALL | - BlockMask::AIR | - BlockMask::WATER | - BlockMask::PLAYERWALL)) - { - continue; - } - - const int offset = mMap->getHeightOffset( - destX, f) * th2; - const int pixelF = f * th; - const int diff = abs(clickY + offset - pixelF); - if (diff < newDiffY) - { - destY = pixelF; - newDiffY = diff; - } - } - destY /= 32; - } - else - { - destY = CAST_S32((y + mPixelViewY) / static_cast(th)); - } -} - -void Viewport::walkByMouse(const MouseEvent &event) -{ - if ((mMap == nullptr) || (localPlayer == nullptr)) - return; - if (mPlayerFollowMouse - && !inputManager.isActionActive(InputAction::STOP_ATTACK) - && !inputManager.isActionActive(InputAction::UNTARGET)) - { - if (!mMouseDirectionMove) - mPlayerFollowMouse = false; - if (mLocalWalkTime != localPlayer->getActionTime()) - { - mLocalWalkTime = cur_time; - localPlayer->unSetPickUpTarget(); - int playerX = localPlayer->getTileX(); - int playerY = localPlayer->getTileY(); - if (mMouseDirectionMove) - { - const int width = mainGraphics->mWidth / 2; - const int height = mainGraphics->mHeight / 2; - const float wh = static_cast(width) - / static_cast(height); - int x = event.getX() - width; - int y = event.getY() - height; - if ((x == 0) && (y == 0)) - return; - const int x2 = abs(x); - const int y2 = abs(y); - const float diff = 2; - int dx = 0; - int dy = 0; - if (x2 > y2) - { - if (y2 != 0 && - static_cast(x2) / static_cast(y2) / - wh > diff) - { - y = 0; - } - } - else - { - if ((x2 != 0) && y2 * wh / x2 > diff) - x = 0; - } - if (x > 0) - dx = 1; - else if (x < 0) - dx = -1; - if (y > 0) - dy = 1; - else if (y < 0) - dy = -1; - - if (mMap->getWalk(playerX + dx, - playerY + dy, - BlockMask::WALL | - BlockMask::AIR | - BlockMask::WATER | - BlockMask::PLAYERWALL)) - { - localPlayer->navigateTo(playerX + dx, playerY + dy); - } - else - { - if ((dx != 0) && (dy != 0)) - { - // try avoid diagonal collision - if (x2 > y2) - { - if (mMap->getWalk(playerX + dx, - playerY, - BlockMask::WALL | - BlockMask::AIR | - BlockMask::WATER | - BlockMask::PLAYERWALL)) - { - dy = 0; - } - else - { - dx = 0; - } - } - else - { - if (mMap->getWalk(playerX, - playerY + dy, - BlockMask::WALL | - BlockMask::AIR | - BlockMask::WATER | - BlockMask::PLAYERWALL)) - { - dx = 0; - } - else - { - dy = 0; - } - } - } - else - { - // try avoid vertical or horisontal collision - if (dx == 0) - { - if (mMap->getWalk(playerX + 1, - playerY + dy, - BlockMask::WALL | - BlockMask::AIR | - BlockMask::WATER | - BlockMask::PLAYERWALL)) - { - dx = 1; - } - if (mMap->getWalk(playerX - 1, - playerY + dy, - BlockMask::WALL | - BlockMask::AIR | - BlockMask::WATER | - BlockMask::PLAYERWALL)) - { - dx = -1; - } - } - if (dy == 0) - { - if (mMap->getWalk(playerX + dx, - playerY + 1, - BlockMask::WALL | - BlockMask::AIR | - BlockMask::WATER | - BlockMask::PLAYERWALL)) - { - dy = 1; - } - if (mMap->getWalk(playerX + dx, - playerY - 1, - BlockMask::WALL | - BlockMask::AIR | - BlockMask::WATER | - BlockMask::PLAYERWALL)) - { - dy = -1; - } - } - } - localPlayer->navigateTo(playerX + dx, playerY + dy); - } - } - else - { - int destX; - int destY; - getMouseTile(event.getX(), event.getY(), - destX, destY); - if (playerX != destX || playerY != destY) - { - if (!localPlayer->navigateTo(destX, destY)) - { - if (playerX > destX) - playerX --; - else if (playerX < destX) - playerX ++; - if (playerY > destY) - playerY --; - else if (playerY < destY) - playerY ++; - if (mMap->getWalk(playerX, playerY, 0)) - localPlayer->navigateTo(playerX, playerY); - } - } - } - } - } -} - -void Viewport::mouseDragged(MouseEvent &event) -{ - if (event.getSource() != this || event.isConsumed()) - { - mPlayerFollowMouse = false; - return; - } - if (mAllowMoveByMouse && - mMouseClicked && - (localPlayer != nullptr) && - localPlayer->canMove()) - { - if (abs(event.getX() - mMousePressX) > 32 - || abs(event.getY() - mMousePressY) > 32) - { - mPlayerFollowMouse = true; - } - - walkByMouse(event); - } -} - -void Viewport::mouseReleased(MouseEvent &event) -{ - mPlayerFollowMouse = false; - mLocalWalkTime = -1; - if (mLongMouseClick && mMouseClicked) - { - mMouseClicked = false; - if (event.getSource() != this || event.isConsumed()) - return; - const MouseButtonT eventButton = event.getButton(); - if (eventButton == MouseButton::LEFT) - { - // long button press - if ((gui != nullptr) && gui->isLongPress()) - { - if (openContextMenu(event)) - { - gui->resetClickCount(); - return; - } - } - else - { - if (leftMouseAction()) - return; - } - walkByMouse(event); - } - } -} - -void Viewport::optionChanged(const std::string &name) -{ - if (name == "ScrollLaziness") - mScrollLaziness = config.getIntValue("ScrollLaziness"); - else if (name == "ScrollRadius") - mScrollRadius = config.getIntValue("ScrollRadius"); - else if (name == "showBeingPopup") - mShowBeingPopup = config.getBoolValue("showBeingPopup"); - else if (name == "selfMouseHeal") - mSelfMouseHeal = config.getBoolValue("selfMouseHeal"); - else if (name == "enableLazyScrolling") - mEnableLazyScrolling = config.getBoolValue("enableLazyScrolling"); - else if (name == "mouseDirectionMove") - mMouseDirectionMove = config.getBoolValue("mouseDirectionMove"); - else if (name == "longmouseclick") - mLongMouseClick = config.getBoolValue("longmouseclick"); - else if (name == "allowMoveByMouse") - mAllowMoveByMouse = config.getBoolValue("allowMoveByMouse"); -} - -void Viewport::mouseMoved(MouseEvent &event) -{ - // Check if we are on the map - if (mMap == nullptr || - localPlayer == nullptr || - actorManager == nullptr) - { - return; - } - - if (mMouseDirectionMove) - mPlayerFollowMouse = false; - - const int x = mMouseX + mPixelViewX; - const int y = mMouseY + mPixelViewY; - - ActorTypeT type = ActorType::Unknown; - mHoverBeing = actorManager->findBeingByPixel(x, y, AllPlayers_true); - if (mHoverBeing != nullptr) - type = mHoverBeing->getType(); - if ((mHoverBeing != nullptr) - && (type == ActorType::Player - || type == ActorType::Npc - || type == ActorType::Homunculus - || type == ActorType::Mercenary - || type == ActorType::Pet)) - { - PopupManager::hideTextPopup(); - if (mShowBeingPopup && (beingPopup != nullptr)) - beingPopup->show(mMouseX, mMouseY, mHoverBeing); - } - else - { - PopupManager::hideBeingPopup(); - } - - mHoverItem = actorManager->findItem(x / mMap->getTileWidth(), - y / mMap->getTileHeight()); - - if ((mHoverBeing == nullptr) && (mHoverItem == nullptr)) - { - const SpecialLayer *const specialLayer = mMap->getSpecialLayer(); - if (specialLayer != nullptr) - { - const int mouseTileX = (mMouseX + mPixelViewX) - / mMap->getTileWidth(); - const int mouseTileY = (mMouseY + mPixelViewY) - / mMap->getTileHeight(); - - mHoverSign = specialLayer->getTile(mouseTileX, mouseTileY); - if (mHoverSign != nullptr && - mHoverSign->getType() != MapItemType::EMPTY) - { - if (!mHoverSign->getComment().empty()) - { - PopupManager::hideBeingPopup(); - if (textPopup != nullptr) - { - textPopup->show(mMouseX, mMouseY, - mHoverSign->getComment()); - } - } - else - { - if (PopupManager::isTextPopupVisible()) - PopupManager::hideTextPopup(); - } - gui->setCursorType(Cursor::CURSOR_UP); - return; - } - } - } - if (!event.isConsumed() && - PopupManager::isTextPopupVisible()) - { - PopupManager::hideTextPopup(); - } - - if (mHoverBeing != nullptr) - { - switch (type) - { - case ActorType::Npc: - case ActorType::Monster: - case ActorType::Portal: - case ActorType::Pet: - case ActorType::Mercenary: - case ActorType::Homunculus: - case ActorType::SkillUnit: - case ActorType::Elemental: - gui->setCursorType(mHoverBeing->getHoverCursor()); - break; - - case ActorType::Avatar: - case ActorType::FloorItem: - case ActorType::Unknown: - case ActorType::Player: - default: - gui->setCursorType(Cursor::CURSOR_POINTER); - break; - } - } - // Item mouseover - else if (mHoverItem != nullptr) - { - gui->setCursorType(mHoverItem->getHoverCursor()); - } - else - { - gui->setCursorType(Cursor::CURSOR_POINTER); - } -} - -void Viewport::toggleMapDrawType() -{ - settings.mapDrawType = static_cast( - CAST_S32(settings.mapDrawType) + 1); - if (settings.mapDrawType > MapType::BLACKWHITE) - settings.mapDrawType = MapType::NORMAL; - if (mMap != nullptr) - mMap->setDrawLayersFlags(settings.mapDrawType); -} - -void Viewport::toggleCameraMode() -{ - settings.cameraMode ++; - if (settings.cameraMode > 1) - settings.cameraMode = 0; - if (settings.cameraMode == 0U) - { - mCameraRelativeX = 0; - mCameraRelativeY = 0; - updateMidVars(); - } - UpdateStatusListener::distributeEvent(); -} - -void Viewport::clearHover(const ActorSprite *const actor) -{ - if (mHoverBeing == actor) - mHoverBeing = nullptr; - - if (mHoverItem == actor) - mHoverItem = nullptr; -} - -void Viewport::cleanHoverItems() -{ - mHoverBeing = nullptr; - mHoverItem = nullptr; - mHoverSign = nullptr; -} - -void Viewport::moveCamera(const int dx, const int dy) -{ - mCameraRelativeX += dx; - mCameraRelativeY += dy; - updateMidVars(); -} - -void Viewport::moveCameraToActor(const BeingId actorId, - const int x, const int y) -{ - if ((localPlayer == nullptr) || (actorManager == nullptr)) - return; - - const Actor *const actor = actorManager->findBeing(actorId); - if (actor == nullptr) - return; - settings.cameraMode = 1; - mCameraRelativeX = actor->mPixelX - localPlayer->mPixelX + x; - mCameraRelativeY = actor->mPixelY - localPlayer->mPixelY + y; - updateMidVars(); -} - -void Viewport::moveCameraToPosition(const int x, const int y) -{ - if (localPlayer == nullptr) - return; - - settings.cameraMode = 1; - mCameraRelativeX = x - localPlayer->mPixelX; - mCameraRelativeY = y - localPlayer->mPixelY; - updateMidVars(); -} - -void Viewport::moveCameraRelative(const int x, const int y) -{ - settings.cameraMode = 1; - mCameraRelativeX += x; - mCameraRelativeY += y; - updateMidVars(); -} - -void Viewport::returnCamera() -{ - settings.cameraMode = 0; - mCameraRelativeX = 0; - mCameraRelativeY = 0; - updateMidVars(); -} - -void Viewport::validateSpeed() -{ - if (!inputManager.isActionActive(InputAction::TARGET_ATTACK) && - !inputManager.isActionActive(InputAction::ATTACK)) - { - if (Game::instance() != nullptr) - Game::instance()->setValidSpeed(); - } -} - -void Viewport::updateMidVars() -{ - mMidTileX = (mainGraphics->mWidth + mScrollCenterOffsetX) / 2 - - mCameraRelativeX; - mMidTileY = (mainGraphics->mHeight + mScrollCenterOffsetY) / 2 - - mCameraRelativeY; -} - -void Viewport::updateMaxVars() -{ - if (mMap == nullptr) - return; - mViewXmax = mMap->getWidth() * mMap->getTileWidth() - - mainGraphics->mWidth; - mViewYmax = mMap->getHeight() * mMap->getTileHeight() - - mainGraphics->mHeight; -} - -void Viewport::videoResized() -{ - updateMidVars(); - updateMaxVars(); - if (mMap != nullptr) - mMap->screenResized(); -} diff --git a/src/progs/manaplus/gui/viewport.h b/src/progs/manaplus/gui/viewport.h deleted file mode 100644 index ae92c7ccd..000000000 --- a/src/progs/manaplus/gui/viewport.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2004-2009 The Mana World Development Team - * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus 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 . - */ - -#ifndef PROGS_MANAPLUS_GUI_VIEWPORT_H -#define PROGS_MANAPLUS_GUI_VIEWPORT_H - -#include "position.h" - -#include "enums/simpletypes/beingid.h" - -#include "gui/widgets/windowcontainer.h" - -#include "listeners/mouselistener.h" - -class ActorSprite; -class Being; -class FloorItem; -class Graphics; -class Map; -class MapItem; - -/** - * The viewport on the map. Displays the current map and handles mouse input - * and the popup menu. - */ -class Viewport final : public WindowContainer, - public MouseListener, - public ConfigListener -{ - public: - /** - * Constructor. - */ - Viewport(); - - A_DELETE_COPY(Viewport) - - /** - * Destructor. - */ - ~Viewport() override final; - - /** - * Sets the map displayed by the viewport. - */ - void setMap(Map *const map); - - /** - * Draws the viewport. - */ - void draw(Graphics *const graphics) override final A_NONNULL(2); - - void safeDraw(Graphics *const graphics) override final A_NONNULL(2); - - /** - * Implements player to keep following mouse. - */ - void logic() override final; - - /** - * Toggles whether the path debug graphics are shown. normal, - * debug with all images and grid, debug with out big images - * and with out grid. - */ - void toggleMapDrawType(); - - void toggleCameraMode(); - - /** - * Handles mouse press on map. - */ - void mousePressed(MouseEvent &event) override final; - - /** - * Handles mouse move on map - */ - void mouseDragged(MouseEvent &event) override final; - - /** - * Handles mouse button release on map. - */ - void mouseReleased(MouseEvent &event) override final; - - /** - * Handles mouse move on map. - */ - void mouseMoved(MouseEvent &event) override final; - - /** - * A relevant config option changed. - */ - void optionChanged(const std::string &name) override final; - - /** - * Returns camera x offset in pixels. - */ - int getCameraX() const noexcept2 A_WARN_UNUSED - { return mPixelViewX; } - - /** - * Returns camera y offset in pixels. - */ - int getCameraY() const noexcept2 A_WARN_UNUSED - { return mPixelViewY; } - - /** - * Changes viewpoint by relative pixel coordinates. - */ - void scrollBy(const int x, const int y) - { mPixelViewX += x; mPixelViewY += y; } - - /** - * Clear all hover item, being etc - */ - void cleanHoverItems(); - - Map *getMap() const noexcept2 A_WARN_UNUSED - { return mMap; } - - void moveCamera(const int dx, const int dy); - - int getCameraRelativeX() const noexcept2 A_WARN_UNUSED - { return mCameraRelativeX; } - - int getCameraRelativeY() const noexcept2 A_WARN_UNUSED - { return mCameraRelativeY; } - - void setCameraRelativeX(const int n) - { mCameraRelativeX = n; updateMidVars(); } - - void setCameraRelativeY(const int n) - { mCameraRelativeY = n; updateMidVars(); } - - void moveCameraToActor(const BeingId actorId, - const int x, - const int y); - - void moveCameraToPosition(const int x, const int y); - - void moveCameraRelative(const int x, const int y); - - void returnCamera(); - - void getMouseTile(int &destX, int &destY) const; - - void videoResized(); - - int mMouseX; /**< Current mouse position in pixels. */ - int mMouseY; /**< Current mouse position in pixels. */ - - protected: - friend class ActorManager; - - /// Clears any matching hovers - void clearHover(const ActorSprite *const actor); - - void updateMidVars(); - - void updateMaxVars(); - - static void validateSpeed(); - - private: - /** - * Finds a path from the player to the mouse, and draws it. This is for - * debug purposes. - */ - void drawDebugPath(Graphics *const graphics) A_NONNULL(2); - - /** - * Draws the given path. - */ - void drawPath(Graphics *const graphics, - const Path &path, - const Color &color) - const A_NONNULL(2); - - bool leftMouseAction(); - - bool openContextMenu(const MouseEvent &event); - - void walkByMouse(const MouseEvent &event); - - void getMouseTile(const int x, - const int y, - int &destX, - int &destY) const; - - /** - * Make the player go to the mouse position. - */ - void followMouse(); - - Map *mMap; /**< The current map. */ - - Being *mHoverBeing; /**< Being mouse is currently over. */ - FloorItem *mHoverItem; /**< FloorItem mouse is currently over. */ - MapItem *mHoverSign; /**< Map sign mouse is currently over. */ - - int mScrollRadius; - int mScrollLaziness; - int mScrollCenterOffsetX; - int mScrollCenterOffsetY; - int mMousePressX; - int mMousePressY; - int mPixelViewX; /**< Current viewpoint in pixels. */ - int mPixelViewY; /**< Current viewpoint in pixels. */ - int mMidTileX; - int mMidTileY; - int mViewXmax; - int mViewYmax; - - time_t mLocalWalkTime; - - int mCameraRelativeX; - int mCameraRelativeY; - - bool mShowBeingPopup; - bool mSelfMouseHeal; - bool mEnableLazyScrolling; - bool mMouseDirectionMove; - bool mLongMouseClick; - bool mAllowMoveByMouse; - bool mMouseClicked; - bool mPlayerFollowMouse; -}; - -extern Viewport *viewport; /**< The viewport. */ - -#endif // PROGS_MANAPLUS_GUI_VIEWPORT_H diff --git a/src/progs/manaverse/actions/actions.cpp b/src/progs/manaverse/actions/actions.cpp new file mode 100644 index 000000000..8e997cb2a --- /dev/null +++ b/src/progs/manaverse/actions/actions.cpp @@ -0,0 +1,2048 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/actions.h" + +#include "actormanager.h" +#include "configuration.h" +#include "game.h" +#ifdef USE_OPENGL +#include "graphicsmanager.h" +#endif // USE_OPENGL +#include "main.h" +#include "spellmanager.h" + +#include "actions/actiondef.h" + +#include "being/localplayer.h" +#include "being/playerinfo.h" + +#include "const/spells.h" + +#include "const/resources/skill.h" + +#include "fs/files.h" + +#include "gui/gui.h" +#include "gui/popupmanager.h" +#include "gui/sdlinput.h" +#include "gui/windowmanager.h" + +#include "gui/shortcut/dropshortcut.h" +#include "gui/shortcut/emoteshortcut.h" +#include "gui/shortcut/itemshortcut.h" + +#include "gui/popups/popupmenu.h" + +#include "gui/windows/buydialog.h" +#include "gui/windows/okdialog.h" +#include "gui/windows/tradewindow.h" +#include "gui/windows/quitdialog.h" +#include "gui/windows/buyselldialog.h" +#include "gui/windows/chatwindow.h" +#include "gui/windows/helpwindow.h" +#include "gui/windows/inventorywindow.h" +#include "gui/windows/itemamountwindow.h" +#include "gui/windows/npcdialog.h" +#include "gui/windows/outfitwindow.h" +#include "gui/windows/setupwindow.h" +#include "gui/windows/shopwindow.h" +#include "gui/windows/shortcutwindow.h" +#include "gui/windows/skilldialog.h" +#include "gui/windows/whoisonline.h" + +#include "gui/widgets/createwidget.h" + +#include "gui/widgets/tabs/chat/chattab.h" + +#include "input/inputactionoperators.h" + +#if defined USE_OPENGL +#include "render/normalopenglgraphics.h" +#endif // USE_OPENGL + +#include "net/adminhandler.h" +#include "net/beinghandler.h" +#include "net/buyingstorehandler.h" +#include "net/buysellhandler.h" +#include "net/chathandler.h" +#include "net/download.h" +#include "net/homunculushandler.h" +#include "net/gamehandler.h" +#include "net/inventoryhandler.h" +#include "net/ipc.h" +#include "net/mercenaryhandler.h" +#include "net/net.h" +#include "net/npchandler.h" +#include "net/serverfeatures.h" +#include "net/uploadcharinfo.h" +#include "net/tradehandler.h" +#include "net/vendinghandler.h" + +#include "resources/iteminfo.h" +#include "resources/memorymanager.h" + +#include "resources/resourcemanager/resourcemanager.h" + +#include "utils/chatutils.h" +#include "utils/foreach.h" +#include "utils/gettext.h" +#include "utils/parameters.h" +#include "utils/timer.h" + +#ifdef TMWA_SUPPORT +#include "net/playerhandler.h" + +#include "utils/mathutils.h" +#endif // TMWA_SUPPORT + +PRAGMA48(GCC diagnostic push) +PRAGMA48(GCC diagnostic ignored "-Wshadow") +#ifdef ANDROID +#ifndef USE_SDL2 +#include +#endif // USE_OPENGL +#endif // ANDROID +PRAGMA48(GCC diagnostic pop) + +#include + +#include "debug.h" + +extern std::string tradePartnerName; +extern QuitDialog *quitDialog; +extern time_t start_time; +extern char **environ; + +namespace Actions +{ + +static int uploadUpdate(void *ptr, + const DownloadStatusT status, + size_t total A_UNUSED, + const size_t remaining A_UNUSED) A_NONNULL(1); + +static int uploadUpdate(void *ptr, + const DownloadStatusT status, + size_t total A_UNUSED, + const size_t remaining A_UNUSED) +{ + if (status == DownloadStatus::Idle || status == DownloadStatus::Starting) + return 0; + + UploadChatInfo *const info = reinterpret_cast(ptr); + if (info == nullptr) + return 0; + + if (status == DownloadStatus::Complete) + { + std::string str = Net::Download::getUploadResponse(); + const size_t sz = str.size(); + if (sz > 0) + { + if (str[sz - 1] == '\n') + str = str.substr(0, sz - 1); + str.append(info->addStr); + ChatTab *const tab = info->tab; + if (chatWindow != nullptr && + (tab == nullptr || chatWindow->isTabPresent(tab))) + { + str = strprintf("%s [@@%s |%s@@]", + info->text.c_str(), str.c_str(), str.c_str()); + outStringNormal(tab, str, str); + } + else + { + CREATEWIDGET(OkDialog, + // TRANSLATORS: file uploaded message + _("File uploaded"), + str, + // TRANSLATORS: ok dialog button + _("OK"), + DialogType::OK, + Modal_true, + ShowCenter_false, + nullptr, + 260); + } + } + } +// delete2(info->upload) + info->upload = nullptr; + delete info; + return 0; +} + +static void uploadFile(const std::string &str, + const std::string &fileName, + const std::string &addStr, + ChatTab *const tab) +{ + UploadChatInfo *const info = new UploadChatInfo; + Net::Download *const upload = new Net::Download(info, + "http://ix.io", + &uploadUpdate, + false, true, false); + info->upload = upload; + info->text = str; + info->addStr = addStr; + info->tab = tab; + upload->setFile(fileName, -1); + upload->start(); +} + +static Being *findBeing(const std::string &name, const bool npc) +{ + if ((localPlayer == nullptr) || (actorManager == nullptr)) + return nullptr; + + Being *being = nullptr; + + if (name.empty()) + { + being = localPlayer->getTarget(); + } + else + { + being = actorManager->findBeingByName( + name, ActorType::Unknown); + } + if ((being == nullptr) && npc) + { + being = actorManager->findNearestLivingBeing( + localPlayer, 1, ActorType::Npc, AllowSort_true); + if (being != nullptr) + { + if (abs(being->getTileX() - localPlayer->getTileX()) > 1 + || abs(being->getTileY() - localPlayer->getTileY()) > 1) + { + being = nullptr; + } + } + } + if ((being == nullptr) && npc) + { + being = actorManager->findNearestLivingBeing( + localPlayer, 1, ActorType::Player, AllowSort_true); + if (being != nullptr) + { + if (abs(being->getTileX() - localPlayer->getTileX()) > 1 + || abs(being->getTileY() - localPlayer->getTileY()) > 1) + { + being = nullptr; + } + } + } + return being; +} + +static Item *getItemByInvIndex(const int index, + const InventoryTypeT invType) +{ + const Inventory *inv = nullptr; + switch (invType) + { + case InventoryType::Storage: + inv = PlayerInfo::getStorageInventory(); + break; + + case InventoryType::Inventory: + inv = PlayerInfo::getInventory(); + break; + case InventoryType::Trade: + case InventoryType::Npc: + case InventoryType::Cart: + case InventoryType::Vending: + case InventoryType::MailEdit: + case InventoryType::MailView: + case InventoryType::Craft: + case InventoryType::TypeEnd: + default: + break; + } + if (inv != nullptr) + return inv->getItem(index); + return nullptr; +} + +static int getAmountFromEvent(const InputEvent &event, + Item *&item0, + const InventoryTypeT invType) +{ + Item *const item = getItemByInvIndex(atoi(event.args.c_str()), + invType); + item0 = item; + if (item == nullptr) + return 0; + + std::string str = event.args; + removeToken(str, " "); + + if (str.empty()) + return 0; + + int amount = 0; + if (str[0] == '-') + { + if (str.size() > 1) + { + amount = item->getQuantity() - atoi(str.substr(1).c_str()); + if (amount <= 0 || amount > item->getQuantity()) + amount = item->getQuantity(); + } + } + else if (str == "/") + { + amount = item->getQuantity() / 2; + } + else if (str == "all") + { + amount = item->getQuantity(); + } + else + { + amount = atoi(str.c_str()); + } + return amount; +} + +impHandler(emote) +{ + const int emotion = 1 + (event.action - InputAction::EMOTE_1); + if (emotion > 0) + { + if (emoteShortcut != nullptr) + emoteShortcut->useEmotePlayer(emotion); + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + + return false; +} + +impHandler(outfit) +{ + if (inputManager.isActionActive(InputAction::WEAR_OUTFIT)) + { + const int num = event.action - InputAction::OUTFIT_1; + if ((outfitWindow != nullptr) && num >= 0) + { + outfitWindow->wearOutfit(num, + true, + false); + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + } + else if (inputManager.isActionActive(InputAction::COPY_OUTFIT)) + { + const int num = event.action - InputAction::OUTFIT_1; + if ((outfitWindow != nullptr) && num >= 0) + { + outfitWindow->copyOutfit(num); + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + } + + return false; +} + +impHandler0(mouseClick) +{ + if ((guiInput == nullptr) || (gui == nullptr)) + return false; + + int mouseX; + int mouseY; + Gui::getMouseState(mouseX, mouseY); + guiInput->simulateMouseClick(mouseX, mouseY, MouseButton::RIGHT); + return true; +} + +impHandler0(ok) +{ + // Close the Browser if opened + if ((helpWindow != nullptr) && helpWindow->isWindowVisible()) + { + helpWindow->setVisible(Visible_false); + return true; + } + // Close the config window, cancelling changes if opened + else if ((setupWindow != nullptr) && setupWindow->isWindowVisible()) + { + setupWindow->action(ActionEvent(nullptr, "cancel")); + return true; + } + else if (NpcDialog *const dialog = NpcDialog::getActive()) + { + dialog->action(ActionEvent(nullptr, "ok")); + return true; + } + else if (popupMenu->isPopupVisible()) + { + popupMenu->select(); + } + return false; +} + +impHandler(shortcut) +{ + if (itemShortcutWindow != nullptr) + { + const int num = itemShortcutWindow->getTabIndex(); + if (num >= 0 && num < CAST_S32(SHORTCUT_TABS)) + { + if (itemShortcut[num] != nullptr) + { + itemShortcut[num]->useItem(event.action + - InputAction::SHORTCUT_1); + } + } + return true; + } + return false; +} + +impHandler0(quit) +{ + if (Game::instance() == nullptr) + return false; + if (PopupManager::isPopupMenuVisible()) + { + PopupManager::closePopupMenu(); + return true; + } + else if (quitDialog == nullptr) + { + CREATEWIDGETV(quitDialog, QuitDialog, + &quitDialog); + quitDialog->requestMoveToTop(); + return true; + } + return false; +} + +impHandler0(dropItem0) +{ + if (dropShortcut != nullptr) + { + dropShortcut->dropFirst(); + return true; + } + return false; +} + +impHandler0(dropItem) +{ + if (dropShortcut != nullptr) + { + dropShortcut->dropItems(1); + return true; + } + return false; +} + +impHandler(dropItemId) +{ + const Inventory *const inv = PlayerInfo::getInventory(); + if (inv == nullptr) + return false; + + // +++ ignoring item color for now + Item *const item = inv->findItem(atoi(event.args.c_str()), + ItemColor_one); + + if ((item != nullptr) && !PlayerInfo::isItemProtected(item->getId())) + { + ItemAmountWindow::showWindow(ItemAmountWindowUsage::ItemDrop, + inventoryWindow, + item, + 0, + 0); + } + return true; +} + +impHandler(dropItemInv) +{ + Item *const item = getItemByInvIndex(atoi(event.args.c_str()), + InventoryType::Inventory); + if ((item != nullptr) && !PlayerInfo::isItemProtected(item->getId())) + { + ItemAmountWindow::showWindow(ItemAmountWindowUsage::ItemDrop, + inventoryWindow, + item, + 0, + 0); + } + return true; +} + +impHandler(dropItemIdAll) +{ + const Inventory *const inv = PlayerInfo::getInventory(); + if (inv == nullptr) + return false; + + // +++ ignoring item color for now + Item *const item = inv->findItem(atoi(event.args.c_str()), + ItemColor_one); + + if ((item != nullptr) && !PlayerInfo::isItemProtected(item->getId())) + PlayerInfo::dropItem(item, item->getQuantity(), Sfx_true); + return true; +} + +impHandler(dropItemInvAll) +{ + Item *const item = getItemByInvIndex(atoi(event.args.c_str()), + InventoryType::Inventory); + if ((item != nullptr) && !PlayerInfo::isItemProtected(item->getId())) + PlayerInfo::dropItem(item, item->getQuantity(), Sfx_true); + return true; +} + +#ifdef TMWA_SUPPORT +impHandler(heal) +{ + if (Net::getNetworkType() != ServerType::TMWATHENA) + return false; + if (actorManager != nullptr && + localPlayer != nullptr) + { + std::string args = event.args; + + if (!args.empty()) + { + const Being *being = nullptr; + if (args[0] == ':') + { + being = actorManager->findBeing(fromInt(atoi( + args.substr(1).c_str()), BeingId)); + if (being != nullptr && being->getType() == ActorType::Monster) + being = nullptr; + } + else + { + being = actorManager->findBeingByName(args, ActorType::Player); + } + if (being != nullptr) + actorManager->heal(being); + } + else + { + Being *target = localPlayer->getTarget(); + if (inputManager.isActionActive(InputAction::STOP_ATTACK)) + { + if (target == nullptr || + target->getType() != ActorType::Player) + { + target = actorManager->findNearestLivingBeing( + localPlayer, 10, ActorType::Player, AllowSort_true); + } + } + else + { + if (target == nullptr) + target = localPlayer; + } + actorManager->heal(target); + } + + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + return false; +} +#else // TMWA_SUPPORT + +impHandler0(heal) +{ + return false; +} +#endif // TMWA_SUPPORT + +impHandler0(healmd) +{ +#ifdef TMWA_SUPPORT + if (Net::getNetworkType() != ServerType::TMWATHENA) + return false; + if (actorManager != nullptr) + { + const int matk = PlayerInfo::getStatEffective(Attributes::PLAYER_MATK); + int maxHealingRadius; + + // magic levels < 2 + if (PlayerInfo::getSkillLevel(340) < 2 + || PlayerInfo::getSkillLevel(341) < 2) + { + maxHealingRadius = matk / 100 + 1; + } + else + { + maxHealingRadius = (12 * fastSqrtInt(matk) + matk) / 100 + 1; + } + + Being *target = actorManager->findMostDamagedPlayer(maxHealingRadius); + if (target != nullptr) + actorManager->heal(target); + + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } +#endif // TMWA_SUPPORT + + return false; +} + +impHandler0(itenplz) +{ +#ifdef TMWA_SUPPORT + if (Net::getNetworkType() != ServerType::TMWATHENA) + return false; + if (actorManager != nullptr) + { + if (playerHandler != nullptr && + playerHandler->canUseMagic() && + PlayerInfo::getAttribute(Attributes::PLAYER_MP) >= 3) + { + actorManager->itenplz(); + } + return true; + } +#endif // TMWA_SUPPORT + + return false; +} + +impHandler0(setHome) +{ + if (localPlayer != nullptr) + { + localPlayer->setHome(); + return true; + } + return false; +} + +impHandler0(magicAttack) +{ +#ifdef TMWA_SUPPORT + if (Net::getNetworkType() != ServerType::TMWATHENA) + return false; + if (localPlayer != nullptr) + { + localPlayer->magicAttack(); + return true; + } +#endif // TMWA_SUPPORT + + return false; +} + +impHandler0(copyEquippedToOutfit) +{ + if (outfitWindow != nullptr) + { + outfitWindow->copyFromEquiped(); + return true; + } + return false; +} + +impHandler(pickup) +{ + if (localPlayer == nullptr) + return false; + + const std::string args = event.args; + if (args.empty()) + { + localPlayer->pickUpItems(0); + } + else + { + FloorItem *const item = actorManager->findItem(fromInt( + atoi(args.c_str()), BeingId)); + if (item != nullptr) + localPlayer->pickUp(item); + } + return true; +} + +static void doSit() +{ + if (inputManager.isActionActive(InputAction::EMOTE)) + localPlayer->updateSit(); + else + localPlayer->toggleSit(); +} + +impHandler0(sit) +{ + if (localPlayer != nullptr) + { + doSit(); + return true; + } + return false; +} + +impHandler(screenshot) +{ + Game::createScreenshot(event.args); + return true; +} + +impHandler0(ignoreInput) +{ + return true; +} + +impHandler(buy) +{ + if (serverFeatures == nullptr) + return false; + const std::string args = event.args; + Being *being = findBeing(args, false); + if ((being == nullptr) && Net::getNetworkType() == ServerType::TMWATHENA) + { + if (whoIsOnline != nullptr) + { + const std::set &players = + whoIsOnline->getOnlineNicks(); + if (players.find(args) != players.end()) + { + if (buySellHandler != nullptr) + buySellHandler->requestSellList(args); + return true; + } + } + return false; + } + + if (being == nullptr) + being = findBeing(args, true); + + if (being == nullptr) + return false; + + if (being->getType() == ActorType::Npc) + { + if (npcHandler != nullptr) + npcHandler->buy(being); + return true; + } + else if (being->getType() == ActorType::Player) + { + if (vendingHandler != nullptr && + Net::getNetworkType() != ServerType::TMWATHENA) + { + vendingHandler->open(being); + } + else if (buySellHandler != nullptr) + { + buySellHandler->requestSellList(being->getName()); + } + return true; + } + return false; +} + +impHandler(sell) +{ + if (serverFeatures == nullptr) + return false; + + const std::string args = event.args; + Being *being = findBeing(args, false); + if (being == nullptr && + Net::getNetworkType() == ServerType::TMWATHENA) + { + if (whoIsOnline != nullptr) + { + const std::set &players = + whoIsOnline->getOnlineNicks(); + if (players.find(args) != players.end()) + { + if (buySellHandler != nullptr) + buySellHandler->requestBuyList(args); + return true; + } + } + return false; + } + + if (being == nullptr) + being = findBeing(args, true); + + if (being == nullptr) + return false; + + if (being->getType() == ActorType::Npc) + { + if (npcHandler != nullptr) + npcHandler->sell(being->getId()); + return true; + } + else if (being->getType() == ActorType::Player) + { + if ((buyingStoreHandler != nullptr) && + Net::getNetworkType() != ServerType::TMWATHENA) + { + buyingStoreHandler->open(being); + } + else if (buySellHandler != nullptr) + { + buySellHandler->requestBuyList(being->getName()); + } + return true; + } + return false; +} + +impHandler(talk) +{ + const std::string args = event.args; + Being *being = nullptr; + + if (!args.empty() && args[0] == ':') + { + being = actorManager->findBeing(fromInt(atoi( + args.substr(1).c_str()), BeingId)); + } + else + { + being = findBeing(args, true); + } + + if (being == nullptr) + return false; + + if (being->canTalk()) + { + being->talkTo(); + } + else if (being->getType() == ActorType::Player) + { + CREATEWIDGET(BuySellDialog, + being->getName()); + } + return true; +} + +impHandler0(stopAttack) +{ + if (localPlayer != nullptr) + { + localPlayer->stopAttack(false); + // not consume if target attack key pressed + if (inputManager.isActionActive(InputAction::TARGET_ATTACK)) + return false; + return true; + } + return false; +} + +impHandler0(untarget) +{ + if (localPlayer != nullptr) + { + localPlayer->untarget(); + return true; + } + return false; +} + +impHandler(attack) +{ + if ((localPlayer == nullptr) || (actorManager == nullptr)) + return false; + + Being *target = nullptr; + std::string args = event.args; + if (!args.empty()) + { + if (args[0] != ':') + { + target = actorManager->findNearestByName(args, + ActorType::Unknown); + } + else + { + target = actorManager->findBeing(fromInt(atoi( + args.substr(1).c_str()), BeingId)); + if (target != nullptr && + target->getType() != ActorType::Monster) + { + target = nullptr; + } + } + } + if (target == nullptr) + target = localPlayer->getTarget(); + else + localPlayer->setTarget(target); + if (target != nullptr) + localPlayer->attack(target, true, false); + return true; +} + +impHandler(targetAttack) +{ + if ((localPlayer != nullptr) && (actorManager != nullptr)) + { + Being *target = nullptr; + std::string args = event.args; + const bool newTarget = !inputManager.isActionActive( + InputAction::STOP_ATTACK); + + if (!args.empty()) + { + if (args[0] != ':') + { + target = actorManager->findNearestByName(args, + ActorType::Unknown); + } + else + { + target = actorManager->findBeing(fromInt(atoi( + args.substr(1).c_str()), BeingId)); + if (target != nullptr && + target->getType() != ActorType::Monster) + { + target = nullptr; + } + } + } + + if ((target == nullptr) && (settings.targetingType == 0U)) + target = localPlayer->getTarget(); + + if (target == nullptr) + { + target = actorManager->findNearestLivingBeing( + localPlayer, 90, ActorType::Monster, AllowSort_true); + } + + localPlayer->attack2(target, newTarget, false); + return true; + } + return false; +} + +impHandler0(attackHuman) +{ + if ((actorManager == nullptr) || (localPlayer == nullptr)) + return false; + + Being *const target = actorManager->findNearestPvpPlayer(); + if (target != nullptr) + { + localPlayer->setTarget(target); + localPlayer->attack2(target, true, false); + } + return true; +} + +impHandler0(safeVideoMode) +{ + WindowManager::setFullScreen(false); + + return true; +} + +impHandler0(stopSit) +{ + if (localPlayer != nullptr) + { + localPlayer->stopAttack(false); + // not consume if target attack key pressed + if (inputManager.isActionActive(InputAction::TARGET_ATTACK)) + return false; + if (localPlayer->getTarget() == nullptr) + { + doSit(); + return true; + } + return true; + } + return false; +} + +impHandler0(showKeyboard) +{ +#if defined(ANDROID) || defined(__SWITCH__) +#ifdef USE_SDL2 + if (SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE) + SDL_StopTextInput(); + else + SDL_StartTextInput(); +#else // USE_SDL2 + + SDL_ANDROID_ToggleScreenKeyboardTextInput(nullptr); +#endif // USE_SDL2 + + return true; +#else // ANDROID + + return false; +#endif // ANDROID +} + +impHandler0(showWindows) +{ + if (popupMenu != nullptr) + { + popupMenu->showWindowsPopup(); + return true; + } + return false; +} + +impHandler0(openTrade) +{ + const Being *const being = localPlayer->getTarget(); + if ((being != nullptr) && being->getType() == ActorType::Player) + { + if (tradeHandler != nullptr) + tradeHandler->request(being); + tradePartnerName = being->getName(); + if (tradeWindow != nullptr) + tradeWindow->clear(); + return true; + } + return false; +} + +impHandler0(ipcToggle) +{ + if (ipc != nullptr) + { + IPC::stop(); + if (ipc == nullptr) + { + debugChatTab->chatLog("IPC service stopped.", + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + else + { + debugChatTab->chatLog("Unable to stop IPC service.", + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + } + else + { + IPC::start(); + if (ipc != nullptr) + { + debugChatTab->chatLog( + strprintf("IPC service available on port %d", ipc->getPort()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + else + { + debugChatTab->chatLog("Unable to start IPC service", + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + } + return true; +} + +impHandler(where) +{ + ChatTab *const tab = event.tab != nullptr ? event.tab : debugChatTab; + if (tab == nullptr) + return false; + std::ostringstream where; + where << Game::instance()->getCurrentMapName() << ", coordinates: " + << ((localPlayer->getPixelX() - mapTileSize / 2) / mapTileSize) + << ", " << ((localPlayer->getPixelY() - mapTileSize) / mapTileSize); + tab->chatLog(where.str(), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; +} + +impHandler0(who) +{ + if (chatHandler != nullptr) + chatHandler->who(); + return true; +} + +impHandler0(cleanGraphics) +{ + ResourceManager::clearCache(); + + if (debugChatTab != nullptr) + { + // TRANSLATORS: clear graphics command message + debugChatTab->chatLog(_("Cache cleared"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; +} + +impHandler0(cleanFonts) +{ + if (gui != nullptr) + gui->clearFonts(); + if (debugChatTab != nullptr) + { + // TRANSLATORS: clear fonts cache message + debugChatTab->chatLog(_("Cache cleared"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; +} + +impHandler(trade) +{ + if (actorManager == nullptr) + return false; + + const Being *being = actorManager->findBeingByName( + event.args, ActorType::Player); + if (being == nullptr) + being = localPlayer->getTarget(); + if (being != nullptr) + { + if (tradeHandler != nullptr) + tradeHandler->request(being); + tradePartnerName = being->getName(); + if (tradeWindow != nullptr) + tradeWindow->clear(); + } + return true; +} + +impHandler0(priceLoad) +{ + if (shopWindow != nullptr) + { + shopWindow->loadList(); + return true; + } + return false; +} + +impHandler0(priceSave) +{ + if (shopWindow != nullptr) + { + shopWindow->saveList(); + return true; + } + return false; +} + +impHandler0(cacheInfo) +{ + if ((chatWindow == nullptr) || (debugChatTab == nullptr)) + return false; + +/* + Font *const font = chatWindow->getFont(); + if (!font) + return; + + const TextChunkList *const cache = font->getCache(); + if (!cache) + return; + + unsigned int all = 0; + // TRANSLATORS: chat fonts message + debugChatTab->chatLog(_("font cache size"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + std::string str; + for (int f = 0; f < 256; f ++) + { + if (!cache[f].size) + { + const unsigned int sz = CAST_S32(cache[f].size); + all += sz; + str.append(strprintf("%d: %u, ", f, sz)); + } + } + debugChatTab->chatLog(str, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + // TRANSLATORS: chat fonts message + debugChatTab->chatLog(strprintf("%s %d", _("Cache size:"), all), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); +#ifdef DEBUG_FONT_COUNTERS + debugChatTab->chatLog("", + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + debugChatTab->chatLog(strprintf("%s %d", + // TRANSLATORS: chat fonts message + _("Created:"), font->getCreateCounter()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + debugChatTab->chatLog(strprintf("%s %d", + // TRANSLATORS: chat fonts message + _("Deleted:"), font->getDeleteCounter()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); +#endif +*/ + return true; +} + +impHandler0(disconnect) +{ + if (!settings.options.uniqueSession) + { + if (gameHandler != nullptr) + gameHandler->disconnect2(); + return true; + } + else + return false; +} + +impHandler(undress) +{ + if ((actorManager == nullptr) || (localPlayer == nullptr)) + return false; + + const std::string args = event.args; + StringVect pars; + if (!splitParameters(pars, args, " ,", '\"')) + return false; + Being *target = nullptr; + const size_t sz = pars.size(); + if (sz == 0) + { + target = localPlayer->getTarget(); + } + else + { + if (pars[0][0] == ':') + { + target = actorManager->findBeing(fromInt(atoi( + pars[0].substr(1).c_str()), BeingId)); + if ((target != nullptr) && target->getType() == ActorType::Monster) + target = nullptr; + } + else + { + target = actorManager->findNearestByName(args, + ActorType::Unknown); + } + } + + if (sz == 2) + { + if (target != nullptr) + { + const int itemId = atoi(pars[1].c_str()); + target->undressItemById(itemId); + } + } + else + { + if ((target != nullptr) && (beingHandler != nullptr)) + beingHandler->undress(target); + } + + return true; +} + +impHandler0(dirs) +{ + if (debugChatTab == nullptr) + return false; + + debugChatTab->chatLog("config directory: " + + settings.configDir, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + debugChatTab->chatLog("logs directory: " + + settings.localDataDir, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + debugChatTab->chatLog("screenshots directory: " + + settings.screenshotDir, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + debugChatTab->chatLog("temp directory: " + + settings.tempDir, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; +} + +impHandler0(uptime) +{ + if (debugChatTab == nullptr) + return false; + + if (cur_time < start_time) + { + // TRANSLATORS: uptime command + debugChatTab->chatLog(strprintf(_("Client uptime: %s"), "unknown"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + else + { + // TRANSLATORS: uptime command + debugChatTab->chatLog(strprintf(_("Client uptime: %s"), + timeDiffToString(CAST_S32(cur_time - start_time)).c_str()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; +} + +#ifdef DEBUG_DUMP_LEAKS1 +static void showRes(std::string str, ResourceManager::Resources *res) +{ + if (!res) + return; + + str.append(toString(res->size())); + if (debugChatTab) + { + debugChatTab->chatLog(str, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + logger->log(str); + ResourceManager::ResourceIterator iter = res->begin(); + const ResourceManager::ResourceIterator iter_end = res->end(); + while (iter != iter_end) + { + if (iter->second && iter->second->mRefCount) + { + char type = ' '; + char isNew = 'N'; + if (iter->second->getDumped()) + isNew = 'O'; + else + iter->second->setDumped(true); + + SubImage *const subImage = dynamic_cast( + iter->second); + Image *const image = dynamic_cast(iter->second); + int id = 0; + if (subImage) + type = 'S'; + else if (image) + type = 'I'; + if (image) + id = image->getGLImage(); + logger->log("Resource %c%c: %s (%d) id=%d", type, + isNew, iter->second->getIdPath().c_str(), + iter->second->mRefCount, id); + } + ++ iter; + } +} + +impHandler(dump) +{ + if (!debugChatTab) + return false; + + if (!event.args.empty()) + { + ResourceManager::Resources *res = ResourceManager::getResources(); + // TRANSLATORS: dump command + showRes(_("Resource images:"), res); + res = ResourceManager::getOrphanedResources(); + // TRANSLATORS: dump command + showRes(_("Orphaned resource images:"), res); + } + else + { + ResourceManager::Resources *res = ResourceManager::getResources(); + // TRANSLATORS: dump command + debugChatTab->chatLog(_("Resource images:") + toString(res->size()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + res = ResourceManager::getOrphanedResources(); + // TRANSLATORS: dump command + debugChatTab->chatLog(_("Orphaned resource images:") + + toString(res->size()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; +} + +#elif defined ENABLE_MEM_DEBUG +impHandler0(dump) +{ + nvwa::check_leaks(); + return true; +} +#else // DEBUG_DUMP_LEAKS1 + +impHandler0(dump) +{ + return true; +} +#endif // DEBUG_DUMP_LEAKS1 + +impHandler0(serverIgnoreAll) +{ + if (chatHandler != nullptr) + chatHandler->ignoreAll(); + return true; +} + +impHandler0(serverUnIgnoreAll) +{ + if (chatHandler != nullptr) + chatHandler->unIgnoreAll(); + return true; +} + +PRAGMA6(GCC diagnostic push) +PRAGMA6(GCC diagnostic ignored "-Wnull-dereference") +PRAGMA11(GCC diagnostic push) +PRAGMA11(GCC diagnostic ignored "-Warray-bounds") +impHandler0(error) +{ + int *const ptr = nullptr; + *(ptr + 1) = 20; +// logger->log("test %d", *ptr); + exit(1); +} +PRAGMA11(GCC diagnostic pop) +PRAGMA6(GCC diagnostic pop) + +impHandler(dumpGraphics) +{ + std::string str = strprintf("%s,%s,%dX%dX%d,", PACKAGE_OS, SMALL_VERSION, + mainGraphics->getWidth(), mainGraphics->getHeight(), + mainGraphics->getBpp()); + + if (mainGraphics->getFullScreen()) + str.append("F"); + else + str.append("W"); + if (mainGraphics->getHWAccel()) + str.append("H"); + else + str.append("S"); + + if (mainGraphics->getDoubleBuffer()) + str.append("D"); + else + str.append("_"); + +#if defined USE_OPENGL + str.append(strprintf(",%d", mainGraphics->getOpenGL())); +#else // defined USE_OPENGL + + str.append(",0"); +#endif // defined USE_OPENGL + + str.append(strprintf(",%f,", static_cast(settings.guiAlpha))) + .append(config.getBoolValue("adjustPerfomance") ? "1" : "0") + .append(config.getBoolValue("alphaCache") ? "1" : "0") + .append(config.getBoolValue("enableMapReduce") ? "1" : "0") + .append(config.getBoolValue("beingopacity") ? "1" : "0") + .append(",") + .append(config.getBoolValue("enableAlphaFix") ? "1" : "0") + .append(config.getBoolValue("disableAdvBeingCaching") ? "1" : "0") + .append(config.getBoolValue("disableBeingCaching") ? "1" : "0") + .append(config.getBoolValue("particleeffects") ? "1" : "0") + .append(strprintf(",%d-%d", fps, config.getIntValue("fpslimit"))); + outStringNormal(event.tab, str, str); + return true; +} + +impHandler0(dumpEnvironment) +{ + logger->log1("Start environment variables"); + for (char **env = environ; *env != nullptr; ++ env) + logger->log1(*env); + logger->log1("End environment variables"); + if (debugChatTab != nullptr) + { + // TRANSLATORS: dump environment command + debugChatTab->chatLog(_("Environment variables dumped"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; +} + +impHandler(dumpTests) +{ + const std::string str = config.getStringValue("testInfo"); + outStringNormal(event.tab, str, str); + return true; +} + +impHandler0(dumpOGL) +{ +#ifdef USE_OPENGL +#if !defined(ANDROID) && !defined(__native_client__) && !defined(__SWITCH__) + NormalOpenGLGraphics::dumpSettings(); +#endif // !defined(ANDROID) && !defined(__native_client__) && + // !defined(__SWITCH__) +#endif // USE_OPENGL + + return true; +} + +#ifdef USE_OPENGL +impHandler(dumpGL) +{ + std::string str = graphicsManager.getGLVersion(); + outStringNormal(event.tab, str, str); + return true; +} +#else // USE_OPENGL + +impHandler0(dumpGL) +{ + return true; +} +#endif // USE_OPENGL + +impHandler(dumpMods) +{ + std::string str = "enabled mods: " + serverConfig.getValue("mods", ""); + outStringNormal(event.tab, str, str); + return true; +} + +#if defined USE_OPENGL && defined DEBUG_SDLFONT +impHandler0(testSdlFont) +{ + Font *font = new Font("fonts/dejavusans.ttf", 18, TTF_STYLE_NORMAL); + timespec time1; + timespec time2; + NullOpenGLGraphics *nullGraphics = new NullOpenGLGraphics; + STD_VECTOR data; + volatile int width = 0; + + for (int f = 0; f < 300; f ++) + data.push_back("test " + toString(f) + "string"); + nullGraphics->beginDraw(); + + clock_gettime(CLOCK_MONOTONIC, &time1); + Color color(0, 0, 0, 255); + + for (int f = 0; f < 500; f ++) + { + FOR_EACH (STD_VECTOR::const_iterator, it, data) + { + width += font->getWidth(*it); + font->drawString(nullGraphics, color, color, *it, 10, 10); + } + FOR_EACH (STD_VECTOR::const_iterator, it, data) + font->drawString(nullGraphics, color, color, *it, 10, 10); + + font->doClean(); + } + + clock_gettime(CLOCK_MONOTONIC, &time2); + + delete nullGraphics; + delete font; + + int64_t diff = (static_cast( + time2.tv_sec) * 1000000000LL + static_cast( + time2.tv_nsec)) / 100000 - (static_cast( + time1.tv_sec) * 1000000000LL + static_cast( + time1.tv_nsec)) / 100000; + if (debugChatTab) + { + debugChatTab->chatLog("sdlfont time: " + toString(diff), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; +} +#endif // defined USE_OPENGL && defined DEBUG_SDLFONT + +impHandler0(createItems) +{ + BuyDialog *const dialog = CREATEWIDGETR0(BuyDialog); + const ItemDB::ItemInfos &items = ItemDB::getItemInfos(); + FOR_EACH (ItemDB::ItemInfos::const_iterator, it, items) + { + const ItemInfo *const info = (*it).second; + if (info == nullptr) + continue; + const int id = info->getId(); + if (id <= 500) + continue; + + dialog->addItem(id, + ItemType::Unknown, + ItemColor_one, + 100, + 0); + } + dialog->sort(); + return true; +} + +impHandler(createItem) +{ + int id = 0; + int amount = 0; + + if (adminHandler == nullptr) + return false; + + if (parse2Int(event.args, id, amount)) + adminHandler->createItems(id, ItemColor_one, amount); + else + adminHandler->createItems(atoi(event.args.c_str()), ItemColor_one, 1); + return true; +} + +impHandler(uploadConfig) +{ + // TRANSLATORS: upload config chat message + uploadFile(_("Config uploaded to:"), + config.getFileName(), + "?xml", + event.tab); + return true; +} + +impHandler(uploadServerConfig) +{ + // TRANSLATORS: upload config chat message + uploadFile(_("Server config Uploaded to:"), + serverConfig.getFileName(), + "?xml", + event.tab); + return true; +} + +impHandler(uploadLog) +{ + // TRANSLATORS: upload log chat message + uploadFile(_("Log uploaded to:"), + settings.logFileName, + "", + event.tab); + return true; +} + +impHandler0(mercenaryFire) +{ + if (mercenaryHandler != nullptr) + mercenaryHandler->fire(); + return true; +} + +impHandler0(mercenaryToMaster) +{ + if (mercenaryHandler != nullptr) + mercenaryHandler->moveToMaster(); + return true; +} + +impHandler0(homunculusToMaster) +{ + if (homunculusHandler != nullptr) + homunculusHandler->moveToMaster(); + return true; +} + +impHandler0(homunculusFeed) +{ + if (homunculusHandler != nullptr) + homunculusHandler->feed(); + return true; +} + +impHandler(useItem) +{ + StringVect pars; + if (!splitParameters(pars, event.args, " ,", '\"')) + return false; + const int sz = CAST_S32(pars.size()); + if (sz < 1) + return false; + + const int itemId = atoi(pars[0].c_str()); + + if (itemId < SPELL_MIN_ID) + { + const Inventory *const inv = PlayerInfo::getInventory(); + if (inv != nullptr) + { + ItemColor color = ItemColor_one; + int16_t useType = 0; + StringVect pars2; + if (!splitParameters(pars2, pars[0], " ,", '\"')) + return false; + const int sz2 = CAST_S32(pars2.size()); + if (sz2 < 1) + return false; + if (sz2 >= 2) + color = fromInt(atoi(pars2[1].c_str()), ItemColor); + if (sz >= 2) + useType = CAST_S16(atoi(pars[1].c_str())); + const Item *const item = inv->findItem(itemId, + color); + PlayerInfo::useEquipItem(item, useType, Sfx_true); + } + } + else if (itemId < SKILL_MIN_ID && (spellManager != nullptr)) + { + spellManager->useItem(itemId); + } + else if (skillDialog != nullptr) + { + // +++ probably need get data parameter from args + skillDialog->useItem(itemId, + fromBool(config.getBoolValue("skillAutotarget"), AutoTarget), + 0, + std::string()); + } + return true; +} + +impHandler(useItemInv) +{ + int param1 = 0; + int param2 = 0; + const std::string args = event.args; + if (parse2Int(args, param1, param2)) + { + Item *const item = getItemByInvIndex(param1, + InventoryType::Inventory); + PlayerInfo::useEquipItem(item, CAST_S16(param2), Sfx_true); + } + else + { + Item *const item = getItemByInvIndex(atoi(event.args.c_str()), + InventoryType::Inventory); + PlayerInfo::useEquipItem(item, 0, Sfx_true); + } + return true; +} + +impHandler(invToStorage) +{ + Item *item = nullptr; + const int amount = getAmountFromEvent(event, item, + InventoryType::Inventory); + if (item == nullptr) + return true; + if (amount != 0) + { + if (inventoryHandler != nullptr) + { + inventoryHandler->moveItem2(InventoryType::Inventory, + item->getInvIndex(), + amount, + InventoryType::Storage); + } + } + else + { + ItemAmountWindow::showWindow(ItemAmountWindowUsage::StoreAdd, + inventoryWindow, + item, + 0, + 0); + } + return true; +} + +impHandler(tradeAdd) +{ + Item *item = nullptr; + const int amount = getAmountFromEvent(event, item, + InventoryType::Inventory); + if ((item == nullptr) || PlayerInfo::isItemProtected(item->getId())) + return true; + + if (amount != 0) + { + if (tradeWindow != nullptr) + tradeWindow->tradeItem(item, amount, true); + } + else + { + ItemAmountWindow::showWindow(ItemAmountWindowUsage::TradeAdd, + tradeWindow, + item, + 0, + 0); + } + return true; +} + +impHandler(storageToInv) +{ + Item *item = nullptr; + const int amount = getAmountFromEvent(event, item, InventoryType::Storage); + if (amount != 0) + { + if ((inventoryHandler != nullptr) && (item != nullptr)) + { + inventoryHandler->moveItem2(InventoryType::Storage, + item->getInvIndex(), + amount, + InventoryType::Inventory); + } + } + else + { + ItemAmountWindow::showWindow(ItemAmountWindowUsage::StoreRemove, + storageWindow, + item, + 0, + 0); + } + return true; +} + +impHandler(protectItem) +{ + const int id = atoi(event.args.c_str()); + if (id > 0) + PlayerInfo::protectItem(id); + return true; +} + +impHandler(unprotectItem) +{ + const int id = atoi(event.args.c_str()); + if (id > 0) + PlayerInfo::unprotectItem(id); + return true; +} + +impHandler(kick) +{ + if ((localPlayer == nullptr) || (actorManager == nullptr)) + return false; + + Being *target = nullptr; + std::string args = event.args; + if (!args.empty()) + { + if (args[0] != ':') + { + target = actorManager->findNearestByName(args, + ActorType::Unknown); + } + else + { + target = actorManager->findBeing(fromInt(atoi( + args.substr(1).c_str()), BeingId)); + } + } + if (target == nullptr) + target = localPlayer->getTarget(); + if ((target != nullptr) && (adminHandler != nullptr)) + adminHandler->kick(target->getId()); + return true; +} + +impHandler0(clearDrop) +{ + if (dropShortcut != nullptr) + dropShortcut->clear(true); + return true; +} + +impHandler0(testInfo) +{ + if (actorManager != nullptr) + { + logger->log("actors count: %d", CAST_S32( + actorManager->size())); + return true; + } + return false; +} + +impHandler(craftKey) +{ + const int slot = (event.action - InputAction::CRAFT_1); + if (slot >= 0 && slot < 9) + { + if (inventoryWindow != nullptr) + inventoryWindow->moveItemToCraft(slot); + return true; + } + return false; +} + +impHandler0(resetGameModifiers) +{ + GameModifiers::resetModifiers(); + return true; +} + +impHandler(barToChat) +{ + if (chatWindow != nullptr) + { + chatWindow->addInputText(event.args, + true); + return true; + } + return false; +} + +impHandler(seen) +{ + if (actorManager == nullptr) + return false; + + ChatTab *tab = event.tab; + if (tab == nullptr) + tab = localChatTab; + if (tab == nullptr) + return false; + + if (config.getBoolValue("enableIdCollecting") == false) + { + // TRANSLATORS: last seen disabled warning + tab->chatLog(_("Last seen disabled. " + "Enable in players / collect players ID and seen log."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + } + + const std::string name = event.args; + if (name.empty()) + return false; + + std::string dir = settings.usersDir; + dir.append(stringToHexPath(name)).append("/seen.txt"); + if (Files::existsLocal(dir)) + { + StringVect lines; + Files::loadTextFileLocal(dir, lines); + if (lines.size() < 3) + { + // TRANSLATORS: last seen error + tab->chatLog(_("You have never seen this nick."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + } + const std::string message = strprintf( + // TRANSLATORS: last seen message + _("Last seen for %s: %s"), + name.c_str(), + lines[2].c_str()); + tab->chatLog(message, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + else + { + // TRANSLATORS: last seen error + tab->chatLog(_("You have not seen this nick before."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + + return true; +} + +impHandler(dumpMemoryUsage) +{ + if (event.tab != nullptr) + MemoryManager::printAllMemory(event.tab); + else + MemoryManager::printAllMemory(localChatTab); + return true; +} + +impHandler(setEmoteType) +{ + const std::string &args = event.args; + if (args == "player" || args.empty()) + { + settings.emoteType = EmoteType::Player; + } + else if (args == "pet") + { + settings.emoteType = EmoteType::Pet; + } + else if (args == "homun" || args == "homunculus") + { + settings.emoteType = EmoteType::Homunculus; + } + else if (args == "merc" || args == "mercenary") + { + settings.emoteType = EmoteType::Mercenary; + } + return true; +} + +} // namespace Actions diff --git a/src/progs/manaverse/actions/chat.cpp b/src/progs/manaverse/actions/chat.cpp new file mode 100644 index 000000000..27963a75f --- /dev/null +++ b/src/progs/manaverse/actions/chat.cpp @@ -0,0 +1,840 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/chat.h" + +#include "configuration.h" + +#include "actions/actiondef.h" + +#include "being/localplayer.h" + +#include "gui/sdlinput.h" + +#include "gui/windows/chatwindow.h" + +#include "listeners/inputactionreplaylistener.h" + +#include "net/charserverhandler.h" +#include "net/chathandler.h" +#include "net/clanhandler.h" +#include "net/guildhandler.h" +#include "net/net.h" +#include "net/partyhandler.h" + +#ifdef TMWA_SUPPORT +#include "net/tmwa/guildmanager.h" +#endif // TMWA_SUPPORT + +#include "resources/iteminfo.h" + +#include "resources/db/itemdb.h" + +#include "utils/booleanoptions.h" +#include "utils/chatutils.h" +#include "utils/parameters.h" + +#include "utils/translation/podict.h" + +#include "debug.h" + +const int DEFAULT_CHAT_WINDOW_SCROLL = 7; + +namespace Actions +{ + +static void outString(ChatTab *const tab, + const std::string &str, + const std::string &def) +{ + if (tab == nullptr) + { + if (chatHandler != nullptr) + chatHandler->talk(def); + return; + } + + switch (tab->getType()) + { + case ChatTabType::CLAN: + { + if (clanHandler != nullptr) + clanHandler->chat(str); + break; + } + case ChatTabType::PARTY: + { + if (partyHandler != nullptr) + partyHandler->chat(str); + break; + } + case ChatTabType::GUILD: + { + if ((guildHandler == nullptr) || (localPlayer == nullptr)) + return; + const Guild *const guild = localPlayer->getGuild(); + if (guild != nullptr) + { +#ifdef TMWA_SUPPORT + if (guild->getServerGuild()) + { + if (Net::getNetworkType() == ServerType::TMWATHENA) + return; + guildHandler->chat(str); + } + else if (guildManager != nullptr) + { + guildManager->chat(str); + } +#else // TMWA_SUPPORT + + if (guild->getServerGuild()) + guildHandler->chat(str); +#endif // TMWA_SUPPORT + } + break; + } + case ChatTabType::CHANNEL: + case ChatTabType::GM: + case ChatTabType::TRADE: + tab->chatInput(str); + break; + default: + case ChatTabType::UNKNOWN: + case ChatTabType::INPUT: + case ChatTabType::WHISPER: + case ChatTabType::DEBUG: + case ChatTabType::BATTLE: + case ChatTabType::LANG: + if (chatHandler != nullptr) + chatHandler->talk(str); + break; + } +} + +impHandler0(toggleChat) +{ + return chatWindow != nullptr ? chatWindow->requestChatFocus() : false; +} + +impHandler0(prevChatTab) +{ + if (chatWindow != nullptr) + { + chatWindow->prevTab(); + return true; + } + return false; +} + +impHandler0(nextChatTab) +{ + if (chatWindow != nullptr) + { + chatWindow->nextTab(); + return true; + } + return false; +} + +impHandler0(closeChatTab) +{ + if (chatWindow != nullptr) + { + chatWindow->closeTab(); + return true; + } + return false; +} + +impHandler0(closeAllChatTabs) +{ + if (chatWindow != nullptr) + { + chatWindow->removeAllWhispers(); + chatWindow->saveState(); + return true; + } + return false; +} + +impHandler0(ignoreAllWhispers) +{ + if (chatWindow != nullptr) + { + chatWindow->ignoreAllWhispers(); + chatWindow->saveState(); + return true; + } + return false; +} + +impHandler0(scrollChatUp) +{ + if ((chatWindow != nullptr) && chatWindow->isWindowVisible()) + { + chatWindow->scroll(-DEFAULT_CHAT_WINDOW_SCROLL); + return true; + } + return false; +} + +impHandler0(scrollChatDown) +{ + if ((chatWindow != nullptr) && chatWindow->isWindowVisible()) + { + chatWindow->scroll(DEFAULT_CHAT_WINDOW_SCROLL); + return true; + } + return false; +} + +static bool splitWhisper(const std::string &args, + std::string &recvnick, + std::string &message) +{ + if (args.substr(0, 1) == "\"") + { + const size_t pos = args.find('"', 1); + if (pos != std::string::npos) + { + recvnick = args.substr(1, pos - 1); + if (pos + 2 < args.length()) + message = args.substr(pos + 2, args.length()); + } + } + else + { + const size_t pos = args.find(' '); + if (pos != std::string::npos) + { + recvnick = args.substr(0, pos); + if (pos + 1 < args.length()) + message = args.substr(pos + 1, args.length()); + } + else + { + recvnick = std::string(args); + message.clear(); + } + } + + trim(message); + + if (message.length() > 0) + { + std::string playerName = localPlayer->getName(); + std::string tempNick = recvnick; + + toLower(playerName); + toLower(tempNick); + + if (tempNick == playerName || args.empty()) + return false; + + return true; + } + return false; +} + +impHandler(msg) +{ + std::string recvnick; + std::string message; + + if (splitWhisper(event.args, recvnick, message)) + { + if (chatWindow == nullptr) + return false; + ChatTab *const tab = chatWindow->addChatTab(recvnick, false, true); + if (tab != nullptr) + { + chatWindow->saveState(); + tab->chatInput(message); + } + } + else + { + if (event.tab != nullptr) + { + event.tab->chatLog( + // TRANSLATORS: whisper send + _("Cannot send empty whisper or channel message!"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + } + return true; +} + +impHandler(msgText) +{ + if (chatWindow == nullptr) + return false; + + if (config.getBoolValue("whispertab")) + { + chatWindow->localChatInput("/q " + event.args); + } + else + { + chatWindow->addInputText( + std::string("/w \"").append(event.args).append("\" "), + true); + } + return true; +} + +impHandler(msg2) +{ + std::string recvnick; + std::string message; + + if (chatHandler != nullptr && + splitWhisper(event.args, recvnick, message)) + { + chatHandler->privateMessage(recvnick, message); + } + return true; +} + +impHandler(query) +{ + const std::string &args = event.args; + if (chatWindow != nullptr) + { + if (chatWindow->addChatTab(args, true, true) != nullptr) + { + chatWindow->saveState(); + return true; + } + } + + if (event.tab != nullptr) + { + // TRANSLATORS: new whisper or channel query + event.tab->chatLog(strprintf(_("Cannot create a whisper tab " + "\"%s\"! It probably already exists."), + args.c_str()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; +} + +impHandler0(clearChatTab) +{ + if (chatWindow != nullptr) + { + chatWindow->clearTab(); + return true; + } + return false; +} + +impHandler(createParty) +{ + if (partyHandler == nullptr) + return false; + + if (event.args.empty()) + { + // TRANSLATORS: dialog header + inputActionReplayListener.openDialog(_("Create party"), + "", + InputAction::CREATE_PARTY); + } + else + { + partyHandler->create(event.args); + } + return true; +} + +impHandler(createGuild) +{ + if ((guildHandler == nullptr) || + Net::getNetworkType() == ServerType::TMWATHENA) + { + return false; + } + + if (event.args.empty()) + { + // TRANSLATORS: dialog header + inputActionReplayListener.openDialog(_("Create guild"), + "", + InputAction::CREATE_GUILD); + } + else + { + guildHandler->create(event.args); + } + return true; +} + +impHandler(party) +{ + if (!event.args.empty()) + { + if (partyHandler != nullptr) + partyHandler->invite(event.args); + } + else + { + if (event.tab != nullptr) + { + // TRANSLATORS: party invite message + event.tab->chatLog(_("Please specify a name."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + } + return true; +} + +impHandler(guild) +{ + if ((guildHandler == nullptr) || (localPlayer == nullptr)) + return false; + + const std::string args = event.args; + if (!args.empty()) + { + const Guild *const guild = localPlayer->getGuild(); + if (guild != nullptr) + { +#ifdef TMWA_SUPPORT + if (guild->getServerGuild()) + guildHandler->invite(args); + else if (guildManager != nullptr) + GuildManager::invite(args); +#else // TMWA_SUPPORT + + guildHandler->invite(args); +#endif // TMWA_SUPPORT + } + } + else + { + if (event.tab != nullptr) + { + // TRANSLATORS: guild invite message + event.tab->chatLog(_("Please specify a name."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + else if (localChatTab != nullptr) + { + // TRANSLATORS: guild invite message + localChatTab->chatLog(_("Please specify a name."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + } + return true; +} + +impHandler(me) +{ + outString(event.tab, textToMe(event.args), event.args); + return true; +} + +impHandler(toggle) +{ + if (event.args.empty()) + { + if ((chatWindow != nullptr) && (event.tab != nullptr)) + { + event.tab->chatLog(chatWindow->getReturnTogglesChat() ? + // TRANSLATORS: message from toggle chat command + _("Return toggles chat.") : _("Message closes chat."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; + } + + switch (parseBoolean(event.args)) + { + case 1: + if (event.tab != nullptr) + { + // TRANSLATORS: message from toggle chat command + event.tab->chatLog(_("Return now toggles chat."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + if (chatWindow != nullptr) + chatWindow->setReturnTogglesChat(true); + return true; + case 0: + if (event.tab != nullptr) + { + // TRANSLATORS: message from toggle chat command + event.tab->chatLog(_("Message now closes chat."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + if (chatWindow != nullptr) + chatWindow->setReturnTogglesChat(false); + return true; + case -1: + if (event.tab != nullptr) + { + event.tab->chatLog(strprintf(BOOLEAN_OPTIONS, "toggle"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; + default: + return true; + } +} + +impHandler(kickParty) +{ + if (!event.args.empty()) + { + if (partyHandler != nullptr) + partyHandler->kick(event.args); + } + else + { + if (event.tab != nullptr) + { + // TRANSLATORS: party kick message + event.tab->chatLog(_("Please specify a name."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + } + return true; +} + +impHandler(kickGuild) +{ + if (!event.args.empty()) + { + if (localPlayer != nullptr) + { + const Guild *const guild = localPlayer->getGuild(); + if (guild != nullptr) + { + if (guild->getServerGuild()) + { + if (guildHandler != nullptr) + guildHandler->kick(guild->getMember(event.args), ""); + } +#ifdef TMWA_SUPPORT + else if (guildManager != nullptr) + { + GuildManager::kick(event.args); + } +#endif // TMWA_SUPPORT + } + } + } + else + { + if (event.tab != nullptr) + { + // TRANSLATORS: party kick message + event.tab->chatLog(_("Please specify a name."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + } + return true; +} + +impHandler(addText) +{ + if (chatWindow != nullptr) + chatWindow->addInputText(event.args, true); + return true; +} + +impHandler0(clearChat) +{ + if (chatWindow != nullptr) + chatWindow->clearTab(); + return true; +} + +impHandler0(chatGeneralTab) +{ + if (chatWindow != nullptr) + chatWindow->selectTabByType(ChatTabType::INPUT); + return true; +} + +impHandler0(chatDebugTab) +{ + if (chatWindow != nullptr) + chatWindow->selectTabByType(ChatTabType::DEBUG); + return true; +} + +impHandler0(chatBattleTab) +{ + if (chatWindow != nullptr) + chatWindow->selectTabByType(ChatTabType::BATTLE); + return true; +} + +impHandler0(chatTradeTab) +{ + if (chatWindow != nullptr) + chatWindow->selectTabByType(ChatTabType::TRADE); + return true; +} + +impHandler0(chatLangTab) +{ + if (chatWindow != nullptr) + chatWindow->selectTabByType(ChatTabType::LANG); + return true; +} + +impHandler0(chatGmTab) +{ + if (chatWindow != nullptr) + chatWindow->selectTabByType(ChatTabType::GM); + return true; +} + +impHandler0(chatPartyTab) +{ + if (chatWindow != nullptr) + chatWindow->selectTabByType(ChatTabType::PARTY); + return true; +} + +impHandler0(chatGuildTab) +{ + if (chatWindow != nullptr) + chatWindow->selectTabByType(ChatTabType::GUILD); + return true; +} + +impHandler(hat) +{ + if ((localPlayer == nullptr) || (charServerHandler == nullptr)) + return false; + + const int sprite = localPlayer->getSpriteID( + charServerHandler->hatSprite()); + std::string str; + if (sprite == 0) + { + // TRANSLATORS: equipped hat chat message + str = _("no hat equipped."); + } + else + { + const ItemInfo &info = ItemDB::get(sprite); + // TRANSLATORS: equipped hat chat message + str = strprintf(_("equipped hat %s."), + info.getName().c_str()); + } + outString(event.tab, str, str); + return true; +} + +impHandler(chatClipboard) +{ + int x = 0; + int y = 0; + + if ((chatWindow != nullptr) && parse2Int(event.args, x, y)) + { + chatWindow->copyToClipboard(x, y); + return true; + } + return false; +} + +impHandler(guildNotice) +{ + if (localPlayer == nullptr) + return false; + const std::string args = event.args; + if (args.empty()) + { + // TRANSLATORS: dialog header + inputActionReplayListener.openDialog(_("Guild notice"), + "", + InputAction::GUILD_NOTICE); + return true; + } + + std::string str2; + if (args.size() > 60) + str2 = args.substr(60); + const Guild *const guild = localPlayer->getGuild(); + if (guild != nullptr) + { + guildHandler->changeNotice(guild->getId(), + args.substr(0, 60), + str2); + } + return true; +} + +impHandler(translate) +{ + if (reverseDictionary == nullptr || + localPlayer == nullptr || + event.args.empty()) + { + return false; + } + + ChatTab *const tab = event.tab; + if (tab == nullptr) + return false; + + std::string srcStr = event.args; + std::string enStr; + toLower(srcStr); + if (localPlayer->getLanguageId() > 0) + { + if (reverseDictionary->haveStr(srcStr)) + enStr = reverseDictionary->getStr(srcStr); + else if (dictionary->haveStr(srcStr)) + enStr = srcStr; + } + else + { + if (dictionary->haveStr(srcStr)) + enStr = srcStr; + } + + if (enStr.empty()) + { + tab->chatLog( + // TRANSLATORS: translation error message + strprintf(_("No translation found for string: %s"), + srcStr.c_str()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + } + + tab->chatInput(enStr); + return true; +} + +impHandler(sendGuiKey) +{ + if (guiInput == nullptr) + return false; + + const std::string args = event.args; + if (args.empty()) + return false; + StringVect pars; + if (!splitParameters(pars, args, " ,", '\"')) + return false; + const int sz = CAST_S32(pars.size()); + if (sz < 1) + return false; + + int keyValue = atoi(pars[0].c_str()); + if (keyValue == 0 && + pars[0].size() == 1) + { + keyValue = CAST_S32(pars[0][0]); + } + if (sz == 2) + { + const InputActionT actionId = InputManager::getActionByConfigField( + pars[1]); + guiInput->simulateKey(keyValue, actionId); + } + else + { + guiInput->simulateKey(keyValue, InputAction::NO_VALUE); + } + return true; +} + +impHandler(sendMouseKey) +{ + if (guiInput == nullptr) + return false; + const std::string args = event.args; + if (args.empty()) + return false; + StringVect pars; + if (!splitParameters(pars, args, " ,", '\"')) + return false; + const int sz = CAST_S32(pars.size()); + if (sz != 3) + return false; + + const int x = atoi(pars[0].c_str()); + const int y = atoi(pars[1].c_str()); + const int key1 = CAST_S32(MouseButton::LEFT); + const int key2 = CAST_S32(MouseButton::MIDDLE); + const int key = atoi(pars[2].c_str()); + if (key < key1 || key > key2) + return false; + guiInput->simulateMouseClick(x, + y, + static_cast(key)); + return true; +} + +impHandler(sendChars) +{ + if (guiInput == nullptr) + return false; + + const std::string args = event.args; + if (args.empty()) + return false; + + const size_t sz = args.size(); + for (size_t f = 0; f < sz; f ++) + { + guiInput->simulateKey(CAST_S32(args[f]), + InputAction::NO_VALUE); + } + + return true; +} + +} // namespace Actions diff --git a/src/progs/manaverse/actions/commands.cpp b/src/progs/manaverse/actions/commands.cpp new file mode 100644 index 000000000..3f23fe5e3 --- /dev/null +++ b/src/progs/manaverse/actions/commands.cpp @@ -0,0 +1,2225 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/commands.h" + +#include "actormanager.h" +#include "configuration.h" +#include "game.h" +#include "party.h" + +#include "actions/actiondef.h" + +#include "being/flooritem.h" +#include "being/localplayer.h" +#include "being/playerrelations.h" +#include "being/homunculusinfo.h" +#include "being/playerinfo.h" + +#include "const/resources/skill.h" + +#include "gui/viewport.h" + +#include "gui/popups/popupmenu.h" + +#include "gui/shortcut/emoteshortcut.h" +#include "gui/shortcut/itemshortcut.h" + +#include "gui/windows/mailwindow.h" + +#include "gui/windows/chatwindow.h" +#include "gui/windows/inventorywindow.h" +#include "gui/windows/npcdialog.h" +#include "gui/windows/outfitwindow.h" +#include "gui/windows/shortcutwindow.h" +#include "gui/windows/skilldialog.h" +#include "gui/windows/socialwindow.h" + +#include "gui/widgets/tabs/chat/whispertab.h" + +#include "input/inputactionoperators.h" + +#include "listeners/inputactionreplaylistener.h" + +#include "net/adminhandler.h" +#include "net/chathandler.h" +#include "net/guildhandler.h" +#include "net/familyhandler.h" +#include "net/homunculushandler.h" +#include "net/mail2handler.h" +#include "net/mailhandler.h" +#include "net/net.h" +#include "net/npchandler.h" +#include "net/partyhandler.h" +#include "net/serverfeatures.h" + +#include "resources/chatobject.h" + +#include "resources/db/itemdb.h" + +#include "resources/map/map.h" + +#include "resources/skill/skillinfo.h" + +#include "utils/booleanoptions.h" +#include "utils/chatutils.h" +#include "utils/copynpaste.h" +#include "utils/gmfunctions.h" +#include "utils/parameters.h" +#include "utils/process.h" + +#ifdef HAVE_MALLOC_TRIM +#include +#endif + +#include "debug.h" + +namespace Actions +{ + +static std::string getNick(const InputEvent &event) +{ + std::string args = event.args; + if (args.empty()) + { + if (event.tab == nullptr || + event.tab->getType() != ChatTabType::WHISPER) + { + return std::string(); + } + + WhisperTab *const whisper = static_cast(event.tab); + if (whisper->getNick().empty()) + { + // TRANSLATORS: change relation + event.tab->chatLog(_("Please specify a name."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return std::string(); + } + args = whisper->getNick(); + } + return args; +} + +static void reportRelation(const InputEvent &event, + const RelationT &rel, + const std::string &str1, + const std::string &str2) +{ + if (event.tab != nullptr) + { + if (playerRelations.getRelation(event.args) == rel) + { + // TRANSLATORS: unignore command + event.tab->chatLog(str1, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + else + { + // TRANSLATORS: unignore command + event.tab->chatLog(str2, + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + } +} + +static void changeRelation(const InputEvent &event, + const RelationT relation, + const std::string &relationText) +{ + std::string args = getNick(event); + if (args.empty()) + return; + + if (playerRelations.getRelation(args) == relation) + { + if (event.tab != nullptr) + { + // TRANSLATORS: change relation + event.tab->chatLog(strprintf(_("Player already %s!"), + relationText.c_str()), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return; + } + } + else + { + playerRelations.setRelation(args, relation); + } + + reportRelation(event, + relation, + // TRANSLATORS: change relation + strprintf(_("Player successfully %s!"), relationText.c_str()), + // TRANSLATORS: change relation + strprintf(_("Player could not be %s!"), relationText.c_str())); +} + +impHandler(chatAnnounce) +{ + if (adminHandler != nullptr) + { + adminHandler->announce(event.args); + return true; + } + return false; +} + +impHandler(chatIgnore) +{ + changeRelation(event, Relation::IGNORED, "ignored"); + return true; +} + +impHandler(chatUnignore) +{ + std::string args = getNick(event); + if (args.empty()) + return false; + + const RelationT rel = playerRelations.getRelation(args); + if (rel != Relation::NEUTRAL && rel != Relation::FRIEND) + { + playerRelations.setRelation(args, Relation::NEUTRAL); + } + else + { + if (event.tab != nullptr) + { + // TRANSLATORS: unignore command + event.tab->chatLog(_("Player wasn't ignored!"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; + } + + reportRelation(event, + Relation::NEUTRAL, + // TRANSLATORS: unignore command + _("Player no longer ignored!"), + // TRANSLATORS: unignore command + _("Player could not be unignored!")); + return true; +} + +impHandler(chatErase) +{ + std::string args = getNick(event); + if (args.empty()) + return false; + + if (playerRelations.getRelation(args) == Relation::ERASED) + { + if (event.tab != nullptr) + { + // TRANSLATORS: erase command + event.tab->chatLog(_("Player already erased!"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + return true; + } + playerRelations.setRelation(args, Relation::ERASED); + + reportRelation(event, + Relation::ERASED, + // TRANSLATORS: erase command + _("Player no longer erased!"), + // TRANSLATORS: erase command + _("Player could not be erased!")); + return true; +} + +impHandler(chatFriend) +{ + // TRANSLATORS: adding friend command + changeRelation(event, Relation::FRIEND, _("friend")); + return true; +} + +impHandler(chatDisregard) +{ + // TRANSLATORS: disregard command + changeRelation(event, Relation::DISREGARDED, _("disregarded")); + return true; +} + +impHandler(chatNeutral) +{ + // TRANSLATORS: neutral command + changeRelation(event, Relation::NEUTRAL, _("neutral")); + return true; +} + +impHandler(chatBlackList) +{ + // TRANSLATORS: blacklist command + changeRelation(event, Relation::BLACKLISTED, _("blacklisted")); + return true; +} + +impHandler(chatEnemy) +{ + // TRANSLATORS: enemy command + changeRelation(event, Relation::ENEMY2, _("enemy")); + return true; +} + +impHandler(chatNuke) +{ + if (actorManager == nullptr) + return false; + + const std::string nick = getNick(event); + Being *const being = actorManager->findBeingByName( + nick, ActorType::Player); + if (being == nullptr) + return true; + + actorManager->addBlock(being->getId()); + actorManager->destroy(being); + return true; +} + +impHandler(chatAdd) +{ + if (chatWindow == nullptr) + return false; + + if (event.args.empty()) + return true; + + STD_VECTOR str; + splitToIntVector(str, event.args, ','); + if (str.empty()) + return true; + + int id = str[0]; + if (id == 0) + return true; + + if (ItemDB::exists(id)) + { + const std::string names = ItemDB::getNamesStr(str); + if (!names.empty()) + chatWindow->addItemText(names); + return true; + } + + const FloorItem *const floorItem = actorManager->findItem( + fromInt(id, BeingId)); + + if (floorItem != nullptr) + { + str[0] = floorItem->getItemId(); + const std::string names = ItemDB::getNamesStr(str); + chatWindow->addItemText(names); + } + return true; +} + +impHandler0(present) +{ + if (chatWindow != nullptr) + { + chatWindow->doPresent(); + return true; + } + return false; +} + +impHandler0(printAll) +{ + if (actorManager != nullptr) + { + actorManager->printAllToChat(); + return true; + } + return false; +} + +impHandler(move) +{ + int x = 0; + int y = 0; + + if ((localPlayer != nullptr) && parse2Int(event.args, x, y)) + { + localPlayer->setDestination(x, y); + return true; + } + return false; +} + +impHandler(setTarget) +{ + if ((actorManager == nullptr) || (localPlayer == nullptr)) + return false; + + Being *const target = actorManager->findNearestByName(event.args, + ActorType::Unknown); + if (target != nullptr) + localPlayer->setTarget(target); + return true; +} + +impHandler(commandOutfit) +{ + if (outfitWindow != nullptr) + { + if (!event.args.empty()) + { + const std::string op = event.args.substr(0, 1); + if (op == "n") + { + outfitWindow->wearNextOutfit(true); + } + else if (op == "p") + { + outfitWindow->wearPreviousOutfit(true); + } + else + { + outfitWindow->wearOutfit(atoi(event.args.c_str()) - 1, + false, true); + } + } + else + { + outfitWindow->wearOutfit(atoi(event.args.c_str()) - 1, + false, true); + } + return true; + } + return false; +} + +impHandler(commandEmote) +{ + LocalPlayer::emote(CAST_U8(atoi(event.args.c_str()))); + return true; +} + +impHandler(awayMessage) +{ + if (localPlayer != nullptr) + { + localPlayer->setAway(event.args); + return true; + } + return false; +} + +impHandler(pseudoAway) +{ + if (localPlayer != nullptr) + { + LocalPlayer::setPseudoAway(event.args); + localPlayer->updateStatus(); + return true; + } + return false; +} + +impHandler(follow) +{ + if (localPlayer == nullptr) + return false; + + if (!features.getBoolValue("allowFollow")) + return false; + + if (!event.args.empty()) + { + localPlayer->setFollow(event.args); + } + else if (event.tab != nullptr && + event.tab->getType() == ChatTabType::WHISPER) + { + localPlayer->setFollow(static_cast(event.tab)->getNick()); + } + else + { + const Being *const being = localPlayer->getTarget(); + if (being != nullptr) + localPlayer->setFollow(being->getName()); + } + return true; +} + +impHandler(navigate) +{ + if ((localPlayer == nullptr) || + !localPlayer->canMove()) + { + return false; + } + + int x = 0; + int y = 0; + + if (parse2Int(event.args, x, y)) + localPlayer->navigateTo(x, y); + else + localPlayer->navigateClean(); + return true; +} + +impHandler(navigateTo) +{ + if ((localPlayer == nullptr) || + !localPlayer->canMove()) + { + return false; + } + + const std::string args = event.args; + if (args.empty()) + return true; + + Being *const being = actorManager->findBeingByName(args, + ActorType::Unknown); + if (being != nullptr) + { + localPlayer->navigateTo(being->getTileX(), being->getTileY()); + } + else if (localPlayer->isInParty()) + { + const Party *const party = localPlayer->getParty(); + if (party != nullptr) + { + const PartyMember *const m = party->getMember(args); + const PartyMember *const o = party->getMember( + localPlayer->getName()); + if (m != nullptr && + o != nullptr && + m->getMap() == o->getMap()) + { + localPlayer->navigateTo(m->getX(), m->getY()); + } + } + } + return true; +} + +impHandler(moveCamera) +{ + int x = 0; + int y = 0; + + if (viewport == nullptr) + return false; + + if (parse2Int(event.args, x, y)) + viewport->moveCameraToPosition(x * mapTileSize, y * mapTileSize); + return true; +} + +impHandler0(restoreCamera) +{ + if (viewport == nullptr) + return false; + + viewport->returnCamera(); + return true; +} + +impHandler(imitation) +{ + if (localPlayer == nullptr) + return false; + + if (!event.args.empty()) + { + localPlayer->setImitate(event.args); + } + else if (event.tab != nullptr && + event.tab->getType() == ChatTabType::WHISPER) + { + localPlayer->setImitate(static_cast( + event.tab)->getNick()); + } + else + { + localPlayer->setImitate(""); + } + return true; +} + +impHandler(sendMail) +{ +#ifdef TMWA_SUPPORT + const ServerTypeT type = Net::getNetworkType(); + if (type == ServerType::EATHENA || type == ServerType::EVOL2) +#endif // TMWA_SUPPORT + { + std::string name; + std::string text; + + if (parse2Str(event.args, name, text)) + { + if (settings.enableNewMailSystem) + { + mail2Handler->queueCheckName(MailQueueType::SendMail, + name, + // TRANSLATORS: quick mail message caption + _("Quick message"), + text, + 0); + } + else + { + // TRANSLATORS: quick mail message caption + mailHandler->send(name, _("Quick message"), text); + } + } + } +#ifdef TMWA_SUPPORT + else if (serverConfig.getBoolValue("enableManaMarketBot")) + { + chatHandler->privateMessage("ManaMarket", "!mail " + event.args); + return true; + } +#endif // TMWA_SUPPORT + + return false; +} + +impHandler(info) +{ + if (event.tab == nullptr || + localPlayer == nullptr || + Net::getNetworkType() == ServerType::TMWATHENA) + { + return false; + } + + if (guildHandler != nullptr && + event.tab->getType() == ChatTabType::GUILD) + { + const Guild *const guild = localPlayer->getGuild(); + if (guild != nullptr) + guildHandler->info(); + } + return true; +} + +impHandler(wait) +{ + if (localPlayer != nullptr) + { + localPlayer->waitFor(event.args); + return true; + } + return false; +} + +impHandler(addPriorityAttack) +{ + if ((actorManager == nullptr) || + actorManager->isInPriorityAttackList(event.args)) + { + return false; + } + + actorManager->removeAttackMob(event.args); + actorManager->addPriorityAttackMob(event.args); + + if (socialWindow != nullptr) + socialWindow->updateAttackFilter(); + return true; +} + +impHandler(addAttack) +{ + if (actorManager == nullptr) + return false; + + actorManager->removeAttackMob(event.args); + actorManager->addAttackMob(event.args); + + if (socialWindow != nullptr) + socialWindow->updateAttackFilter(); + return true; +} + +impHandler(removeAttack) +{ + if (actorManager == nullptr) + return false; + + if (event.args.empty()) + { + if (actorManager->isInAttackList(event.args)) + { + actorManager->removeAttackMob(event.args); + actorManager->addIgnoreAttackMob(event.args); + } + else + { + actorManager->removeAttackMob(event.args); + actorManager->addAttackMob(event.args); + } + } + else + { + actorManager->removeAttackMob(event.args); + } + + + if (socialWindow != nullptr) + socialWindow->updateAttackFilter(); + return true; +} + +impHandler(addIgnoreAttack) +{ + if (actorManager == nullptr) + return false; + + actorManager->removeAttackMob(event.args); + actorManager->addIgnoreAttackMob(event.args); + + if (socialWindow != nullptr) + socialWindow->updateAttackFilter(); + return true; +} + +impHandler(setDrop) +{ + GameModifiers::setQuickDropCounter(atoi(event.args.c_str())); + return true; +} + +impHandler(url) +{ + if (event.tab != nullptr) + { + std::string url1 = event.args; + if (!strStartWith(url1, "http") && !strStartWith(url1, "ftp") && + !strStartWith(url1, "?")) + url1 = "http://" + url1; + std::string str(strprintf("[@@%s |%s@@]", + url1.c_str(), event.args.c_str())); + outStringNormal(event.tab, str, str); + return true; + } + return false; +} + +impHandler(openUrl) +{ + std::string url = event.args; + if (!strStartWith(url, "http") && !strStartWith(url, "ftp")) + url = "http://" + url; + openBrowser(url); + return true; +} + +impHandler(execute) +{ + const size_t idx = event.args.find(' '); + std::string name; + std::string params; + if (idx == std::string::npos) + { + name = event.args; + } + else + { + name = event.args.substr(0, idx); + params = event.args.substr(idx + 1); + } + execFile(name, name, params, ""); + return true; +} + +impHandler(enableHighlight) +{ + if (event.tab != nullptr) + { + event.tab->setAllowHighlight(true); + if (chatWindow != nullptr) + { + chatWindow->saveState(); + return true; + } + } + return false; +} + +impHandler(disableHighlight) +{ + if (event.tab != nullptr) + { + event.tab->setAllowHighlight(false); + if (chatWindow != nullptr) + { + chatWindow->saveState(); + return true; + } + } + return false; +} + +impHandler(dontRemoveName) +{ + if (event.tab != nullptr) + { + event.tab->setRemoveNames(false); + if (chatWindow != nullptr) + { + chatWindow->saveState(); + return true; + } + } + return false; +} + +impHandler(removeName) +{ + if (event.tab != nullptr) + { + event.tab->setRemoveNames(true); + if (chatWindow != nullptr) + { + chatWindow->saveState(); + return true; + } + } + return false; +} + +impHandler(disableAway) +{ + if (event.tab != nullptr) + { + event.tab->setNoAway(true); + if (chatWindow != nullptr) + { + chatWindow->saveState(); + return true; + } + } + return false; +} + +impHandler(enableAway) +{ + if (event.tab != nullptr) + { + event.tab->setNoAway(false); + if (chatWindow != nullptr) + { + chatWindow->saveState(); + return true; + } + } + return false; +} + +impHandler(testParticle) +{ + if (localPlayer != nullptr) + { + localPlayer->setTestParticle(event.args, true); + return true; + } + return false; +} + +impHandler(talkRaw) +{ + if (chatHandler != nullptr) + { + chatHandler->talkRaw(event.args); + return true; + } + return false; +} + +impHandler(gm) +{ + if (chatHandler != nullptr) + { + Gm::runCommand("wgm", event.args); + return true; + } + return false; +} + +impHandler(hack) +{ + if (chatHandler != nullptr) + { + chatHandler->sendRaw(event.args); + return true; + } + return false; +} + +impHandler(debugSpawn) +{ + if (localPlayer == nullptr) + return false; + int cnt = atoi(event.args.c_str()); + if (cnt < 1) + cnt = 1; + const int half = cnt / 2; + const Map *const map = localPlayer->getMap(); + int x1 = -half; + if (x1 < 0) + x1 = 0; + int y1 = x1; + int x2 = cnt - half; + if (x2 > map->getWidth()) + x2 = map->getWidth(); + int y2 = x2; + + for (int x = x1; x < x2; x ++) + { + for (int y = y1; y < y2; y ++) + ActorManager::cloneBeing(localPlayer, x, y, cnt); + } + return true; +} + +impHandler(serverIgnoreWhisper) +{ + std::string args = getNick(event); + if (args.empty()) + return false; + + if (chatHandler != nullptr) + { + chatHandler->ignore(args); + return true; + } + return false; +} + +impHandler(serverUnIgnoreWhisper) +{ + std::string args = getNick(event); + if (args.empty()) + return false; + + if (chatHandler != nullptr) + { + chatHandler->unIgnore(args); + return true; + } + return false; +} + +impHandler(setHomunculusName) +{ + const std::string args = event.args; + if (args.empty()) + { + const HomunculusInfo *const info = PlayerInfo::getHomunculus(); + if (info != nullptr) + { + // TRANSLATORS: dialog header + inputActionReplayListener.openDialog(_("Rename your homun"), + info->name, + InputAction::HOMUNCULUS_SET_NAME); + } + return false; + } + + if (homunculusHandler != nullptr) + { + homunculusHandler->setName(args); + return true; + } + return false; +} + +impHandler0(fireHomunculus) +{ + if (homunculusHandler != nullptr) + { + homunculusHandler->fire(); + return true; + } + return false; +} + +impHandler0(leaveParty) +{ + if (partyHandler != nullptr) + { + partyHandler->leave(); + return true; + } + return false; +} + +impHandler0(leaveGuild) +{ + if ((guildHandler != nullptr) && (localPlayer != nullptr)) + { + const Guild *const guild = localPlayer->getGuild(); + if (guild != nullptr) + guildHandler->leave(guild->getId()); + return true; + } + return false; +} + +impHandler(warp) +{ + int x = 0; + int y = 0; + + if ((adminHandler != nullptr) && + (Game::instance() != nullptr) && + parse2Int(event.args, x, y)) + { + adminHandler->warp(Game::instance()->getCurrentMapName(), + x, y); + return true; + } + return false; +} + +impHandler(homunTalk) +{ + if ((serverFeatures == nullptr) || !serverFeatures->haveTalkPet()) + return false; + + std::string args = event.args; + if (findCutFirst(args, "/me ")) + args = textToMe(args); + if (homunculusHandler != nullptr) + { + homunculusHandler->talk(args); + return true; + } + return false; +} + +impHandler(homunEmote) +{ + if ((serverFeatures == nullptr) || !serverFeatures->haveTalkPet()) + return false; + + if ((homunculusHandler != nullptr) && + event.action >= InputAction::HOMUN_EMOTE_1 && + event.action <= InputAction::HOMUN_EMOTE_48) + { + if (emoteShortcut != nullptr) + { + const int emotion = event.action - InputAction::HOMUN_EMOTE_1; + homunculusHandler->emote(emoteShortcut->getEmote(emotion)); + } + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + + return false; +} + +impHandler(commandHomunEmote) +{ + if ((serverFeatures == nullptr) || !serverFeatures->haveTalkPet()) + return false; + + if (homunculusHandler != nullptr) + { + homunculusHandler->emote(CAST_U8( + atoi(event.args.c_str()))); + return true; + } + return false; +} + +impHandler(createPublicChatRoom) +{ + if ((chatHandler == nullptr) || event.args.empty()) + return false; + chatHandler->createChatRoom(event.args, "", 100, true); + return true; +} + +impHandler(joinChatRoom) +{ + if (chatHandler == nullptr) + return false; + const std::string args = event.args; + if (args.empty()) + return false; + ChatObject *const chat = ChatObject::findByName(args); + if (chat == nullptr) + return false; + chatHandler->joinChat(chat, ""); + return true; +} + +impHandler0(leaveChatRoom) +{ + if (chatHandler != nullptr) + { + chatHandler->leaveChatRoom(); + return true; + } + return false; +} + +impHandler(confSet) +{ + std::string name; + std::string val; + + if (parse2Str(event.args, name, val)) + { + config.setValue(name, val); + return true; + } + return false; +} + +impHandler(serverConfSet) +{ + std::string name; + std::string val; + + if (parse2Str(event.args, name, val)) + { + serverConfig.setValue(name, val); + return true; + } + return false; +} + +impHandler(confGet) +{ + const std::string args = event.args; + if (args.empty()) + return false; + + // TRANSLATORS: result from command /confget + const std::string str = strprintf(_("Config value: %s"), + config.getStringValue(args).c_str()); + outStringNormal(event.tab, str, str); + return true; +} + +impHandler(serverConfGet) +{ + const std::string args = event.args; + if (args.empty()) + return false; + + // TRANSLATORS: result from command /serverconfget + const std::string str = strprintf(_("Server config value: %s"), + serverConfig.getStringValue(args).c_str()); + outStringNormal(event.tab, str, str); + return true; +} + +impHandler(slide) +{ + int x = 0; + int y = 0; + + if ((adminHandler != nullptr) && parse2Int(event.args, x, y)) + { + adminHandler->slide(x, y); + return true; + } + return false; +} + +impHandler(selectSkillLevel) +{ + int skill = 0; + int level = 0; + + if ((skillDialog != nullptr) && parse2Int(event.args, skill, level)) + { + skillDialog->selectSkillLevel(skill, level); + return true; + } + return false; +} + +impHandler(skill) +{ + StringVect vect; + splitToStringVector(vect, event.args, ' '); + const int sz = CAST_S32(vect.size()); + if (sz < 1) + return true; + const int skillId = atoi(vect[0].c_str()); + int level = 0; + std::string text; + if (sz > 1) + { + level = atoi(vect[1].c_str()); + if (sz > 2) + text = vect[2]; + } + // +++ add here also cast type and offsets + if (text.empty()) + { + SkillDialog::useSkill(skillId, + AutoTarget_true, + level, + false, + "", + CastType::Default, + 0, + 0); + } + else + { + SkillDialog::useSkill(skillId, + AutoTarget_true, + level, + true, + text, + CastType::Default, + 0, + 0); + } + return true; +} + +impHandler(craft) +{ + const std::string args = event.args; + if (args.empty() || (inventoryWindow == nullptr)) + return false; + + inventoryWindow->moveItemToCraft(atoi(args.c_str())); + return true; +} + +impHandler(npcClipboard) +{ + if (npcHandler != nullptr) + { + int x = 0; + int y = 0; + + NpcDialog *const dialog = npcHandler->getCurrentNpcDialog(); + + if ((dialog != nullptr) && parse2Int(event.args, x, y)) + { + dialog->copyToClipboard(x, y); + return true; + } + } + return false; +} + +impHandler(clipboardCopy) +{ + const std::string args = event.args; + if (args.empty()) + return false; + sendBuffer(args); + return true; +} + +impHandler(addPickup) +{ + if (actorManager != nullptr) + { + actorManager->removePickupItem(event.args); + actorManager->addPickupItem(event.args); + if (socialWindow != nullptr) + socialWindow->updatePickupFilter(); + return true; + } + return false; +} + +impHandler(removePickup) +{ + if (actorManager != nullptr) + { + if (event.args.empty()) + { // default pickup manipulation + if (actorManager->checkDefaultPickup()) + { + actorManager->removePickupItem(event.args); + actorManager->addIgnorePickupItem(event.args); + } + else + { + actorManager->removePickupItem(event.args); + actorManager->addPickupItem(event.args); + } + } + else + { // any other pickups + actorManager->removePickupItem(event.args); + } + if (socialWindow != nullptr) + socialWindow->updatePickupFilter(); + return true; + } + return false; +} + +impHandler(ignorePickup) +{ + if (actorManager != nullptr) + { + actorManager->removePickupItem(event.args); + actorManager->addIgnorePickupItem(event.args); + if (socialWindow != nullptr) + socialWindow->updatePickupFilter(); + return true; + } + return false; +} + +impHandler(monsterInfo) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->monsterInfo(args); + return true; +} + +impHandler(itemInfo) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->itemInfo(args); + return true; +} + +impHandler(whoDrops) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->whoDrops(args); + return true; +} + +impHandler(mobSearch) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->mobSearch(args); + return true; +} + +impHandler(mobSpawnSearch) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->mobSpawnSearch(args); + return true; +} + +impHandler(playerGmCommands) +{ + adminHandler->playerGmCommands(event.args); + return true; +} + +impHandler(playerCharGmCommands) +{ + adminHandler->playerCharGmCommands(event.args); + return true; +} + +impHandler(commandShowLevel) +{ + adminHandler->showLevel(event.args); + return true; +} + +impHandler(commandShowStats) +{ + adminHandler->showStats(event.args); + return true; +} + +impHandler(commandShowStorage) +{ + adminHandler->showStorageList(event.args); + return true; +} + +impHandler(commandShowCart) +{ + adminHandler->showCartList(event.args); + return true; +} + +impHandler(commandShowInventory) +{ + adminHandler->showInventoryList(event.args); + return true; +} + +impHandler(locatePlayer) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->locatePlayer(args); + return true; +} + +impHandler(commandShowAccountInfo) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->showAccountInfo(args); + return true; +} + +impHandler(commandSpawn) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->spawn(args); + return true; +} + +impHandler(commandSpawnSlave) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->spawnSlave(args); + return true; +} + +impHandler(commandSpawnClone) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->spawnClone(args); + return true; +} + +impHandler(commandSpawnSlaveClone) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->spawnSlaveClone(args); + return true; +} + +impHandler(commandSpawnEvilClone) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->spawnEvilClone(args); + return true; +} + +impHandler(commandSavePosition) +{ + adminHandler->savePosition(event.args); + return true; +} + +impHandler(commandLoadPosition) +{ + adminHandler->loadPosition(event.args); + return true; +} + +impHandler(commandRandomWarp) +{ + adminHandler->randomWarp(event.args); + return true; +} + +impHandler(commandGotoNpc) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->gotoNpc(args); + return true; +} + +impHandler(commandGotoPc) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->gotoName(args); + return true; +} + +impHandler(commandRecallPc) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->recallName(args); + return true; +} + +impHandler(commandIpCheck) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->ipcheckName(args); + return true; +} + +impHandler(commandKiller) +{ + adminHandler->killer(event.args); + return true; +} + +impHandler(commandKillable) +{ + adminHandler->killable(event.args); + return true; +} + +impHandler(commandHeal) +{ + adminHandler->heal(event.args); + return true; +} + +impHandler(commandAlive) +{ + adminHandler->alive(event.args); + return true; +} + +impHandler(commandDisguise) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->disguise(args); + return true; +} + +impHandler(commandImmortal) +{ + adminHandler->immortal(event.args); + return true; +} + +impHandler(commandHide) +{ + adminHandler->hide(event.args); + return true; +} + +impHandler(commandNuke) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->nuke(args); + return true; +} + +impHandler(commandKill) +{ + adminHandler->kill(event.args); + return true; +} + +impHandler(commandJail) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->jail(args); + return true; +} + +impHandler(commandUnjail) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->unjail(args); + return true; +} + +impHandler(commandNpcMove) +{ + const std::string args = event.args; + if (args.empty()) + return false; + StringVect pars; + if (!splitParameters(pars, args, " ,", '\"')) + return false; + + if (pars.size() != 3) + return false; + + adminHandler->npcMove(pars[0], + atoi(pars[1].c_str()), + atoi(pars[2].c_str())); + return true; +} + +impHandler(commandNpcHide) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->hideNpc(args); + return true; +} + +impHandler(commandNpcShow) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->showNpc(args); + return true; +} + +impHandler(commandChangePartyLeader) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->changePartyLeader(args); + return true; +} + +impHandler(commandPartyRecall) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->partyRecall(args); + return true; +} + +impHandler(commandBreakGuild) +{ + adminHandler->breakGuild(event.args); + return true; +} + +impHandler(commandGuildRecall) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->guildRecall(args); + return true; +} + +impHandler(mailTo) +{ + if (mailWindow == nullptr) + return false; + const std::string args = event.args; + if (settings.enableNewMailSystem) + { + mail2Handler->queueCheckName(MailQueueType::EditMail, + args, + std::string(), + std::string(), + 0); + } + else + { + MailWindow::createMail(args); + } + return true; +} + +impHandler(adoptChild) +{ + const std::string nick = getNick(event); + Being *const being = actorManager->findBeingByName( + nick, ActorType::Player); + if (being == nullptr) + return true; + familyHandler->askForChild(being); + return true; +} + +impHandler(showSkillLevels) +{ + const std::string args = event.args; + if (args.empty()) + return false; + const SkillInfo *restrict const skill = skillDialog->getSkill( + atoi(args.c_str())); + if (skill == nullptr) + return false; + popupMenu->showSkillLevelPopup(skill); + return true; +} + +impHandler(showSkillType) +{ + const std::string args = event.args; + if (args.empty()) + return false; + const SkillInfo *restrict const skill = skillDialog->getSkill( + atoi(args.c_str())); + if (skill == nullptr) + return false; + popupMenu->showSkillTypePopup(skill); + return true; +} + +impHandler(selectSkillType) +{ + int skill = 0; + int type = 0; + + if ((skillDialog != nullptr) && parse2Int(event.args, skill, type)) + { + skillDialog->selectSkillCastType(skill, + static_cast(type)); + return true; + } + return false; +} + +impHandler(showSkillOffsetX) +{ + const std::string args = event.args; + if (args.empty()) + return false; + const SkillInfo *restrict const skill = skillDialog->getSkill( + atoi(args.c_str())); + if (skill == nullptr) + return false; + popupMenu->showSkillOffsetPopup(skill, true); + return true; +} + +impHandler(showSkillOffsetY) +{ + const std::string args = event.args; + if (args.empty()) + return false; + const SkillInfo *restrict const skill = skillDialog->getSkill( + atoi(args.c_str())); + if (skill == nullptr) + return false; + popupMenu->showSkillOffsetPopup(skill, false); + return true; +} + +impHandler(setSkillOffsetX) +{ + int skill = 0; + int offset = 0; + + if ((skillDialog != nullptr) && parse2Int(event.args, skill, offset)) + { + skillDialog->setSkillOffsetX(skill, offset); + return true; + } + return false; +} + +impHandler(setSkillOffsetY) +{ + int skill = 0; + int offset = 0; + + if ((skillDialog != nullptr) && parse2Int(event.args, skill, offset)) + { + skillDialog->setSkillOffsetY(skill, offset); + return true; + } + return false; +} + +impHandler(partyItemShare) +{ + if (localPlayer == nullptr) + return false; + + if (localPlayer->isInParty() == false) + return true; + + ChatTab *tab = event.tab; + if (tab == nullptr) + tab = localChatTab; + if (tab == nullptr) + return true; + + const std::string args = event.args; + if (args.empty()) + { + switch (partyHandler->getShareItems()) + { + case PartyShare::YES: + // TRANSLATORS: chat message + tab->chatLog(_("Item sharing enabled."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::NO: + // TRANSLATORS: chat message + tab->chatLog(_("Item sharing disabled."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::NOT_POSSIBLE: + // TRANSLATORS: chat message + tab->chatLog(_("Item sharing not possible."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::UNKNOWN: + // TRANSLATORS: chat message + tab->chatLog(_("Item sharing unknown."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + default: + break; + } + } + + const signed char opt = parseBoolean(args); + + switch (opt) + { + case 1: + partyHandler->setShareItems( + PartyShare::YES); + break; + case 0: + partyHandler->setShareItems( + PartyShare::NO); + break; + case -1: + tab->chatLog(strprintf(BOOLEAN_OPTIONS, "item"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + break; + default: + break; + } + return true; +} + +impHandler(partyExpShare) +{ + if (localPlayer == nullptr) + return false; + + if (localPlayer->isInParty() == false) + return true; + + ChatTab *tab = event.tab; + if (tab == nullptr) + tab = localChatTab; + if (tab == nullptr) + return true; + + const std::string args = event.args; + if (args.empty()) + { + switch (partyHandler->getShareExperience()) + { + case PartyShare::YES: + // TRANSLATORS: chat message + tab->chatLog(_("Experience sharing enabled."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::NO: + // TRANSLATORS: chat message + tab->chatLog(_("Experience sharing disabled."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::NOT_POSSIBLE: + // TRANSLATORS: chat message + tab->chatLog(_("Experience sharing not possible."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::UNKNOWN: + // TRANSLATORS: chat message + tab->chatLog(_("Experience sharing unknown."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + default: + break; + } + } + + const signed char opt = parseBoolean(args); + + switch (opt) + { + case 1: + partyHandler->setShareExperience( + PartyShare::YES); + break; + case 0: + partyHandler->setShareExperience( + PartyShare::NO); + break; + case -1: + tab->chatLog(strprintf(BOOLEAN_OPTIONS, "exp"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + break; + default: + break; + } + return true; +} + +impHandler(partyAutoItemShare) +{ + if (localPlayer == nullptr) + return false; + + if (localPlayer->isInParty() == false) + return true; + + ChatTab *tab = event.tab; + if (tab == nullptr) + tab = localChatTab; + if (tab == nullptr) + return true; + + const std::string args = event.args; + if (args.empty()) + { + switch (partyHandler->getShareAutoItems()) + { + case PartyShare::YES: + // TRANSLATORS: chat message + tab->chatLog(_("Auto item sharing enabled."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::NO: + // TRANSLATORS: chat message + tab->chatLog(_("Auto item sharing disabled."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::NOT_POSSIBLE: + // TRANSLATORS: chat message + tab->chatLog(_("Auto item sharing not possible."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + case PartyShare::UNKNOWN: + // TRANSLATORS: chat message + tab->chatLog(_("Auto item sharing unknown."), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + return true; + default: + break; + } + } + + const signed char opt = parseBoolean(args); + + switch (opt) + { + case 1: + partyHandler->setShareAutoItems( + PartyShare::YES); + break; + case 0: + partyHandler->setShareAutoItems( + PartyShare::NO); + break; + case -1: + tab->chatLog(strprintf(BOOLEAN_OPTIONS, "item"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + break; + default: + break; + } + return true; +} + +impHandler0(outfitToChat) +{ + if ((outfitWindow == nullptr) || (chatWindow == nullptr)) + return false; + + const std::string str = outfitWindow->getOutfitString(); + if (!str.empty()) + chatWindow->addInputText(str, true); + return true; +} + +impHandler0(outfitClear) +{ + if (outfitWindow == nullptr) + return false; + + outfitWindow->clearCurrentOutfit(); + return true; +} + +impHandler(moveAttackUp) +{ + if (actorManager == nullptr) + return false; + const std::string args = event.args; + const int idx = actorManager->getAttackMobIndex(args); + if (idx > 0) + { + std::list mobs + = actorManager->getAttackMobs(); + std::list::iterator it = mobs.begin(); + std::list::iterator it2 = it; + while (it != mobs.end()) + { + if (*it == args) + { + -- it2; + mobs.splice(it2, mobs, it); + actorManager->setAttackMobs(mobs); + actorManager->rebuildAttackMobs(); + break; + } + ++ it; + ++ it2; + } + + if (socialWindow != nullptr) + socialWindow->updateAttackFilter(); + return true; + } + return false; +} + +impHandler(moveAttackDown) +{ + if (actorManager == nullptr) + return false; + const std::string args = event.args; + const int idx = actorManager->getAttackMobIndex(args); + const int size = actorManager->getAttackMobsSize(); + if (idx + 1 < size) + { + std::list mobs + = actorManager->getAttackMobs(); + std::list::iterator it = mobs.begin(); + std::list::iterator it2 = it; + while (it != mobs.end()) + { + if (*it == args) + { + ++ it2; + if (it2 == mobs.end()) + break; + + mobs.splice(it, mobs, it2); + actorManager->setAttackMobs(mobs); + actorManager->rebuildAttackMobs(); + break; + } + ++ it; + ++ it2; + } + + if (socialWindow != nullptr) + socialWindow->updateAttackFilter(); + return true; + } + return false; +} + +impHandler(movePriorityAttackUp) +{ + if (actorManager == nullptr) + return false; + const std::string args = event.args; + const int idx = actorManager-> + getPriorityAttackMobIndex(args); + if (idx > 0) + { + std::list mobs + = actorManager->getPriorityAttackMobs(); + std::list::iterator it = mobs.begin(); + std::list::iterator it2 = it; + while (it != mobs.end()) + { + if (*it == args) + { + -- it2; + mobs.splice(it2, mobs, it); + actorManager->setPriorityAttackMobs(mobs); + actorManager->rebuildPriorityAttackMobs(); + break; + } + ++ it; + ++ it2; + } + + if (socialWindow != nullptr) + socialWindow->updateAttackFilter(); + return true; + } + return false; +} + +impHandler(movePriorityAttackDown) +{ + if (actorManager == nullptr) + return false; + const std::string args = event.args; + const int idx = actorManager + ->getPriorityAttackMobIndex(args); + const int size = actorManager->getPriorityAttackMobsSize(); + if (idx + 1 < size) + { + std::list mobs + = actorManager->getPriorityAttackMobs(); + std::list::iterator it = mobs.begin(); + std::list::iterator it2 = it; + while (it != mobs.end()) + { + if (*it == args) + { + ++ it2; + if (it2 == mobs.end()) + break; + + mobs.splice(it, mobs, it2); + actorManager->setPriorityAttackMobs(mobs); + actorManager->rebuildPriorityAttackMobs(); + break; + } + ++ it; + ++ it2; + } + + if (socialWindow != nullptr) + socialWindow->updateAttackFilter(); + return true; + } + return false; +} + +impHandler(addSkillShortcut) +{ + const std::string args = event.args; + if (args.empty() || + itemShortcutWindow == nullptr) + { + return false; + } + const SkillInfo *restrict const skill = skillDialog->getSkill( + atoi(args.c_str())); + if (skill == nullptr) + return false; + + const int num = itemShortcutWindow->getTabIndex(); + if (num < 0 || + num >= CAST_S32(SHORTCUT_TABS) || + num == CAST_S32(SHORTCUT_AUTO_TAB)) + { + return false; + } + + ItemShortcut *const selShortcut = itemShortcut[num]; + const size_t index = selShortcut->getFreeIndex(); + if (index == SHORTCUT_ITEMS) + return true; + + selShortcut->setItem(index, + skill->id + SKILL_MIN_ID, + fromInt(skill->customSelectedLevel, ItemColor)); + selShortcut->setItemData(index, + skill->toDataStr()); + +// popupMenu->showSkillLevelPopup(skill); + return true; +} + +impHandler0(trimMemory) +{ +#ifdef HAVE_MALLOC_TRIM + malloc_trim(0); +#else + // TRANSLATORS: chat error about trim command + localChatTab->chatLog(_("Trim memory not supported"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); +#endif + return true; +} + +} // namespace Actions diff --git a/src/progs/manaverse/actions/move.cpp b/src/progs/manaverse/actions/move.cpp new file mode 100644 index 000000000..38eff9403 --- /dev/null +++ b/src/progs/manaverse/actions/move.cpp @@ -0,0 +1,281 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/move.h" + +#include "game.h" + +#include "actions/actiondef.h" +#include "actions/pets.h" + +#include "being/crazymoves.h" +#include "being/localplayer.h" + +#include "enums/being/beingdirection.h" + +#include "gui/windows/socialwindow.h" +#include "gui/windows/npcdialog.h" +#include "gui/windows/outfitwindow.h" + +#include "gui/popups/popupmenu.h" + +#include "input/inputactionoperators.h" + +#include "net/playerhandler.h" + +#include "debug.h" + +namespace Actions +{ + +static bool closeMoveNpcDialog(bool focus) +{ + NpcDialog *const dialog = NpcDialog::getActive(); + if (dialog != nullptr) + { + if (dialog->isCloseState() != 0) + { + dialog->closeDialog(); + return true; + } + else if (focus) + { + dialog->refocus(); + } + } + return false; +} + +impHandler(moveUp) +{ + if (inputManager.isActionActive(InputAction::EMOTE)) + return directUp(event); + else if (inputManager.isActionActive(InputAction::PET_EMOTE)) + return petDirectUp(event); + else if (inputManager.isActionActive(InputAction::STOP_ATTACK)) + return petMoveUp(event); + else if (!localPlayer->canMove()) + return directUp(event); + if (popupMenu->isPopupVisible()) + { + popupMenu->moveUp(); + return true; + } + return closeMoveNpcDialog(false); +} + +impHandler(moveDown) +{ + if (inputManager.isActionActive(InputAction::EMOTE)) + return directDown(event); + else if (inputManager.isActionActive(InputAction::PET_EMOTE)) + return petDirectDown(event); + else if (inputManager.isActionActive(InputAction::STOP_ATTACK)) + return petMoveDown(event); + else if (!localPlayer->canMove()) + return directDown(event); + if (popupMenu->isPopupVisible()) + { + popupMenu->moveDown(); + return true; + } + return closeMoveNpcDialog(false); +} + +impHandler(moveLeft) +{ + if (outfitWindow != nullptr && + inputManager.isActionActive(InputAction::WEAR_OUTFIT)) + { + outfitWindow->wearPreviousOutfit(false); + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + if (inputManager.isActionActive(InputAction::EMOTE)) + return directLeft(event); + else if (inputManager.isActionActive(InputAction::PET_EMOTE)) + return petDirectLeft(event); + else if (inputManager.isActionActive(InputAction::STOP_ATTACK)) + return petMoveLeft(event); + else if (!localPlayer->canMove()) + return directLeft(event); + return closeMoveNpcDialog(false); +} + +impHandler(moveRight) +{ + if (outfitWindow != nullptr && + inputManager.isActionActive(InputAction::WEAR_OUTFIT)) + { + outfitWindow->wearNextOutfit(false); + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + if (inputManager.isActionActive(InputAction::EMOTE)) + return directRight(event); + else if (inputManager.isActionActive(InputAction::PET_EMOTE)) + return petDirectRight(event); + else if (inputManager.isActionActive(InputAction::STOP_ATTACK)) + return petMoveRight(event); + else if (!localPlayer->canMove()) + return directRight(event); + return closeMoveNpcDialog(false); +} + +impHandler(moveForward) +{ + if (inputManager.isActionActive(InputAction::EMOTE)) + return directRight(event); + return closeMoveNpcDialog(false); +} + +impHandler(moveToPoint) +{ + const int num = event.action - InputAction::MOVE_TO_POINT_1; + if ((socialWindow != nullptr) && num >= 0) + { + socialWindow->selectPortal(num); + return true; + } + + return false; +} + +impHandler0(crazyMoves) +{ + if (localPlayer != nullptr) + { + ::crazyMoves->crazyMove(); + return true; + } + return false; +} + +impHandler0(moveToTarget) +{ + if (localPlayer != nullptr && + !inputManager.isActionActive(InputAction::TARGET_ATTACK) && + !inputManager.isActionActive(InputAction::ATTACK)) + { + localPlayer->moveToTarget(-1); + return true; + } + return false; +} + +impHandler0(moveToHome) +{ + if (localPlayer != nullptr && + !inputManager.isActionActive(InputAction::TARGET_ATTACK) && + !inputManager.isActionActive(InputAction::ATTACK)) + { + localPlayer->moveToHome(); + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + return false; +} + +impHandler0(directUp) +{ + if (localPlayer != nullptr) + { + if (localPlayer->getDirection() != BeingDirection::UP) + { +// if (PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION)) + { + localPlayer->setDirection(BeingDirection::UP); + if (playerHandler != nullptr) + playerHandler->setDirection(BeingDirection::UP); + } + } + return true; + } + return false; +} + +impHandler0(directDown) +{ + if (localPlayer != nullptr) + { + if (localPlayer->getDirection() != BeingDirection::DOWN) + { +// if (PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION)) + { + localPlayer->setDirection(BeingDirection::DOWN); + if (playerHandler != nullptr) + { + playerHandler->setDirection( + BeingDirection::DOWN); + } + } + } + return true; + } + return false; +} + +impHandler0(directLeft) +{ + if (localPlayer != nullptr) + { + if (localPlayer->getDirection() != BeingDirection::LEFT) + { +// if (PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION)) + { + localPlayer->setDirection(BeingDirection::LEFT); + if (playerHandler != nullptr) + { + playerHandler->setDirection( + BeingDirection::LEFT); + } + } + } + return true; + } + return false; +} + +impHandler0(directRight) +{ + if (localPlayer != nullptr) + { + if (localPlayer->getDirection() != BeingDirection::RIGHT) + { +// if (PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION)) + { + localPlayer->setDirection(BeingDirection::RIGHT); + if (playerHandler != nullptr) + { + playerHandler->setDirection( + BeingDirection::RIGHT); + } + } + } + return true; + } + return false; +} + +} // namespace Actions diff --git a/src/progs/manaverse/actions/pets.cpp b/src/progs/manaverse/actions/pets.cpp new file mode 100644 index 000000000..f4c3823a3 --- /dev/null +++ b/src/progs/manaverse/actions/pets.cpp @@ -0,0 +1,250 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/pets.h" + +#include "actormanager.h" +#include "game.h" + +#include "actions/actiondef.h" + +#include "being/localplayer.h" +#include "being/playerinfo.h" + +#include "enums/being/beingdirection.h" + +#include "input/inputactionoperators.h" + +#include "listeners/inputactionreplaylistener.h" + +#include "gui/shortcut/emoteshortcut.h" + +#include "net/chathandler.h" +#include "net/pethandler.h" +#include "net/serverfeatures.h" + +#include "utils/chatutils.h" +#include "utils/gettext.h" +#include "utils/stringutils.h" + +#include "debug.h" + +namespace Actions +{ + +static const Being *getPet() +{ + const BeingId id = PlayerInfo::getPetBeingId(); + if (id == BeingId_zero) + return nullptr; + return actorManager->findBeing(id); +} + +impHandler(commandEmotePet) +{ + petHandler->emote(CAST_U8(atoi(event.args.c_str()))); + return true; +} + +impHandler(talkPet) +{ + if (!serverFeatures->haveTalkPet()) + return false; + + std::string args = event.args; + if (findCutFirst(args, "/me ")) + args = textToMe(args); + chatHandler->talkPet(args); + return true; +} + +impHandler(setPetName) +{ + const std::string args = event.args; + if (args.empty()) + { + const Being *const pet = getPet(); + if (pet == nullptr) + return false; + // TRANSLATORS: dialog header + inputActionReplayListener.openDialog(_("Rename your pet"), + pet->getName(), + InputAction::PET_SET_NAME); + return false; + } + + petHandler->setName(args); + return true; +} + +impHandler(petEmote) +{ + if (!serverFeatures->haveTalkPet()) + return false; + + if (event.action >= InputAction::PET_EMOTE_1 + && event.action <= InputAction::PET_EMOTE_48) + { + if (emoteShortcut != nullptr) + { + const int emotion = event.action - InputAction::PET_EMOTE_1; + petHandler->emote(emoteShortcut->getEmote(emotion)); + } + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + + return false; +} + +impHandler(catchPet) +{ + if ((localPlayer == nullptr) || (actorManager == nullptr)) + return false; + + Being *target = nullptr; + const std::string args = event.args; + if (!args.empty()) + { + if (args[0] == ':') + { + target = actorManager->findBeing(fromInt(atoi( + args.substr(1).c_str()), BeingId)); + } + else + { + target = actorManager->findNearestByName(args, + ActorType::Unknown); + } + } + + if (target == nullptr) + target = localPlayer->getTarget(); + else + localPlayer->setTarget(target); + if (target != nullptr) + petHandler->catchPet(target); + return true; +} + +impHandler0(petMoveUp) +{ + const Being *const pet = getPet(); + if (pet == nullptr) + return false; + petHandler->move(pet->getTileX(), pet->getTileY() - 1); + return true; +} + +impHandler0(petMoveDown) +{ + const Being *const pet = getPet(); + if (pet == nullptr) + return false; + petHandler->move(pet->getTileX(), pet->getTileY() + 1); + return true; +} + +impHandler0(petMoveLeft) +{ + const Being *const pet = getPet(); + if (pet == nullptr) + return false; + petHandler->move(pet->getTileX() - 1, pet->getTileY()); + return true; +} + +impHandler0(petMoveRight) +{ + const Being *const pet = getPet(); + if (pet == nullptr) + return false; + petHandler->move(pet->getTileX() + 1, pet->getTileY()); + return true; +} + +impHandler0(petDirectUp) +{ + petHandler->setDirection(BeingDirection::UP); + return true; +} + +impHandler0(petDirectDown) +{ + petHandler->setDirection(BeingDirection::DOWN); + return true; +} + +impHandler0(petDirectLeft) +{ + petHandler->setDirection(BeingDirection::LEFT); + return true; +} + +impHandler0(petDirectRight) +{ + petHandler->setDirection(BeingDirection::RIGHT); + return true; +} + +impHandler(petMove) +{ + int x = 0; + int y = 0; + + if (parse2Int(event.args, x, y)) + { + petHandler->move(x, y); + return true; + } + return false; +} + +impHandler0(petFeed) +{ + if (petHandler != nullptr) + petHandler->feed(); + return true; +} + +impHandler0(petDropLoot) +{ + if (petHandler != nullptr) + petHandler->dropLoot(); + return true; +} + +impHandler0(petReturnToEgg) +{ + if (petHandler != nullptr) + petHandler->returnToEgg(); + return true; +} + +impHandler0(petUnequip) +{ + if (petHandler != nullptr) + petHandler->unequip(); + return true; +} + +} // namespace Actions diff --git a/src/progs/manaverse/actions/statusbar.cpp b/src/progs/manaverse/actions/statusbar.cpp new file mode 100644 index 000000000..062d42a53 --- /dev/null +++ b/src/progs/manaverse/actions/statusbar.cpp @@ -0,0 +1,205 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/statusbar.h" + +#include "game.h" +#include "soundmanager.h" + +#include "actions/actiondef.h" + +#include "being/localplayer.h" +#include "being/playerrelation.h" +#include "being/playerrelations.h" + +#include "gui/viewport.h" + +#include "gui/widgets/tabs/chat/chattab.h" + +#include "listeners/updatestatuslistener.h" + +#include "resources/map/map.h" + +#include "utils/gettext.h" + +PRAGMA48(GCC diagnostic push) +PRAGMA48(GCC diagnostic ignored "-Wshadow") +#ifdef ANDROID +#ifndef USE_SDL2 +#include +#endif // USE_SDL2 +#endif // ANDROID +PRAGMA48(GCC diagnostic pop) + +#include "debug.h" + +namespace Actions +{ + +impHandler0(switchQuickDrop) +{ + callYellowBarCond(changeQuickDropCounter); +} + +impHandler0(changeCrazyMove) +{ + callYellowBar(changeCrazyMoveType); +} + +impHandler0(changePickupType) +{ + callYellowBar(changePickUpType); +} + +impHandler0(changeMoveType) +{ + callYellowBar(changeMoveType); +} + +impHandler0(changeAttackWeaponType) +{ + callYellowBar(changeAttackWeaponType); +} + +impHandler0(changeAttackType) +{ + callYellowBar(changeAttackType); +} + +impHandler0(changeTargetingType) +{ + callYellowBar(changeTargetingType); +} + +impHandler0(changeFollowMode) +{ + callYellowBar(changeFollowMode); +} + +impHandler0(changeImitationMode) +{ + callYellowBar(changeImitationMode); +} + +impHandler0(changeMagicAttackType) +{ + callYellowBar(changeMagicAttackType); +} + +impHandler0(changePvpMode) +{ + callYellowBar(changePvpAttackType); +} + +impHandler0(changeMoveToTarget) +{ + callYellowBar(changeMoveToTargetType); +} + +impHandler0(changeGameModifier) +{ + if (localPlayer != nullptr) + { + GameModifiers::changeGameModifiers(false); + return true; + } + return false; +} + +impHandler0(changeAudio) +{ + soundManager.changeAudio(); + if (localPlayer != nullptr) + localPlayer->updateMusic(); + return true; +} + +impHandler0(away) +{ + GameModifiers::changeAwayMode(true); + if (localPlayer != nullptr) + { + localPlayer->updateStatus(); + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + return false; +} + +impHandler0(camera) +{ + if (viewport != nullptr) + { + viewport->toggleCameraMode(); + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + return true; + } + return false; +} + +impHandler0(changeMapMode) +{ + if (viewport != nullptr) + viewport->toggleMapDrawType(); + UpdateStatusListener::distributeEvent(); + if (Game::instance() != nullptr) + { + if (Map *const map = Game::instance()->getCurrentMap()) + map->redrawMap(); + } + return true; +} + +impHandler0(changeTrade) +{ + unsigned int deflt = playerRelations.getDefault(); + if ((deflt & PlayerRelation::TRADE) != 0U) + { + if (localChatTab != nullptr) + { + // TRANSLATORS: disable trades message + localChatTab->chatLog(_("Ignoring incoming trade requests"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + deflt &= ~PlayerRelation::TRADE; + } + else + { + if (localChatTab != nullptr) + { + // TRANSLATORS: enable trades message + localChatTab->chatLog(_("Accepting incoming trade requests"), + ChatMsgType::BY_SERVER, + IgnoreRecord_false, + TryRemoveColors_true); + } + deflt |= PlayerRelation::TRADE; + } + + playerRelations.setDefault(deflt); + return true; +} + +} // namespace Actions diff --git a/src/progs/manaverse/actions/tabs.cpp b/src/progs/manaverse/actions/tabs.cpp new file mode 100644 index 000000000..b5140a2e9 --- /dev/null +++ b/src/progs/manaverse/actions/tabs.cpp @@ -0,0 +1,107 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/tabs.h" + +#include "actions/actiondef.h" + +#include "gui/windows/inventorywindow.h" +#include "gui/windows/socialwindow.h" +#include "gui/windows/shortcutwindow.h" + +#include "debug.h" + +namespace Actions +{ + +impHandler0(prevSocialTab) +{ + if (socialWindow != nullptr) + { + socialWindow->prevTab(); + return true; + } + return false; +} + +impHandler0(nextSocialTab) +{ + if (socialWindow != nullptr) + { + socialWindow->nextTab(); + return true; + } + return false; +} + +impHandler0(nextShortcutsTab) +{ + if (itemShortcutWindow != nullptr) + { + itemShortcutWindow->nextTab(); + return true; + } + return false; +} + +impHandler0(prevShortcutsTab) +{ + if (itemShortcutWindow != nullptr) + { + itemShortcutWindow->prevTab(); + return true; + } + return false; +} + +impHandler0(nextCommandsTab) +{ + if (spellShortcutWindow != nullptr) + { + spellShortcutWindow->nextTab(); + return true; + } + return false; +} + +impHandler0(prevCommandsTab) +{ + if (spellShortcutWindow != nullptr) + { + spellShortcutWindow->prevTab(); + return true; + } + return false; +} + +impHandler0(nextInvTab) +{ + InventoryWindow::nextTab(); + return true; +} + +impHandler0(prevInvTab) +{ + InventoryWindow::prevTab(); + return true; +} + +} // namespace Actions diff --git a/src/progs/manaverse/actions/target.cpp b/src/progs/manaverse/actions/target.cpp new file mode 100644 index 000000000..9b97cf576 --- /dev/null +++ b/src/progs/manaverse/actions/target.cpp @@ -0,0 +1,91 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/target.h" + +#include "actions/actiondef.h" + +#include "being/localplayer.h" + +#include "gui/popups/popupmenu.h" + +#include "debug.h" + +namespace Actions +{ + +static bool setTarget(const ActorTypeT type, const AllowSort allowSort) +{ + if (localPlayer != nullptr) + return localPlayer->setNewTarget(type, allowSort) != nullptr; + return false; +} + +impHandler0(targetPlayer) +{ + return setTarget(ActorType::Player, AllowSort_true); +} + +impHandler0(targetMonster) +{ + return setTarget(ActorType::Monster, AllowSort_true); +} + +impHandler0(targetClosestMonster) +{ + return setTarget(ActorType::Monster, AllowSort_false); +} + +impHandler0(targetNPC) +{ + return setTarget(ActorType::Npc, AllowSort_true); +} + +impHandler0(targetMercenary) +{ + return setTarget(ActorType::Mercenary, AllowSort_true); +} + +impHandler0(targetSkillUnit) +{ + return setTarget(ActorType::SkillUnit, AllowSort_true); +} + +impHandler0(targetPet) +{ + return setTarget(ActorType::Pet, AllowSort_true); +} + +impHandler0(contextMenu) +{ + if (localPlayer == nullptr) + return false; + const Being *const target = localPlayer->getTarget(); + if (target == nullptr) + return true; + + popupMenu->showPopup(target->getPixelX(), + target->getPixelY(), + target); + return true; +} + +} // namespace Actions diff --git a/src/progs/manaverse/actions/windows.cpp b/src/progs/manaverse/actions/windows.cpp new file mode 100644 index 000000000..9f8a68faa --- /dev/null +++ b/src/progs/manaverse/actions/windows.cpp @@ -0,0 +1,393 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-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 "actions/windows.h" + +#include "actormanager.h" +#include "client.h" + +#include "actions/actiondef.h" + +#include "being/localplayer.h" + +#include "gui/dialogsmanager.h" + +#include "gui/windows/bankwindow.h" +#include "gui/windows/clanwindow.h" +#include "gui/windows/skilldialog.h" +#include "gui/windows/socialwindow.h" +#include "gui/windows/statuswindow.h" +#include "gui/windows/questswindow.h" +#include "gui/windows/whoisonline.h" +#include "gui/windows/chatwindow.h" +#include "gui/windows/debugwindow.h" +#include "gui/windows/didyouknowwindow.h" +#include "gui/windows/equipmentwindow.h" +#include "gui/windows/helpwindow.h" +#include "gui/windows/inventorywindow.h" +#include "gui/windows/killstats.h" +#include "gui/windows/mailwindow.h" +#include "gui/windows/minimap.h" +#include "gui/windows/outfitwindow.h" +#include "gui/windows/setupwindow.h" +#include "gui/windows/serverinfowindow.h" +#include "gui/windows/shopwindow.h" +#include "gui/windows/shortcutwindow.h" +#include "gui/windows/updaterwindow.h" + +#include "gui/widgets/createwidget.h" + +#include "gui/widgets/tabs/chat/chattab.h" + +#include "utils/gettext.h" + +#include "net/net.h" + +#include "debug.h" + +namespace Actions +{ + +impHandler0(setupWindowShow) +{ + if (setupWindow != nullptr) + { + if (setupWindow->isWindowVisible()) + { + setupWindow->doCancel(); + } + else + { + setupWindow->setVisible(Visible_true); + setupWindow->requestMoveToTop(); + } + return true; + } + return false; +} + +impHandler0(hideWindows) +{ + if (setupWindow != nullptr) + setupWindow->hideWindows(); + return true; +} + +static bool showHelpPage(const std::string &page, const bool showHide) +{ + if (helpWindow != nullptr) + { + if (showHide && helpWindow->isWindowVisible()) + { + helpWindow->setVisible(Visible_false); + } + else + { + helpWindow->loadHelp(page); + helpWindow->requestMoveToTop(); + } + return true; + } + return false; +} + +impHandler(helpWindowShow) +{ + if ((chatWindow == nullptr) || !chatWindow->isInputFocused()) + return showHelpPage("index", true); + if (event.tab == nullptr) + return showHelpPage("chatcommands", true); + switch (event.tab->getType()) + { + case ChatTabType::PARTY: + return showHelpPage("chatparty", true); + case ChatTabType::GUILD: + return showHelpPage("chatguild", true); + case ChatTabType::WHISPER: + return showHelpPage("chatwhisper", true); + case ChatTabType::DEBUG: + return showHelpPage("chatdebug", true); + case ChatTabType::TRADE: + return showHelpPage("chattrade", true); + case ChatTabType::BATTLE: + return showHelpPage("chatbattle", true); + case ChatTabType::LANG: + return showHelpPage("chatlang", true); + case ChatTabType::GM: + return showHelpPage("chatgm", true); + case ChatTabType::CHANNEL: + return showHelpPage("chatchannel", true); + case ChatTabType::CLAN: + return showHelpPage("chatclan", true); + default: + case ChatTabType::UNKNOWN: + case ChatTabType::INPUT: + return showHelpPage("chatcommands", true); + } +} + +impHandler0(aboutWindowShow) +{ + return showHelpPage("about", false); +} + +static void showHideWindow(Window *const window) +{ + if (window != nullptr) + { + window->setVisible(fromBool( + !window->isWindowVisible(), Visible)); + if (window->isWindowVisible()) + window->requestMoveToTop(); + } +} + +impHandler0(statusWindowShow) +{ + showHideWindow(statusWindow); + return true; +} + +impHandler0(inventoryWindowShow) +{ + showHideWindow(inventoryWindow); + return true; +} + +impHandler0(equipmentWindowShow) +{ + showHideWindow(equipmentWindow); + return true; +} + +impHandler0(skillDialogShow) +{ + showHideWindow(skillDialog); + return true; +} + +impHandler0(minimapWindowShow) +{ + if (minimap != nullptr) + { + minimap->toggle(); + return true; + } + return false; +} + +impHandler0(chatWindowShow) +{ + showHideWindow(chatWindow); + return true; +} + +impHandler0(shortcutWindowShow) +{ + showHideWindow(itemShortcutWindow); + return true; +} + +impHandler0(debugWindowShow) +{ + showHideWindow(debugWindow); + return true; +} + +impHandler0(socialWindowShow) +{ + showHideWindow(socialWindow); + return true; +} + +impHandler0(emoteShortcutWindowShow) +{ + showHideWindow(emoteShortcutWindow); + return true; +} + +impHandler0(outfitWindowShow) +{ + showHideWindow(outfitWindow); + return true; +} + +impHandler0(shopWindowShow) +{ + showHideWindow(shopWindow); + return true; +} + +impHandler0(dropShortcutWindowShow) +{ + showHideWindow(dropShortcutWindow); + return true; +} + +impHandler0(killStatsWindowShow) +{ + showHideWindow(killStats); + return true; +} + +impHandler0(spellShortcutWindowShow) +{ + showHideWindow(spellShortcutWindow); + return true; +} + +impHandler0(whoIsOnlineWindowShow) +{ + showHideWindow(whoIsOnline); + return true; +} + +impHandler0(didYouKnowWindowShow) +{ + showHideWindow(didYouKnowWindow); + return true; +} + +impHandler0(questsWindowShow) +{ + showHideWindow(questsWindow); + return true; +} + +impHandler0(bankWindowShow) +{ +#ifdef TMWA_SUPPORT + if (Net::getNetworkType() == ServerType::TMWATHENA) + return false; +#endif // TMWA_SUPPORT + + showHideWindow(bankWindow); + return true; +} + +impHandler0(cartWindowShow) +{ + if (Net::getNetworkType() == ServerType::TMWATHENA || + (localPlayer == nullptr) || + !localPlayer->getHaveCart()) + { + return false; + } + + showHideWindow(cartWindow); + if (inventoryWindow != nullptr) + inventoryWindow->updateDropButton(); + return true; +} + +impHandler0(updaterWindowShow) +{ + if (updaterWindow != nullptr) + updaterWindow->deleteSelf(); + else + DialogsManager::createUpdaterWindow(); + return true; +} + +impHandler0(quickWindowShow) +{ + if (setupWindow != nullptr) + { + if (setupWindow->isWindowVisible()) + setupWindow->doCancel(); + setupWindow->setVisible(Visible_true); + // TRANSLATORS: settings tab name + setupWindow->activateTab(_("Quick")); + setupWindow->requestMoveToTop(); + return true; + } + return false; +} + +impHandler0(mailWindowShow) +{ + showHideWindow(mailWindow); + return true; +} + +impHandler0(serverInfoWindowShow) +{ + if (serverInfoWindow != nullptr && + serverInfoWindow->isWindowVisible()) + { + serverInfoWindow->close(); + serverInfoWindow = nullptr; + } + else + { + serverInfoWindow = CREATEWIDGETR(ServerInfoWindow, + client->getCurrentServer()); + serverInfoWindow->requestMoveToTop(); + } + return true; +} + +impHandler0(clanWindowShow) +{ + showHideWindow(clanWindow); + return true; +} + +impHandler(showItems) +{ + const std::string args = event.args; + if (args.empty()) + return false; + + Being *being = nullptr; + if (args[0] == ':') + { + being = actorManager->findBeing(fromInt(atoi( + args.substr(1).c_str()), BeingId)); + if ((being != nullptr) && being->getType() == ActorType::Monster) + being = nullptr; + } + else + { + being = actorManager->findBeingByName(args, ActorType::Player); + } + if (being == nullptr) + return true; + if (being == localPlayer) + { + if (equipmentWindow != nullptr && + !equipmentWindow->isWindowVisible()) + { + equipmentWindow->setVisible(Visible_true); + } + } + else + { + if (beingEquipmentWindow != nullptr) + { + beingEquipmentWindow->setBeing(being); + beingEquipmentWindow->setVisible(Visible_true); + } + } + return true; +} + +} // namespace Actions diff --git a/src/progs/manaverse/client.cpp b/src/progs/manaverse/client.cpp new file mode 100644 index 000000000..b13fa9f20 --- /dev/null +++ b/src/progs/manaverse/client.cpp @@ -0,0 +1,2090 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * 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 "progs/manaverse/client.h" + +#include "chatlogger.h" +#include "configmanager.h" +#include "dirs.h" +#include "eventsmanager.h" +#include "game.h" +#include "graphicsmanager.h" +#include "main.h" +#include "party.h" +#include "pincodemanager.h" +#include "settings.h" +#include "soundmanager.h" +#include "spellmanager.h" + +#include "being/localclan.h" +#include "being/localplayer.h" +#include "being/playerinfo.h" +#include "being/playerrelations.h" + +#include "const/net/net.h" + +#include "enums/being/attributesstrings.h" + +#include "fs/virtfs/fs.h" +#include "fs/virtfs/tools.h" + +#include "gui/dialogsmanager.h" +#include "gui/gui.h" +#include "gui/skin.h" +#include "gui/popupmanager.h" +#include "gui/windowmanager.h" + +#include "gui/shortcut/dropshortcut.h" +#include "gui/shortcut/emoteshortcut.h" +#include "gui/shortcut/itemshortcut.h" +#include "gui/shortcut/spellshortcut.h" + +#include "gui/windows/changeemaildialog.h" +#include "gui/windows/changepassworddialog.h" +#include "gui/windows/charselectdialog.h" +#include "gui/windows/connectiondialog.h" +#include "gui/windows/equipmentwindow.h" +#include "gui/windows/logindialog.h" +#include "gui/windows/npcdialog.h" +#include "gui/windows/okdialog.h" +#include "gui/windows/registerdialog.h" +#include "gui/windows/serverdialog.h" +#include "gui/windows/setupwindow.h" +#include "gui/windows/updaterwindow.h" +#include "gui/windows/quitdialog.h" +#include "gui/windows/worldselectdialog.h" + +#include "gui/widgets/button.h" +#include "gui/widgets/createwidget.h" +#include "gui/widgets/desktop.h" +#include "gui/widgets/windowcontainer.h" + +#include "input/inputmanager.h" +#include "input/joystick.h" +#include "input/keyboardconfig.h" + +#include "input/touch/touchmanager.h" + +#include "net/charserverhandler.h" +#include "net/chathandler.h" +#include "net/download.h" +#include "net/gamehandler.h" +#include "net/generalhandler.h" +#include "net/guildhandler.h" +#include "net/inventoryhandler.h" +#include "net/ipc.h" +#include "net/loginhandler.h" +#include "net/net.h" +#include "net/updatetypeoperators.h" +#include "net/useragent.h" +#include "net/packetlimiter.h" +#include "net/partyhandler.h" + +#ifdef TMWA_SUPPORT +#include "net/tmwa/guildmanager.h" +#endif // TMWA_SUPPORT + +#include "particle/particleengine.h" + +#include "resources/dbmanager.h" +#include "resources/imagehelper.h" + +#include "resources/dye/dyepalette.h" + +#include "resources/resourcemanager/resourcemanager.h" + +#include "resources/sprite/spritereference.h" + +#include "utils/checkutils.h" +#include "utils/cpu.h" +#include "utils/delete2.h" +#include "utils/dumplibs.h" +#include "utils/dumpsizes.h" +#include "utils/env.h" +#include "utils/fuzzer.h" +#include "utils/gettext.h" +#include "utils/gettexthelper.h" +#include "utils/mrand.h" +#ifdef ANDROID +#include "fs/paths.h" +#endif // ANDROID +#include "utils/perfstat.h" +#include "utils/sdlcheckutils.h" +#include "utils/sdlhelper.h" +#include "utils/timer.h" + +#include "utils/translation/translationmanager.h" + +#include "listeners/assertlistener.h" +#include "listeners/errorlistener.h" + +#ifdef USE_OPENGL +#include "test/testlauncher.h" +#include "test/testmain.h" +#else // USE_OPENGL +#include "configuration.h" +#endif // USE_OPENGL + +#ifdef WIN32 +PRAGMA48(GCC diagnostic push) +PRAGMA48(GCC diagnostic ignored "-Wshadow") +#include +PRAGMA48(GCC diagnostic pop) +#include "fs/specialfolder.h" +#undef ERROR +#endif // WIN32 + +#ifdef ANDROID +#ifndef USE_SDL2 +PRAGMA48(GCC diagnostic push) +PRAGMA48(GCC diagnostic ignored "-Wshadow") +#include +PRAGMA48(GCC diagnostic pop) +#include +#endif // USE_SDL2 +#endif // ANDROID + +#include + +#ifdef USE_MUMBLE +#include "mumblemanager.h" +#endif // USE_MUMBLE + +PRAGMA48(GCC diagnostic push) +PRAGMA48(GCC diagnostic ignored "-Wshadow") +#ifdef USE_SDL2 +#include +#else // USE_SDL2 +#include +#endif // USE_SDL2 +PRAGMA48(GCC diagnostic pop) + +#include "debug.h" + +std::string errorMessage; +LoginData loginData; + +Client *client = nullptr; + +extern FPSmanager fpsManager; +extern int evolPacketOffset; + +volatile bool runCounters; +bool isSafeMode = false; +int serverVersion = 0; +int packetVersion = 0; +int packetVersionMain = 0; +int packetVersionRe = 0; +int packetVersionZero = 0; +int packetsType = 0; +int itemIdLen = 2; +bool packets_main = true; +bool packets_re = false; +bool packets_zero = false; +unsigned int tmwServerVersion = 0; +time_t start_time; +unsigned int mLastHost = 0; +unsigned long mSearchHash = 0; +int textures_count = 0; +volatile bool isTerminate = false; + +namespace +{ + class AccountListener final : public ActionListener + { + public: + AccountListener() + { } + + A_DELETE_COPY(AccountListener) + + void action(const ActionEvent &event A_UNUSED) override final + { + client->setState(State::CHAR_SELECT); + } + } accountListener; + + class LoginListener final : public ActionListener + { + public: + LoginListener() + { } + + A_DELETE_COPY(LoginListener) + + void action(const ActionEvent &event A_UNUSED) override final + { + client->setState(State::PRE_LOGIN); + } + } loginListener; +} // namespace + +Client::Client() : + ActionListener(), + mCurrentServer(), + mGame(nullptr), + mCurrentDialog(nullptr), + mQuitDialog(nullptr), + mSetupButton(nullptr), + mVideoButton(nullptr), + mHelpButton(nullptr), + mAboutButton(nullptr), + mThemesButton(nullptr), + mPerfomanceButton(nullptr), +#ifdef ANDROID + mCloseButton(nullptr), +#endif // ANDROID + mState(State::CHOOSE_SERVER), + mOldState(State::START), + mSkin(nullptr), + mButtonPadding(1), + mButtonSpacing(3), + mPing(0), + mConfigAutoSaved(false) +{ + WindowManager::init(); +} + +void Client::testsInit() +{ + if (!settings.options.test.empty() && + settings.options.test != "99") + { + gameInit(); + } + else + { + initRand(); + logger = new Logger; + SDL::initLogger(); + Dirs::initLocalDataDir(); + Dirs::initTempDir(); + Dirs::initConfigDir(); + GettextHelper::initLang(); + } +} + +void Client::gameInit() +{ + logger = new Logger; + SDL::initLogger(); + + initRand(); + + assertListener = new AssertListener; + // Load branding information + if (!settings.options.brandingPath.empty()) + { + branding.init(settings.options.brandingPath, + UseVirtFs_false, + SkipError_false); + } + setBrandingDefaults(branding); + + Dirs::initRootDir(); + Dirs::initHomeDir(); + + // Configure logger + if (!settings.options.logFileName.empty()) + { + settings.logFileName = settings.options.logFileName; + } + else + { + settings.logFileName = pathJoin(settings.localDataDir, + "manaverse.log"); + } + logger->log("Log file: " + settings.logFileName); + logger->setLogFile(settings.logFileName); + +#ifdef USE_FUZZER + Fuzzer::init(); +#endif // USE_FUZZER + + if (settings.options.ipc == true) + IPC::start(); + if (settings.options.test.empty()) + ConfigManager::backupConfig("config.xml"); + ConfigManager::initConfiguration(); + SDL::setLogLevel(config.getIntValue("sdlLogLevel")); + settings.init(); + Net::loadIgnorePackets(); + setPathsDefaults(paths); + initFeatures(); + initPaths(); + logger->log("init 4"); + logger->setDebugLog(config.getBoolValue("debugLog")); + logger->setReportUnimplemented(config.getBoolValue("unimplimentedLog")); + + config.incValue("runcount"); + +#ifndef ANDROID + if (settings.options.test.empty()) + ConfigManager::storeSafeParameters(); +#endif // ANDROID + + if (!VirtFs::setWriteDir(settings.localDataDir)) + { + logger->error(strprintf("%s couldn't be set as home directory! " + "Exiting.", settings.localDataDir.c_str())); + } + + GettextHelper::initLang(); + + chatLogger = new ChatLogger; + if (settings.options.chatLogDir.empty()) + { + chatLogger->setBaseLogDir(settings.localDataDir + + std::string("/logs/")); + } + else + { + chatLogger->setBaseLogDir(settings.options.chatLogDir); + } + + // Log the client version + logger->log1(FULL_VERSION); + logger->log("Start configPath: " + config.getConfigPath()); + + Dirs::initScreenshotDir(); + + updateEnv(); + SDL::allowScreenSaver(config.getBoolValue("allowscreensaver")); + dumpLibs(); + dumpSizes(); + + // Initialize SDL + logger->log1("Initializing SDL..."); + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) + { + logger->safeError(strprintf("Could not initialize SDL: %s", + SDL_GetError())); + } +#ifndef __SWITCH__ + atexit(SDL_Quit); +#endif + PacketLimiter::initPacketLimiter(); +#ifndef USE_SDL2 + SDL_EnableUNICODE(1); +#endif // USE_SDL2 + + WindowManager::applyKeyRepeat(); + eventsManager.init(); + eventsManager.enableEvents(); + +#ifdef WIN32 + Dirs::mountDataDir(); +#endif // WIN32 +#ifndef USE_SDL2 + WindowManager::setIcon(); +#endif // USE_SDL2 + + ConfigManager::checkConfigVersion(); + logVars(); + Cpu::detect(); + DyePalette::initFunctions(); +#if defined(USE_OPENGL) +#if !defined(ANDROID) && !defined(__APPLE__) +#if !defined(__native_client__) && !defined(__SWITCH__) && !defined(UNITTESTS) + if (!settings.options.safeMode && + settings.options.renderer < 0 && + settings.options.test.empty() && + !settings.options.validate && + !config.getBoolValue("videodetected")) + { + graphicsManager.detectVideoSettings(); + } +#endif // !defined(__native_client__) && !defined(__SWITCH__) && + // !defined(UNITTESTS) +#endif // !defined(ANDROID) && !defined(__APPLE__) && +#endif // defined(USE_OPENGL) + + initGraphics(); + UserAgent::update(); + + touchManager.init(); + +#ifndef WIN32 + Dirs::extractDataDir(); + Dirs::mountDataDir(); +#endif // WIN32 + + Dirs::updateDataPath(); + + // Add the main data directories to our VirtFs search path + if (!settings.options.dataPath.empty()) + { + VirtFs::mountDir(settings.options.dataPath, + Append_false); + } + + // Add the local data directory to VirtFs search path + VirtFs::mountDir(settings.localDataDir, + Append_false); + TranslationManager::loadCurrentLang(); + TranslationManager::loadDictionaryLang(); +#ifdef ENABLE_CUSTOMNLS + TranslationManager::loadGettextLang(); +#endif // ENABLE_CUSTOMNLS + +#ifdef USE_SDL2 + WindowManager::setIcon(); +#endif // USE_SDL2 + WindowManager::initTitle(); + + mainGraphics->postInit(); + + theme = new Theme; + Theme::selectSkin(); + ActorSprite::load(); + touchManager.init(); + + // Initialize the item and emote shortcuts. + for (size_t f = 0; f < SHORTCUT_TABS; f ++) + itemShortcut[f] = new ItemShortcut(f); + emoteShortcut = new EmoteShortcut; + dropShortcut = new DropShortcut; + + gui = new Gui; + gui->postInit(mainGraphics); + dialogsManager = new DialogsManager; + popupManager = new PopupManager; + + initSoundManager(); + + // Initialize keyboard + keyboard.init(); + inputManager.init(); + + // Initialise player relations + playerRelations.init(); + Joystick::init(); + WindowManager::createWindows(); + + keyboard.update(); + if (joystick != nullptr) + joystick->update(); + + // Initialize default server + mCurrentServer.hostname = settings.options.serverName; + mCurrentServer.port = settings.options.serverPort; + if (!settings.options.serverType.empty()) + { + mCurrentServer.type = ServerInfo::parseType( + settings.options.serverType); + } + + loginData.username = settings.options.username; + loginData.password = settings.options.password; + LoginDialog::savedPassword = settings.options.password; + loginData.remember = (serverConfig.getValue("remember", 1) != 0); + loginData.registerLogin = false; + + if (mCurrentServer.hostname.empty()) + { + mCurrentServer.hostname = branding.getValue("defaultServer", ""); + settings.options.serverName = mCurrentServer.hostname; + } + + if (mCurrentServer.port == 0) + { + mCurrentServer.port = CAST_U16(branding.getValue( + "defaultPort", CAST_S32(DEFAULT_PORT))); + mCurrentServer.type = ServerInfo::parseType( + branding.getValue("defaultServerType", "tmwathena")); + } + + chatLogger->setServerName(mCurrentServer.hostname); + + if (loginData.username.empty() && loginData.remember) + loginData.username = serverConfig.getValue("username", ""); + + if (mState != State::ERROR) + mState = State::CHOOSE_SERVER; + + startTimers(); + + const int fpsLimit = config.getIntValue("fpslimit"); + settings.limitFps = fpsLimit > 0; + + SDL_initFramerate(&fpsManager); + WindowManager::setFramerate(fpsLimit); + initConfigListeners(); + + settings.guiAlpha = config.getFloatValue("guialpha"); + optionChanged("fpslimit"); + + start_time = time(nullptr); + + PlayerInfo::init(); + +#ifdef ANDROID +#ifndef USE_SDL2 + WindowManager::updateScreenKeyboard(SDL_GetScreenKeyboardHeight(nullptr)); +#endif // USE_SDL2 +#endif // ANDROID + +#ifdef USE_MUMBLE + if (!mumbleManager) + mumbleManager = new MumbleManager; +#endif // USE_MUMBLE + + mSkin = theme->load("windowmenu.xml", + "", + true, + Theme::getThemePath()); + if (mSkin != nullptr) + { + mButtonPadding = mSkin->getPadding(); + mButtonSpacing = mSkin->getOption("spacing", 3); + } + if (settings.options.error) + inputManager.executeAction(InputAction::ERROR); + + if (settings.options.validate == true) + runValidate(); +} + +Client::~Client() +{ + if (!settings.options.testMode) + gameClear(); + else + testsClear(); + CHECKLISTENERS +} + +void Client::initConfigListeners() +{ + config.addListener("fpslimit", this); + config.addListener("guialpha", this); + config.addListener("gamma", this); + config.addListener("enableGamma", this); + config.addListener("particleEmitterSkip", this); + config.addListener("vsync", this); + config.addListener("repeateDelay", this); + config.addListener("repeateInterval", this); + config.addListener("logInput", this); +} + +void Client::initSoundManager() +{ + // Initialize sound engine + try + { + if (config.getBoolValue("sound")) + soundManager.init(); + + soundManager.setSfxVolume(config.getIntValue("sfxVolume")); + soundManager.setMusicVolume(config.getIntValue("musicVolume")); + } + catch (const char *const err) + { + mState = State::ERROR; + errorMessage = err; + logger->log("Warning: %s", err); + } + soundManager.playMusic(branding.getValue( + "loginMusic", + "keprohm.ogg"), + SkipError_true); +} + +void Client::initGraphics() +{ +#ifndef USE_SDL2 + WindowManager::applyVSync(); +#endif // USE_SDL2 + + runCounters = config.getBoolValue("packetcounters"); + + graphicsManager.initGraphics(); +#ifdef USE_SDL2 + WindowManager::applyVSync(); +#endif // USE_SDL2 + + imageHelper->postInit(); + setConfigDefaults2(config); + WindowManager::applyGrabMode(); + WindowManager::applyGamma(); + + mainGraphics->beginDraw(); +} + +void Client::testsClear() +{ + if (!settings.options.test.empty()) + gameClear(); + else + BeingInfo::clear(); +} + +void Client::gameClear() +{ + if (logger != nullptr) + logger->log1("Quitting1"); + isTerminate = true; + config.removeListeners(this); + + delete2(assertListener) + + IPC::stop(); + eventsManager.shutdown(); + WindowManager::deleteWindows(); + if (windowContainer != nullptr) + windowContainer->slowLogic(); + + stopTimers(); + DbManager::unloadDb(); + + if (loginHandler != nullptr) + loginHandler->clearWorlds(); + + if (chatHandler != nullptr) + chatHandler->clear(); + + if (charServerHandler != nullptr) + charServerHandler->clear(); + + delete2(ipc) + +#ifdef USE_MUMBLE + delete2(mumbleManager) +#endif // USE_MUMBLE + + PlayerInfo::deinit(); + + // Before config.write() since it writes the shortcuts to the config + for (unsigned f = 0; f < SHORTCUT_TABS; f ++) + delete2(itemShortcut[f]) + delete2(emoteShortcut) + delete2(dropShortcut) + + playerRelations.store(); + + if (logger != nullptr) + logger->log1("Quitting2"); + + delete2(mCurrentDialog) + delete2(popupManager) + delete2(dialogsManager) + delete2(gui) + + if (inventoryHandler != nullptr) + inventoryHandler->clear(); + + if (logger != nullptr) + logger->log1("Quitting3"); + + touchManager.clear(); + + GraphicsManager::deleteRenderers(); + + if (logger != nullptr) + logger->log1("Quitting4"); + + XML::cleanupXML(); + + if (logger != nullptr) + logger->log1("Quitting5"); + + BeingInfo::clear(); + + // Shutdown sound + soundManager.close(); + + if (logger != nullptr) + logger->log1("Quitting6"); + + ActorSprite::unload(); + + ResourceManager::deleteInstance(); + + soundManager.shutdown(); + + if (logger != nullptr) + logger->log1("Quitting8"); + + WindowManager::deleteIcon(); + + if (logger != nullptr) + logger->log1("Quitting9"); + + delete2(joystick) + + keyboard.deinit(); + + if (logger != nullptr) + logger->log1("Quitting10"); + + touchManager.shutdown(); + +#ifdef DEBUG_CONFIG + config.enableKeyLogging(); +#endif // DEBUG_CONFIG + + config.removeOldKeys(); + config.write(); + serverConfig.write(); + + config.clear(); + serverConfig.clear(); + + if (logger != nullptr) + logger->log1("Quitting11"); + +#ifdef USE_PROFILER + Perfomance::clear(); +#endif // USE_PROFILER + +#ifdef DEBUG_OPENGL_LEAKS + if (logger) + logger->log("textures left: %d", textures_count); +#endif // DEBUG_OPENGL_LEAKS + + Graphics::cleanUp(); + + if (logger != nullptr) + logger->log1("Quitting12"); + + delete2(chatLogger) + TranslationManager::close(); +} + +int Client::testsExec() +{ +#ifdef USE_OPENGL + if (settings.options.test.empty()) + { + TestMain test; + return test.exec(); + } + else + { + TestLauncher launcher(settings.options.test); + return launcher.exec(); + } +#else // USE_OPENGL + + return 0; +#endif // USE_OPENGL +} + +#define ADDBUTTON(var, object) var = object; \ + x -= var->getWidth() + mButtonSpacing; \ + var->setPosition(x, mButtonPadding); \ + top->add(var); + +void Client::stateConnectGame1() +{ + if ((gameHandler != nullptr) && + (loginHandler != nullptr) && + gameHandler->isConnected()) + { + loginHandler->disconnect(); + } +} + +void Client::stateConnectServer1() +{ + if (mOldState == State::CHOOSE_SERVER) + { + settings.serverName = mCurrentServer.hostname; + ConfigManager::initServerConfig(mCurrentServer.hostname); + PacketLimiter::initPacketLimiter(); + initTradeFilter(); + Dirs::initUsersDir(); + playerRelations.init(); + + // Initialize the item and emote shortcuts. + for (unsigned f = 0; f < SHORTCUT_TABS; f ++) + { + delete itemShortcut[f]; + itemShortcut[f] = new ItemShortcut(f); + } + delete emoteShortcut; + emoteShortcut = new EmoteShortcut; + + // Initialize the drop shortcuts. + delete dropShortcut; + dropShortcut = new DropShortcut; + + initFeatures(); + PlayerInfo::loadData(); + loginData.registerUrl = mCurrentServer.registerUrl; + loginData.packetVersion = mCurrentServer.packetVersion; + if (!mCurrentServer.onlineListUrl.empty()) + settings.onlineListUrl = mCurrentServer.onlineListUrl; + else + settings.onlineListUrl = settings.serverName; + settings.persistentIp = mCurrentServer.persistentIp; + settings.supportUrl = mCurrentServer.supportUrl; + settings.updateMirrors = mCurrentServer.updateMirrors; + settings.enableRemoteCommands = (serverConfig.getValue( + "enableRemoteCommands", 1) != 0); + + if (settings.options.username.empty()) + { + if (loginData.remember) + loginData.username = serverConfig.getValue("username", ""); + else + loginData.username.clear(); + } + else + { + loginData.username = settings.options.username; + } +#ifdef SAVE_PASSWORD + LoginDialog::savedPassword = loginData.remember ? + serverConfig.getValue("password", "") : ""; + loginData.password = LoginDialog::savedPassword; + settings.options.password = LoginDialog::savedPassword; +#endif + settings.login = loginData.username; + WindowManager::updateTitle(); + + loginData.remember = (serverConfig.getValue("remember", 1) != 0); + Net::connectToServer(mCurrentServer); + +#ifdef USE_MUMBLE + if (mumbleManager) + mumbleManager->setServer(mCurrentServer.hostname); +#endif // USE_MUMBLE + +#ifdef TMWA_SUPPORT + GuildManager::init(); +#endif // TMWA_SUPPORT + + if (!mConfigAutoSaved) + { + mConfigAutoSaved = true; + config.write(); + } + } + else if (loginHandler != nullptr && + loginHandler->isConnected()) + { + mState = State::PRE_LOGIN; + } +} + +void Client::stateWorldSelect1() +{ + if (mOldState == State::UPDATE && + (loginHandler != nullptr)) + { + if (loginHandler->getWorlds().size() < 2) + mState = State::PRE_LOGIN; + } +} + +void Client::stateGame1() +{ + if (gui == nullptr) + return; + + BasicContainer2 *const top = static_cast( + gui->getTop()); + + if (top == nullptr) + return; + + CREATEWIDGETV(desktop, Desktop, nullptr); + top->add(desktop); + int x = top->getWidth() - mButtonPadding; + ADDBUTTON(mSetupButton, new Button(desktop, + // TRANSLATORS: setup tab quick button + _("Setup"), "Setup", BUTTON_SKIN, this)) + ADDBUTTON(mPerfomanceButton, new Button(desktop, + // TRANSLATORS: perfoamance tab quick button + _("Performance"), "Perfomance", BUTTON_SKIN, this)) + ADDBUTTON(mVideoButton, new Button(desktop, + // TRANSLATORS: video tab quick button + _("Video"), "Video", BUTTON_SKIN, this)) + ADDBUTTON(mThemesButton, new Button(desktop, + // TRANSLATORS: theme tab quick button + _("Theme"), "Themes", BUTTON_SKIN, this)) + ADDBUTTON(mAboutButton, new Button(desktop, + // TRANSLATORS: theme tab quick button + _("About"), "about", BUTTON_SKIN, this)) + ADDBUTTON(mHelpButton, new Button(desktop, + // TRANSLATORS: theme tab quick button + _("Help"), "help", BUTTON_SKIN, this)) +#ifdef ANDROID + ADDBUTTON(mCloseButton, new Button(desktop, + // TRANSLATORS: close quick button + _("Close"), "close", BUTTON_SKIN, this)) +#endif // ANDROID + + desktop->setSize(mainGraphics->getWidth(), + mainGraphics->getHeight()); +} + +void Client::stateSwitchLogin1() +{ + if (mOldState == State::GAME && + (gameHandler != nullptr)) + { + gameHandler->disconnect(); + } +} + +int Client::gameExec() +{ + int lastTickTime = tick_time; + + Perf::init(); + + while (mState != State::EXIT) + { + PROFILER_START(); + PERF_STAT(0); + if (eventsManager.handleEvents()) + continue; + + PERF_STAT(1); + + BLOCK_START("Client::gameExec 3") + if (generalHandler != nullptr) + generalHandler->flushNetwork(); + BLOCK_END("Client::gameExec 3") + + PERF_STAT(2); + + BLOCK_START("Client::gameExec 4") + if (gui != nullptr) + gui->logic(); + + PERF_STAT(3); + + cur_time = time(nullptr); + int k = 0; + while (lastTickTime != tick_time && + k < 40) + { + if (mGame != nullptr) + mGame->logic(); + else if (gui != nullptr) + gui->handleInput(); + + ++lastTickTime; + k ++; + } + + PERF_STAT(4); + + soundManager.logic(); + + PERF_STAT(5); + + logic_count = logic_count + k; + if (gui != nullptr) + gui->slowLogic(); + + PERF_STAT(6); + + if (mGame != nullptr) + mGame->slowLogic(); + + PERF_STAT(7); + + slowLogic(); + + PERF_STAT(8); + + BLOCK_END("Client::gameExec 4") + + // This is done because at some point tick_time will wrap. + lastTickTime = tick_time; + + BLOCK_START("Client::gameExec 6") + if (mState == State::CONNECT_GAME) + { + stateConnectGame1(); + } + else if (mState == State::CONNECT_SERVER) + { + stateConnectServer1(); + } + else if (mState == State::WORLD_SELECT) + { + stateWorldSelect1(); + } + else if (mOldState == State::START || + (mOldState == State::GAME && mState != State::GAME)) + { + stateGame1(); + } + else if (mState == State::SWITCH_LOGIN) + { + stateSwitchLogin1(); + } + BLOCK_END("Client::gameExec 6") + + PERF_STAT(9); + + if (mState != mOldState) + { + BLOCK_START("Client::gameExec 7") + PlayerInfo::stateChange(mState); + + if (mOldState == State::GAME) + { + delete2(mGame) + assertListener = new AssertListener; + Game::clearInstance(); + ResourceManager::cleanOrphans(false); + Party::clearParties(); + Guild::clearGuilds(); + NpcDialog::clearDialogs(); + if (guildHandler != nullptr) + guildHandler->clear(); + if (partyHandler != nullptr) + partyHandler->clear(); + if (chatLogger != nullptr) + chatLogger->clear(); + if (!settings.options.dataPath.empty()) + UpdaterWindow::unloadMods(settings.options.dataPath); + else + UpdaterWindow::unloadMods(settings.oldUpdates); + if (!settings.options.skipUpdate) + UpdaterWindow::unloadMods(settings.oldUpdates + "/fix/"); + } + else if (mOldState == State::CHAR_SELECT) + { + if (mState != State::CHANGEPASSWORD && + charServerHandler != nullptr) + { + charServerHandler->clear(); + } + } + + mOldState = mState; + + // Get rid of the dialog of the previous state + delete2(mCurrentDialog) + + // State has changed, while the quitDialog was active, it might + // not be correct anymore + if (mQuitDialog != nullptr) + { + mQuitDialog->scheduleDelete(); + mQuitDialog = nullptr; + } + BLOCK_END("Client::gameExec 7") + + BLOCK_START("Client::gameExec 8") + switch (mState) + { + case State::CHOOSE_SERVER: + { + BLOCK_START("Client::gameExec STATE_CHOOSE_SERVER") + logger->log1("State: CHOOSE SERVER"); + unloadData(); + pincodeManager.closeDialogs(); + + // Allow changing this using a server choice dialog + // We show the dialog box only if the command-line + // options weren't set. + if (settings.options.serverName.empty() && + settings.options.serverPort == 0 && + !branding.getValue("onlineServerList", "a").empty()) + { + // Don't allow an alpha opacity + // lower than the default value + theme->setMinimumOpacity(0.8F); + + CREATEWIDGETV(mCurrentDialog, ServerDialog, + &mCurrentServer, + settings.configDir); + } + else + { + mState = State::CONNECT_SERVER; + + // Reset options so that cancelling or connect + // timeout will show the server dialog. + settings.options.serverName.clear(); + settings.options.serverPort = 0; + } + BLOCK_END("Client::gameExec STATE_CHOOSE_SERVER") + break; + } + + case State::CONNECT_SERVER: + BLOCK_START("Client::gameExec State::CONNECT_SERVER") + logger->log1("State: CONNECT SERVER"); + loginData.updateHosts.clear(); + CREATEWIDGETV(mCurrentDialog, ConnectionDialog, + // TRANSLATORS: connection dialog header + _("Connecting to server"), + State::SWITCH_SERVER); + TranslationManager::loadCurrentLang(); + TranslationManager::loadDictionaryLang(); + pincodeManager.init(); + BLOCK_END("Client::gameExec State::CONNECT_SERVER") + break; + + case State::PRE_LOGIN: + logger->log1("State: PRE_LOGIN"); + break; + + case State::LOGIN: + BLOCK_START("Client::gameExec State::LOGIN") + logger->log1("State: LOGIN"); + // Don't allow an alpha opacity + // lower than the default value + theme->setMinimumOpacity(0.8F); + + if (packetVersion == 0) + { + packetVersion = loginData.packetVersion; + if (packetVersion != 0) + { + loginHandler->updatePacketVersion(); + logger->log("Preconfigured packet version: %d", + packetVersion); + } + } + + loginData.updateType = static_cast( + serverConfig.getValue("updateType", 0)); + + mSearchHash = Net::Download::adlerBuffer( + const_cast(mCurrentServer.hostname.c_str()), + CAST_S32(mCurrentServer.hostname.size())); + if (settings.options.username.empty() || + settings.options.password.empty()) + { + CREATEWIDGETV(mCurrentDialog, LoginDialog, + loginData, + &mCurrentServer, + &settings.options.updateHost); + } + else + { + mState = State::LOGIN_ATTEMPT; + // Clear the password so that when login fails, the + // dialog will show up next time. + settings.options.password.clear(); + } + BLOCK_END("Client::gameExec State::LOGIN") + break; + + case State::LOGIN_ATTEMPT: + BLOCK_START("Client::gameExec State::LOGIN_ATTEMPT") + logger->log1("State: LOGIN ATTEMPT"); + CREATEWIDGETV(mCurrentDialog, ConnectionDialog, + // TRANSLATORS: connection dialog header + _("Logging in"), + State::SWITCH_SERVER); + if (loginHandler != nullptr) + loginHandler->loginOrRegister(&loginData); + BLOCK_END("Client::gameExec State::LOGIN_ATTEMPT") + break; + + case State::WORLD_SELECT: + BLOCK_START("Client::gameExec State::WORLD_SELECT") + logger->log1("State: WORLD SELECT"); + { + TranslationManager::loadCurrentLang(); + TranslationManager::loadDictionaryLang(); + if (loginHandler == nullptr) + { + BLOCK_END("Client::gameExec State::WORLD_SELECT") + break; + } + Worlds worlds = loginHandler->getWorlds(); + + if (worlds.empty()) + { + // Trust that the netcode knows what it's doing + mState = State::UPDATE; + } + else if (worlds.size() == 1) + { + loginHandler->chooseServer( + 0, mCurrentServer.persistentIp); + mState = State::UPDATE; + } + else + { + CREATEWIDGETV(mCurrentDialog, WorldSelectDialog, + worlds); + if (settings.options.chooseDefault) + { + static_cast(mCurrentDialog) + ->action(ActionEvent(nullptr, "ok")); + } + } + } + BLOCK_END("Client::gameExec State::WORLD_SELECT") + break; + + case State::WORLD_SELECT_ATTEMPT: + BLOCK_START("Client::gameExec State::WORLD_SELECT_ATTEMPT") + logger->log1("State: WORLD SELECT ATTEMPT"); + CREATEWIDGETV(mCurrentDialog, ConnectionDialog, + // TRANSLATORS: connection dialog header + _("Entering game world"), + State::WORLD_SELECT); + BLOCK_END("Client::gameExec State::WORLD_SELECT_ATTEMPT") + break; + + case State::UPDATE: + BLOCK_START("Client::gameExec State::UPDATE") + logger->log1("State: UPDATE"); + + // Determine which source to use for the update host + if (!settings.options.updateHost.empty()) + settings.updateHost = settings.options.updateHost; + else + settings.updateHost = loginData.updateHost; + Dirs::initUpdatesDir(); + + if (!settings.oldUpdates.empty()) + UpdaterWindow::unloadUpdates(settings.oldUpdates); + + if (settings.options.skipUpdate) + { + mState = State::LOAD_DATA; + settings.oldUpdates.clear(); + UpdaterWindow::loadDirMods(settings.options.dataPath); + } + else if ((loginData.updateType & UpdateType::Skip) != 0) + { + settings.oldUpdates = pathJoin(settings.localDataDir, + settings.updatesDir); + UpdaterWindow::loadLocalUpdates(settings.oldUpdates); + mState = State::LOAD_DATA; + } + else + { + settings.oldUpdates = pathJoin(settings.localDataDir, + settings.updatesDir); + CREATEWIDGETV(mCurrentDialog, UpdaterWindow, + settings.updateHost, + settings.oldUpdates, + settings.options.dataPath.empty(), + loginData.updateType); + } + BLOCK_END("Client::gameExec State::UPDATE") + break; + + case State::LOAD_DATA: + { + BLOCK_START("Client::gameExec State::LOAD_DATA") + logger->log1("State: LOAD DATA"); + + loadData(); + + mState = State::GET_CHARACTERS; + BLOCK_END("Client::gameExec State::LOAD_DATA") + break; + } + case State::GET_CHARACTERS: + BLOCK_START("Client::gameExec State::GET_CHARACTERS") + logger->log1("State: GET CHARACTERS"); + CREATEWIDGETV(mCurrentDialog, ConnectionDialog, + // TRANSLATORS: connection dialog header + _("Requesting characters"), + State::SWITCH_SERVER); + if (charServerHandler != nullptr) + charServerHandler->requestCharacters(); + BLOCK_END("Client::gameExec State::GET_CHARACTERS") + break; + + case State::CHAR_SELECT: + BLOCK_START("Client::gameExec State::CHAR_SELECT") + logger->log1("State: CHAR SELECT"); + // Don't allow an alpha opacity + // lower than the default value + theme->setMinimumOpacity(0.8F); + + settings.login = loginData.username; + WindowManager::updateTitle(); + + CREATEWIDGETV(mCurrentDialog, CharSelectDialog, + loginData); + pincodeManager.updateState(); + + if (!(static_cast(mCurrentDialog)) + ->selectByName(settings.options.character, + CharSelectDialog::Choose)) + { + (static_cast(mCurrentDialog)) + ->selectByName( + serverConfig.getValue("lastCharacter", ""), + settings.options.chooseDefault ? + CharSelectDialog::Choose : + CharSelectDialog::Focus); + } + + // Choosing character on the command line should work only + // once, clear it so that 'switch character' works. + settings.options.character.clear(); + BLOCK_END("Client::gameExec State::CHAR_SELECT") + break; + + case State::CONNECT_GAME: + BLOCK_START("Client::gameExec State::CONNECT_GAME") + logger->log1("State: CONNECT GAME"); + CREATEWIDGETV(mCurrentDialog, ConnectionDialog, + // TRANSLATORS: connection dialog header + _("Connecting to the game server"), + State::CHOOSE_SERVER); + if (gameHandler != nullptr) + gameHandler->connect(); + BLOCK_END("Client::gameExec State::CONNECT_GAME") + break; + + case State::CHANGE_MAP: + BLOCK_START("Client::gameExec State::CHANGE_MAP") + logger->log1("State: CHANGE_MAP"); + CREATEWIDGETV(mCurrentDialog, ConnectionDialog, + // TRANSLATORS: connection dialog header + _("Changing game servers"), + State::SWITCH_CHARACTER); + if (gameHandler != nullptr) + gameHandler->connect(); + BLOCK_END("Client::gameExec State::CHANGE_MAP") + break; + + case State::GAME: + BLOCK_START("Client::gameExec State::GAME") + if (localPlayer != nullptr) + { + logger->log("Memorizing selected character %s", + localPlayer->getName().c_str()); + serverConfig.setValue("lastCharacter", + localPlayer->getName()); +#ifdef USE_MUMBLE + if (mumbleManager) + mumbleManager->setPlayer(localPlayer->getName()); +#endif // USE_MUMBLE + Perf::init(); + } + + // Fade out logon-music here too to give the desired effect + // of "flowing" into the game. + soundManager.fadeOutMusic(1000); + + // Allow any alpha opacity + theme->setMinimumOpacity(-1.0F); + + if (chatLogger != nullptr) + chatLogger->setServerName(settings.serverName); + +#ifdef ANDROID + delete2(mCloseButton) +#endif // ANDROID + + delete2(mSetupButton) + delete2(mVideoButton) + delete2(mThemesButton) + delete2(mAboutButton) + delete2(mHelpButton) + delete2(mPerfomanceButton) + delete2(desktop) + + mCurrentDialog = nullptr; + + logger->log1("State: GAME"); + if (generalHandler != nullptr) + generalHandler->reloadPartially(); + mGame = new Game; + BLOCK_END("Client::gameExec State::GAME") + break; + + case State::LOGIN_ERROR: + BLOCK_START("Client::gameExec State::LOGIN_ERROR") + logger->log1("State: LOGIN ERROR"); + CREATEWIDGETV(mCurrentDialog, OkDialog, + // TRANSLATORS: error dialog header + _("Error"), + errorMessage, + // TRANSLATORS: ok dialog button + _("Close"), + DialogType::ERROR, + Modal_true, + ShowCenter_true, + nullptr, + 260); + mCurrentDialog->addActionListener(&loginListener); + mCurrentDialog = nullptr; // OkDialog deletes itself + BLOCK_END("Client::gameExec State::LOGIN_ERROR") + break; + + case State::ACCOUNTCHANGE_ERROR: + BLOCK_START("Client::gameExec State::ACCOUNTCHANGE_ERROR") + logger->log1("State: ACCOUNT CHANGE ERROR"); + CREATEWIDGETV(mCurrentDialog, OkDialog, + // TRANSLATORS: error dialog header + _("Error"), + errorMessage, + // TRANSLATORS: ok dialog button + _("Close"), + DialogType::ERROR, + Modal_true, + ShowCenter_true, + nullptr, + 260); + mCurrentDialog->addActionListener(&accountListener); + mCurrentDialog = nullptr; // OkDialog deletes itself + BLOCK_END("Client::gameExec State::ACCOUNTCHANGE_ERROR") + break; + + case State::REGISTER_PREP: + BLOCK_START("Client::gameExec State::REGISTER_PREP") + logger->log1("State: REGISTER_PREP"); + CREATEWIDGETV(mCurrentDialog, ConnectionDialog, + // TRANSLATORS: connection dialog header + _("Requesting registration details"), + State::LOGIN); + loginHandler->getRegistrationDetails(); + BLOCK_END("Client::gameExec State::REGISTER_PREP") + break; + + case State::REGISTER: + logger->log1("State: REGISTER"); + CREATEWIDGETV(mCurrentDialog, RegisterDialog, + loginData); + break; + + case State::REGISTER_ATTEMPT: + BLOCK_START("Client::gameExec State::REGISTER_ATTEMPT") + logger->log("Username is %s", loginData.username.c_str()); + if (loginHandler != nullptr) + loginHandler->registerAccount(&loginData); + BLOCK_END("Client::gameExec State::REGISTER_ATTEMPT") + break; + + case State::CHANGEPASSWORD: + BLOCK_START("Client::gameExec State::CHANGEPASSWORD") + logger->log1("State: CHANGE PASSWORD"); + CREATEWIDGETV(mCurrentDialog, ChangePasswordDialog, + loginData); + mCurrentDialog->setVisible(Visible_true); + BLOCK_END("Client::gameExec State::CHANGEPASSWORD") + break; + + case State::CHANGEPASSWORD_ATTEMPT: + BLOCK_START("Client::gameExec " + "State::CHANGEPASSWORD_ATTEMPT") + logger->log1("State: CHANGE PASSWORD ATTEMPT"); + if (loginHandler != nullptr) + { + loginHandler->changePassword(loginData.password, + loginData.newPassword); + } + BLOCK_END("Client::gameExec State::CHANGEPASSWORD_ATTEMPT") + break; + + case State::CHANGEPASSWORD_SUCCESS: + BLOCK_START("Client::gameExec " + "State::CHANGEPASSWORD_SUCCESS") + logger->log1("State: CHANGE PASSWORD SUCCESS"); + CREATEWIDGETV(mCurrentDialog, OkDialog, + // TRANSLATORS: password change message header + _("Password Change"), + // TRANSLATORS: password change message text + _("Password changed successfully!"), + // TRANSLATORS: ok dialog button + _("OK"), + DialogType::ERROR, + Modal_true, + ShowCenter_true, + nullptr, + 260); + mCurrentDialog->addActionListener(&accountListener); + mCurrentDialog = nullptr; // OkDialog deletes itself + loginData.password = loginData.newPassword; + loginData.newPassword.clear(); + BLOCK_END("Client::gameExec State::CHANGEPASSWORD_SUCCESS") + break; + + case State::CHANGEEMAIL: + logger->log1("State: CHANGE EMAIL"); + CREATEWIDGETV(mCurrentDialog, + ChangeEmailDialog, + loginData); + mCurrentDialog->setVisible(Visible_true); + break; + + case State::CHANGEEMAIL_ATTEMPT: + logger->log1("State: CHANGE EMAIL ATTEMPT"); + if (loginHandler != nullptr) + loginHandler->changeEmail(loginData.email); + break; + + case State::CHANGEEMAIL_SUCCESS: + logger->log1("State: CHANGE EMAIL SUCCESS"); + CREATEWIDGETV(mCurrentDialog, OkDialog, + // TRANSLATORS: email change message header + _("Email Change"), + // TRANSLATORS: email change message text + _("Email changed successfully!"), + // TRANSLATORS: ok dialog button + _("OK"), + DialogType::ERROR, + Modal_true, + ShowCenter_true, + nullptr, + 260); + mCurrentDialog->addActionListener(&accountListener); + mCurrentDialog = nullptr; // OkDialog deletes itself + break; + + case State::SWITCH_SERVER: + BLOCK_START("Client::gameExec State::SWITCH_SERVER") + logger->log1("State: SWITCH SERVER"); + + if (loginHandler != nullptr) + loginHandler->disconnect(); + if (gameHandler != nullptr) + { + gameHandler->disconnect(); + gameHandler->clear(); + } + settings.serverName.clear(); + settings.login.clear(); + WindowManager::updateTitle(); + serverConfig.write(); + serverConfig.unload(); + if (setupWindow != nullptr) + setupWindow->externalUnload(); + + mState = State::CHOOSE_SERVER; + BLOCK_END("Client::gameExec State::SWITCH_SERVER") + break; + + case State::SWITCH_LOGIN: + BLOCK_START("Client::gameExec State::SWITCH_LOGIN") + logger->log1("State: SWITCH LOGIN"); + + if (loginHandler != nullptr) + { + loginHandler->logout(); + loginHandler->disconnect(); + } + if (gameHandler != nullptr) + gameHandler->disconnect(); + if (loginHandler != nullptr) + loginHandler->connect(); + + settings.login.clear(); + WindowManager::updateTitle(); + mState = State::LOGIN; + BLOCK_END("Client::gameExec State::SWITCH_LOGIN") + break; + + case State::SWITCH_CHARACTER: + BLOCK_START("Client::gameExec State::SWITCH_CHARACTER") + logger->log1("State: SWITCH CHARACTER"); + + // Done with game + if (gameHandler != nullptr) + gameHandler->disconnect(); + + settings.login.clear(); + WindowManager::updateTitle(); + mState = State::GET_CHARACTERS; + BLOCK_END("Client::gameExec State::SWITCH_CHARACTER") + break; + + case State::LOGOUT_ATTEMPT: + logger->log1("State: LOGOUT ATTEMPT"); + break; + + case State::WAIT: + logger->log1("State: WAIT"); + break; + + case State::EXIT: + BLOCK_START("Client::gameExec State::EXIT") + logger->log1("State: EXIT"); + Net::unload(); + BLOCK_END("Client::gameExec State::EXIT") + break; + + case State::FORCE_QUIT: + BLOCK_START("Client::gameExec State::FORCE_QUIT") + logger->log1("State: FORCE QUIT"); + if (generalHandler != nullptr) + generalHandler->unload(); + mState = State::EXIT; + BLOCK_END("Client::gameExec State::FORCE_QUIT") + break; + + case State::ERROR: + BLOCK_START("Client::gameExec State::ERROR") + config.write(); +#ifdef SAVE_PASSWORD + if (errorMessage == "Wrong password.") + { + serverConfig.setValue("password", ""); + serverConfig.write(); + } +#endif + if (mOldState == State::GAME) + serverConfig.write(); + logger->log1("State: ERROR"); + logger->log("Error: %s\n", errorMessage.c_str()); + pincodeManager.closeDialogs(); + mCurrentDialog = DialogsManager::openErrorDialog( + // TRANSLATORS: error message header + _("Error"), + errorMessage, + Modal_true); + mCurrentDialog->addActionListener(&errorListener); + mCurrentDialog = nullptr; // OkDialog deletes itself + gameHandler->disconnect(); + BLOCK_END("Client::gameExec State::ERROR") + break; + + case State::AUTORECONNECT_SERVER: + // ++++++ + break; + + case State::START: + default: + mState = State::FORCE_QUIT; + break; + } + BLOCK_END("Client::gameExec 8") + } + + PERF_STAT(10); + + // Update the screen when application is visible, delay otherwise. + if (!WindowManager::getIsMinimized()) + { + frame_count = frame_count + 1; + if (gui != nullptr) + gui->draw(); + mainGraphics->updateScreen(); + } + else + { + SDL_Delay(100); + } + + PERF_STAT(11); + + BLOCK_START("~Client::SDL_framerateDelay") + if (settings.limitFps) + SDL_framerateDelay(&fpsManager); + BLOCK_END("~Client::SDL_framerateDelay") + + PERF_STAT(12); + PERF_NEXTFRAME(); + PROFILER_END(); + } + + return settings.exitcode; +} + +void Client::optionChanged(const std::string &name) +{ + if (name == "fpslimit") + { + const int fpsLimit = config.getIntValue("fpslimit"); + settings.limitFps = fpsLimit > 0; + WindowManager::setFramerate(fpsLimit); + } + else if (name == "guialpha" || + name == "enableGuiOpacity") + { + const float alpha = config.getFloatValue("guialpha"); + settings.guiAlpha = alpha; + ImageHelper::setEnableAlpha(alpha != 1.0F && + config.getBoolValue("enableGuiOpacity")); + } + else if (name == "gamma" || + name == "enableGamma") + { + WindowManager::applyGamma(); + } + else if (name == "particleEmitterSkip") + { + ParticleEngine::emitterSkip = + config.getIntValue("particleEmitterSkip") + 1; + } + else if (name == "vsync") + { + WindowManager::applyVSync(); + } + else if (name == "repeateInterval" || + name == "repeateDelay") + { + WindowManager::applyKeyRepeat(); + } +} + +void Client::action(const ActionEvent &event) +{ + std::string tab; + const std::string &eventId = event.getId(); + + if (eventId == "close") + { + setState(State::FORCE_QUIT); + return; + } + if (eventId == "Setup") + { + tab.clear(); + } + else if (eventId == "help") + { + inputManager.executeAction(InputAction::WINDOW_HELP); + return; + } + else if (eventId == "about") + { + inputManager.executeAction(InputAction::WINDOW_ABOUT); + return; + } + else if (eventId == "Video") + { + tab = "Video"; + } + else if (eventId == "Themes") + { + tab = "Theme"; + } + else if (eventId == "Perfomance") + { + tab = "Perfomance"; + } + else + { + return; + } + + if (setupWindow != nullptr) + { + setupWindow->setVisible(fromBool( + !setupWindow->isWindowVisible(), Visible)); + if (setupWindow->isWindowVisible()) + { + if (!tab.empty()) + setupWindow->activateTab(tab); + setupWindow->requestMoveToTop(); + } + } +} + +void Client::initFeatures() +{ + features.init(paths.getStringValue("featuresFile"), + UseVirtFs_true, + SkipError_true); + setFeaturesDefaults(features); + settings.fixDeadAnimation = features.getBoolValue("fixDeadAnimation"); +} + +void Client::initPaths() +{ + settings.gmCommandSymbol = paths.getStringValue("gmCommandSymbol"); + settings.gmCharCommandSymbol = paths.getStringValue("gmCharCommandSymbol"); + settings.linkCommandSymbol = paths.getStringValue("linkCommandSymbol"); + if (settings.linkCommandSymbol.empty()) + settings.linkCommandSymbol = "="; + settings.overweightPercent = paths.getIntValue("overweightPercent"); + settings.fixedInventorySize = paths.getIntValue("fixedInventorySize"); + settings.playerNameOffset = paths.getIntValue( + "playerNameOffset"); + settings.playerBadgeAtRightOffset = paths.getIntValue( + "playerBadgeAtRightOffset"); + settings.unknownSkillsAutoTab = paths.getBoolValue("unknownSkillsAutoTab"); + settings.enableNewMailSystem = paths.getBoolValue("enableNewMailSystem"); +} + +void Client::initTradeFilter() +{ + const std::string tradeListName = + settings.serverConfigDir + "/tradefilter.txt"; + + std::ofstream tradeFile; + struct stat statbuf; + + if ((stat(tradeListName.c_str(), &statbuf) != 0) || + !S_ISREG(statbuf.st_mode)) + { + tradeFile.open(tradeListName.c_str(), + std::ios::out); + if (tradeFile.is_open()) + { + tradeFile << ": sell" << std::endl; + tradeFile << ": buy" << std::endl; + tradeFile << ": trade" << std::endl; + tradeFile << "i sell" << std::endl; + tradeFile << "i buy" << std::endl; + tradeFile << "i trade" << std::endl; + tradeFile << "i trading" << std::endl; + tradeFile << "i am buy" << std::endl; + tradeFile << "i am sell" << std::endl; + tradeFile << "i am trade" << std::endl; + tradeFile << "i am trading" << std::endl; + tradeFile << "i'm buy" << std::endl; + tradeFile << "i'm sell" << std::endl; + tradeFile << "i'm trade" << std::endl; + tradeFile << "i'm trading" << std::endl; + } + else + { + reportAlways("Error opening file for writing: %s", + tradeListName.c_str()) + } + tradeFile.close(); + } +} + +bool Client::isTmw() +{ + const std::string &name = settings.serverName; + if (name == "server.themanaworld.org" || + name == "themanaworld.org" || + name == "167.114.129.72") + { + return true; + } + return false; +} + +void Client::moveButtons(const int width) +{ + if (mSetupButton != nullptr) + { + int x = width - mSetupButton->getWidth() - mButtonPadding; + mSetupButton->setPosition(x, mButtonPadding); +#ifndef WIN32 + x -= mPerfomanceButton->getWidth() + mButtonSpacing; + mPerfomanceButton->setPosition(x, mButtonPadding); + + x -= mVideoButton->getWidth() + mButtonSpacing; + mVideoButton->setPosition(x, mButtonPadding); + + x -= mThemesButton->getWidth() + mButtonSpacing; + mThemesButton->setPosition(x, mButtonPadding); + + x -= mAboutButton->getWidth() + mButtonSpacing; + mAboutButton->setPosition(x, mButtonPadding); + + x -= mHelpButton->getWidth() + mButtonSpacing; + mHelpButton->setPosition(x, mButtonPadding); +#ifdef ANDROID + x -= mCloseButton->getWidth() + mButtonSpacing; + mCloseButton->setPosition(x, mButtonPadding); +#endif // ANDROID +#endif // WIN32 + } +} + +void Client::windowRemoved(const Window *const window) +{ + if (mCurrentDialog == window) + mCurrentDialog = nullptr; +} + +void Client::focusWindow() +{ + if (mCurrentDialog != nullptr) + { + mCurrentDialog->requestFocus(); + } +} + +void Client::updatePinState() +{ + if (mCurrentDialog == nullptr || + mState != State::CHAR_SELECT) + { + return; + } + CharSelectDialog *const dialog = + dynamic_cast(mCurrentDialog); + if (dialog != nullptr) + pincodeManager.updateState(); +} + +void Client::logVars() +{ +#ifdef ANDROID + logger->log("APPDIR: %s", getenv("APPDIR")); + logger->log("DATADIR2: %s", getSdStoragePath().c_str()); +#endif // ANDROID +} + +void Client::slowLogic() +{ + if ((gameHandler == nullptr) || + !gameHandler->mustPing()) + { + return; + } + + if (get_elapsed_time1(mPing) > 1500) + { + mPing = tick_time; + if (mState == State::UPDATE || + mState == State::LOGIN || + mState == State::LOGIN_ATTEMPT || + mState == State::REGISTER || + mState == State::REGISTER_ATTEMPT) + { + if (loginHandler != nullptr) + loginHandler->ping(); + if (generalHandler != nullptr) + generalHandler->flushSend(); + } + else if (mState == State::CHAR_SELECT) + { + if (charServerHandler != nullptr) + charServerHandler->ping(); + if (generalHandler != nullptr) + generalHandler->flushSend(); + } + } +} + +void Client::loadData() +{ + // If another data path has been set, + // we don't load any other files... + if (settings.options.dataPath.empty()) + { + // Add customdata directory + VirtFs::searchAndAddArchives( + "customdata/", + "zip", + Append_false); + } + + if (!settings.options.skipUpdate) + { + VirtFs::searchAndAddArchives( + settings.updatesDir + "/local/", + "zip", + Append_false); + + VirtFs::mountDir(pathJoin( + settings.localDataDir, + settings.updatesDir, + "local/"), + Append_false); + } + + logger->log("Init paths"); + paths.init("paths.xml", + UseVirtFs_true, + SkipError_false); + setPathsDefaults(paths); + initPaths(); + if (SpriteReference::Empty == nullptr) + { + SpriteReference::Empty = new SpriteReference( + paths.getStringValue("spriteErrorFile"), + 0); + } + + if (BeingInfo::unknown == nullptr) + BeingInfo::unknown = new BeingInfo; + + initFeatures(); + TranslationManager::loadCurrentLang(); + TranslationManager::loadDictionaryLang(); + PlayerInfo::stateChange(mState); + + AttributesEnum::init(); + DbManager::loadDb(); + + delete spellManager; + spellManager = new SpellManager; + delete spellShortcut; + spellShortcut = new SpellShortcut; + + EquipmentWindow::prepareSlotNames(); + + ActorSprite::load(); + + if (desktop != nullptr) + desktop->reloadWallpaper(); +} + +void Client::unloadData() +{ + DbManager::unloadDb(); + mCurrentServer.supportUrl.clear(); + settings.supportUrl.clear(); + if (settings.options.dataPath.empty()) + { + // Add customdata directory + VirtFs::searchAndRemoveArchives( + "customdata/", + "zip"); + } + + if (!settings.oldUpdates.empty()) + { + UpdaterWindow::unloadUpdates(settings.oldUpdates); + settings.oldUpdates.clear(); + } + + if (!settings.options.skipUpdate) + { + VirtFs::searchAndRemoveArchives( + pathJoin(settings.updatesDir, "local/"), + "zip"); + + VirtFs::unmountDirSilent(pathJoin( + settings.localDataDir, + settings.updatesDir, + "local/")); + } + + ResourceManager::clearCache(); + + loginData.clearUpdateHost(); + localClan.clear(); + serverVersion = 0; + packetVersion = 0; + packetVersionMain = 0; + packetVersionRe = 0; + packetVersionZero = 0; + tmwServerVersion = 0; + evolPacketOffset = 0; +} + +void Client::runValidate() +{ + loadData(); + WindowManager::createValidateWindows(); + + WindowManager::deleteValidateWindows(); + unloadData(); + delete2(client) + VirtFs::deinit(); + exit(0); +} diff --git a/src/progs/manaverse/client.h b/src/progs/manaverse/client.h new file mode 100644 index 000000000..e74b179d2 --- /dev/null +++ b/src/progs/manaverse/client.h @@ -0,0 +1,172 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * 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 . + */ + +#ifndef PROGS_MANAVERSE_CLIENT_H +#define PROGS_MANAVERSE_CLIENT_H + +#include "enums/state.h" + +#include "listeners/actionlistener.h" +#include "listeners/configlistener.h" + +#include "net/serverinfo.h" + +#include "localconsts.h" + +class Button; +class Game; +class LoginData; +class Skin; +class Window; +class QuitDialog; + +extern bool isSafeMode; +extern int serverVersion; +extern unsigned int tmwServerVersion; +extern time_t start_time; +extern int textures_count; + +extern std::string errorMessage; +extern LoginData loginData; + +/** + * The core part of the client. This class initializes all subsystems, runs + * the event loop, and shuts everything down again. + */ +class Client final : public ConfigListener, + public ActionListener +{ + public: + Client(); + + A_DELETE_COPY(Client) + + ~Client() override final; + + void gameInit(); + + void testsInit(); + + int gameExec(); + + static int testsExec(); + + void setState(const StateT state) + { mState = state; } + + StateT getState() const noexcept2 A_WARN_UNUSED + { return mState; } + + static bool isTmw() A_WARN_UNUSED; + + void optionChanged(const std::string &name) override final; + + void action(const ActionEvent &event) override final; + + static void initTradeFilter(); + + void moveButtons(const int width); + + void windowRemoved(const Window *const window); + + void focusWindow(); + + void updatePinState(); + + void slowLogic(); + + ServerInfo &getCurrentServer() + { return mCurrentServer; } + + private: + void initSoundManager(); + + void initConfigListeners(); + + static void initGraphics(); + + static void initFeatures(); + + static void initPaths(); + + void gameClear(); + + void testsClear(); + +#ifdef ANDROID + static void logVars(); +#else // ANDROID + + static void logVars(); +#endif // ANDROID + + static void stateConnectGame1(); + + void stateConnectServer1(); + + void stateWorldSelect1(); + + void stateGame1(); + + void stateSwitchLogin1(); + + void loadData(); + + void unloadData(); + + void runValidate() +#ifndef BAD_CILKPLUS + __attribute__ ((noreturn)) +#endif // BAD_CILKPLUS +; + + ServerInfo mCurrentServer; + + Game *mGame; + Window *mCurrentDialog; + QuitDialog *mQuitDialog; + Button *mSetupButton; + Button *mVideoButton; + Button *mHelpButton; + Button *mAboutButton; + Button *mThemesButton; + Button *mPerfomanceButton; +#ifdef ANDROID + Button *mCloseButton; +#endif // ANDROID + + StateT mState; + StateT mOldState; + + Skin *mSkin; + int mButtonPadding; + int mButtonSpacing; + int mPing; + bool mConfigAutoSaved; +}; + +extern Client *client; +extern unsigned int mLastHost; +extern unsigned long mSearchHash; + +#endif // PROGS_MANAVERSE_CLIENT_H diff --git a/src/progs/manaverse/gui/viewport.cpp b/src/progs/manaverse/gui/viewport.cpp new file mode 100644 index 000000000..0d0a1abc4 --- /dev/null +++ b/src/progs/manaverse/gui/viewport.cpp @@ -0,0 +1,1153 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * 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 "progs/manaverse/gui/viewport.h" + +#include "actormanager.h" +#include "configuration.h" +#include "game.h" +#include "settings.h" +#include "sdlshared.h" +#include "textmanager.h" + +#include "being/flooritem.h" +#include "being/localplayer.h" +#include "being/playerinfo.h" + +#include "enums/resources/map/blockmask.h" +#include "enums/resources/map/mapitemtype.h" + +#include "gui/gui.h" +#include "gui/popupmanager.h" +#include "gui/userpalette.h" + +#include "gui/fonts/font.h" + +#include "gui/popups/beingpopup.h" +#include "gui/popups/popupmenu.h" +#include "gui/popups/textpopup.h" + +#include "gui/windows/ministatuswindow.h" + +#include "input/inputmanager.h" + +#include "utils/checkutils.h" +#include "utils/foreach.h" + +#include "resources/map/map.h" +#include "resources/map/mapitem.h" +#include "resources/map/speciallayer.h" + +#include "debug.h" + +Viewport *viewport = nullptr; + +extern volatile int tick_time; + +Viewport::Viewport() : + WindowContainer(nullptr), + MouseListener(), + ConfigListener(), + mMouseX(0), + mMouseY(0), + mMap(nullptr), + mHoverBeing(nullptr), + mHoverItem(nullptr), + mHoverSign(nullptr), + mScrollRadius(config.getIntValue("ScrollRadius")), + mScrollLaziness(config.getIntValue("ScrollLaziness")), + mScrollCenterOffsetX(config.getIntValue("ScrollCenterOffsetX")), + mScrollCenterOffsetY(config.getIntValue("ScrollCenterOffsetY")), + mMousePressX(0), + mMousePressY(0), + mPixelViewX(0), + mPixelViewY(0), + mMidTileX(0), + mMidTileY(0), + mViewXmax(0), + mViewYmax(0), + mLocalWalkTime(-1), + mCameraRelativeX(0), + mCameraRelativeY(0), + mShowBeingPopup(config.getBoolValue("showBeingPopup")), + mSelfMouseHeal(config.getBoolValue("selfMouseHeal")), + mEnableLazyScrolling(config.getBoolValue("enableLazyScrolling")), + mMouseDirectionMove(config.getBoolValue("mouseDirectionMove")), + mLongMouseClick(config.getBoolValue("longmouseclick")), + mAllowMoveByMouse(config.getBoolValue("allowMoveByMouse")), + mMouseClicked(false), + mPlayerFollowMouse(false) +{ + setOpaque(Opaque_false); + addMouseListener(this); + + config.addListener("ScrollLaziness", this); + config.addListener("ScrollRadius", this); + config.addListener("showBeingPopup", this); + config.addListener("selfMouseHeal", this); + config.addListener("enableLazyScrolling", this); + config.addListener("mouseDirectionMove", this); + config.addListener("longmouseclick", this); + config.addListener("allowMoveByMouse", this); + + setFocusable(true); + updateMidVars(); +} + +Viewport::~Viewport() +{ + config.removeListeners(this); + CHECKLISTENERS +} + +void Viewport::setMap(Map *const map) +{ + if ((mMap != nullptr) && (map != nullptr)) + map->setDrawLayersFlags(mMap->getDrawLayersFlags()); + mMap = map; + updateMaxVars(); +} + +void Viewport::draw(Graphics *const graphics) +{ + BLOCK_START("Viewport::draw 1") + static int lastTick = tick_time; + + if ((mMap == nullptr) || (localPlayer == nullptr)) + { + graphics->setColor(Color(64, 64, 64, 255)); + graphics->fillRectangle( + Rect(0, 0, getWidth(), getHeight())); + BLOCK_END("Viewport::draw 1") + return; + } + + // Avoid freaking out when tick_time overflows + if (tick_time < lastTick) + lastTick = tick_time; + + // Calculate viewpoint + + const int player_x = localPlayer->mPixelX - mMidTileX; + const int player_y = localPlayer->mPixelY - mMidTileY; + + if (mScrollLaziness < 1) + mScrollLaziness = 1; // Avoids division by zero + + if (mEnableLazyScrolling) + { + int cnt = 0; + + // Apply lazy scrolling + while (lastTick < tick_time && cnt < mapTileSize) + { + if (player_x > mPixelViewX + mScrollRadius) + { + mPixelViewX += CAST_S32( + static_cast(player_x + - mPixelViewX - mScrollRadius) / + static_cast(mScrollLaziness)); + } + if (player_x < mPixelViewX - mScrollRadius) + { + mPixelViewX += CAST_S32( + static_cast(player_x + - mPixelViewX + mScrollRadius) / + static_cast(mScrollLaziness)); + } + if (player_y > mPixelViewY + mScrollRadius) + { + mPixelViewY += CAST_S32( + static_cast(player_y + - mPixelViewY - mScrollRadius) / + static_cast(mScrollLaziness)); + } + if (player_y < mPixelViewY - mScrollRadius) + { + mPixelViewY += CAST_S32( + static_cast(player_y + - mPixelViewY + mScrollRadius) / + static_cast(mScrollLaziness)); + } + lastTick ++; + cnt ++; + } + + // Auto center when player is off screen + if (cnt > 30 || player_x - mPixelViewX + > graphics->mWidth / 2 || mPixelViewX + - player_x > graphics->mWidth / 2 || mPixelViewY + - player_y > graphics->getHeight() / 2 || player_y + - mPixelViewY > graphics->getHeight() / 2) + { + if (player_x <= 0 || player_y <= 0) + { + logger->log("incorrect player position: %d, %d, %d, %d", + player_x, player_y, mPixelViewX, mPixelViewY); + logger->log("tile position: %d, %d", + localPlayer->getTileX(), localPlayer->getTileY()); + } + mPixelViewX = player_x; + mPixelViewY = player_y; + } + } + else + { + mPixelViewX = player_x; + mPixelViewY = player_y; + } + + if (mPixelViewX < 0) + mPixelViewX = 0; + if (mPixelViewY < 0) + mPixelViewY = 0; + if (mPixelViewX > mViewXmax) + mPixelViewX = mViewXmax; + if (mPixelViewY > mViewYmax) + mPixelViewY = mViewYmax; + + // Draw tiles and sprites + mMap->draw(graphics, mPixelViewX, mPixelViewY); + + const MapTypeT drawType = settings.mapDrawType; + if (drawType != MapType::NORMAL) + { + if (drawType != MapType::SPECIAL4) + { + mMap->drawCollision(graphics, mPixelViewX, + mPixelViewY, drawType); + } + if (drawType == MapType::DEBUGTYPE) + drawDebugPath(graphics); + } + + if (localPlayer->getCheckNameSetting()) + { + localPlayer->setCheckNameSetting(false); + localPlayer->setName(localPlayer->getName()); + } + + // Draw text + if (textManager != nullptr) + textManager->draw(graphics, mPixelViewX, mPixelViewY); + + // Draw player names, speech, and emotion sprite as needed + const ActorSprites &actors = actorManager->getAll(); + FOR_EACH (ActorSpritesIterator, it, actors) + { + if ((*it)->getType() == ActorType::FloorItem) + continue; + Being *const b = static_cast(*it); + b->drawEmotion(graphics, mPixelViewX, mPixelViewY); + b->drawSpeech(mPixelViewX, mPixelViewY); + } + + if (miniStatusWindow != nullptr) + miniStatusWindow->drawIcons(graphics); + + // Draw contained widgets + WindowContainer::draw(graphics); + BLOCK_END("Viewport::draw 1") +} + +void Viewport::safeDraw(Graphics *const graphics) +{ + Viewport::draw(graphics); +} + +void Viewport::logic() +{ + BLOCK_START("Viewport::logic") + // Make the player follow the mouse position + // if the mouse is dragged elsewhere than in a window. + Gui::getMouseState(mMouseX, mMouseY); + BLOCK_END("Viewport::logic") +} + +void Viewport::followMouse() +{ + if (gui == nullptr) + return; + const MouseStateType button = Gui::getMouseState(mMouseX, mMouseY); + // If the left button is dragged + if (mPlayerFollowMouse && ((button & SDL_BUTTON(1)) != 0)) + { + // We create a mouse event and send it to mouseDragged. + const MouseEvent event(nullptr, + MouseEventType::DRAGGED, + MouseButton::LEFT, + mMouseX, + mMouseY, + 0); + + walkByMouse(event); + } +} + +void Viewport::drawDebugPath(Graphics *const graphics) +{ + if (localPlayer == nullptr || + userPalette == nullptr || + actorManager == nullptr || + mMap == nullptr || + gui == nullptr) + { + return; + } + + Gui::getMouseState(mMouseX, mMouseY); + + static Path debugPath; + static Vector lastMouseDestination = Vector(0.0F, 0.0F, 0.0F); + const int mousePosX = mMouseX + mPixelViewX; + const int mousePosY = mMouseY + mPixelViewY; + Vector mouseDestination(mousePosX, mousePosY, 0.0F); + + if (mouseDestination.x != lastMouseDestination.x + || mouseDestination.y != lastMouseDestination.y) + { + debugPath = mMap->findPath( + CAST_S32(localPlayer->mPixelX - mapTileSize / 2) / mapTileSize, + CAST_S32(localPlayer->mPixelY - mapTileSize) / mapTileSize, + mousePosX / mapTileSize, + mousePosY / mapTileSize, + localPlayer->getBlockWalkMask(), + 500); + lastMouseDestination = mouseDestination; + } + drawPath(graphics, debugPath, userPalette->getColorWithAlpha( + UserColorId::ROAD_POINT)); + + const ActorSprites &actors = actorManager->getAll(); + FOR_EACH (ActorSpritesConstIterator, it, actors) + { + const Being *const being = dynamic_cast(*it); + if ((being != nullptr) && being != localPlayer) + { + const Path &beingPath = being->getPath(); + drawPath(graphics, beingPath, userPalette->getColorWithAlpha( + UserColorId::ROAD_POINT)); + } + } +} + +void Viewport::drawPath(Graphics *const graphics, + const Path &path, + const Color &color) const +{ + graphics->setColor(color); + Font *const font = getFont(); + + int cnt = 1; + FOR_EACH (Path::const_iterator, i, path) + { + const int squareX = i->x * mapTileSize - mPixelViewX + 12; + const int squareY = i->y * mapTileSize - mPixelViewY + 12; + + graphics->fillRectangle(Rect(squareX, squareY, 8, 8)); + if (mMap != nullptr) + { + const std::string str = toString(cnt); + font->drawString(graphics, + color, color, + str, + squareX + 4 - font->getWidth(str) / 2, + squareY + 12); + } + cnt ++; + } +} + +bool Viewport::openContextMenu(const MouseEvent &event) +{ + mPlayerFollowMouse = false; + const int eventX = event.getX(); + const int eventY = event.getY(); + if (popupMenu == nullptr) + return false; + if (mHoverBeing != nullptr) + { + validateSpeed(); + if (actorManager != nullptr) + { + STD_VECTOR beings; + const int x = mMouseX + mPixelViewX; + const int y = mMouseY + mPixelViewY; + actorManager->findBeingsByPixel(beings, x, y, AllPlayers_true); + if (beings.size() > 1) + popupMenu->showPopup(eventX, eventY, beings); + else + popupMenu->showPopup(eventX, eventY, mHoverBeing); + return true; + } + } + else if (mHoverItem != nullptr) + { + validateSpeed(); + popupMenu->showPopup(eventX, eventY, mHoverItem); + return true; + } + else if (mHoverSign != nullptr) + { + validateSpeed(); + popupMenu->showPopup(eventX, eventY, mHoverSign); + return true; + } + else if (settings.cameraMode != 0U) + { + if (mMap == nullptr) + return false; + popupMenu->showMapPopup(eventX, eventY, + (mMouseX + mPixelViewX) / mMap->getTileWidth(), + (mMouseY + mPixelViewY) / mMap->getTileHeight(), + false); + return true; + } + return false; +} + +bool Viewport::leftMouseAction() +{ + const bool stopAttack = inputManager.isActionActive( + InputAction::STOP_ATTACK); + // Interact with some being + if (mHoverBeing != nullptr) + { + if (!mHoverBeing->isAlive()) + return true; + + if (mHoverBeing->canTalk()) + { + validateSpeed(); + mHoverBeing->talkTo(); + return true; + } + + const ActorTypeT type = mHoverBeing->getType(); + switch (type) + { + case ActorType::Player: + validateSpeed(); + if (actorManager != nullptr) + { +#ifdef TMWA_SUPPORT + if (localPlayer != mHoverBeing || mSelfMouseHeal) + actorManager->heal(mHoverBeing); +#endif // TMWA_SUPPORT + + if (localPlayer == mHoverBeing && + mHoverItem != nullptr) + { + localPlayer->pickUp(mHoverItem); + } + return true; + } + break; + case ActorType::Monster: + case ActorType::Npc: + case ActorType::SkillUnit: + if (!stopAttack) + { + if (localPlayer->withinAttackRange(mHoverBeing, + false, 0) || + inputManager.isActionActive(InputAction::ATTACK)) + { + validateSpeed(); + if (!mStatsReUpdated && localPlayer != mHoverBeing) + { + localPlayer->attack(mHoverBeing, + !inputManager.isActionActive( + InputAction::STOP_ATTACK), + false); + return true; + } + } + else if (!inputManager.isActionActive( + InputAction::ATTACK)) + { + validateSpeed(); + if (!mStatsReUpdated && localPlayer != mHoverBeing) + { + localPlayer->setGotoTarget(mHoverBeing); + return true; + } + } + } + break; + case ActorType::FloorItem: + case ActorType::Portal: + case ActorType::Pet: + case ActorType::Mercenary: + case ActorType::Homunculus: + case ActorType::Elemental: + break; + case ActorType::Unknown: + case ActorType::Avatar: + default: + reportAlways("Left click on unknown actor type: %d", + CAST_S32(type)) + break; + } + } + // Picks up a item if we clicked on one + if (mHoverItem != nullptr) + { + validateSpeed(); + localPlayer->pickUp(mHoverItem); + } + else if (stopAttack) + { + if (mMap != nullptr) + { + const int mouseTileX = (mMouseX + mPixelViewX) + / mMap->getTileWidth(); + const int mouseTileY = (mMouseY + mPixelViewY) + / mMap->getTileHeight(); + inputManager.executeChatCommand(InputAction::PET_MOVE, + strprintf("%d %d", mouseTileX, mouseTileY), + nullptr); + } + return true; + } + // Just walk around + else if (!inputManager.isActionActive(InputAction::ATTACK) && + localPlayer->canMove()) + { + validateSpeed(); + localPlayer->stopAttack(false); + localPlayer->cancelFollow(); + mPlayerFollowMouse = mAllowMoveByMouse; + if (mPlayerFollowMouse) + { + // Make the player go to the mouse position + followMouse(); + } + } + return false; +} + +void Viewport::mousePressed(MouseEvent &event) +{ + if (event.getSource() != this || event.isConsumed()) + return; + + // Check if we are alive and kickin' + if ((mMap == nullptr) || (localPlayer == nullptr)) + return; + + // Check if we are busy + // if commented, allow context menu if npc dialog open + if (PlayerInfo::isTalking()) + { + mMouseClicked = false; + return; + } + + mMouseClicked = true; + + mMousePressX = event.getX(); + mMousePressY = event.getY(); + const MouseButtonT eventButton = event.getButton(); + + // Right click might open a popup + if (eventButton == MouseButton::RIGHT) + { + if (openContextMenu(event)) + return; + } + + // If a popup is active, just remove it + if (PopupManager::isPopupMenuVisible()) + { + mPlayerFollowMouse = false; + PopupManager::hidePopupMenu(); + return; + } + + // Left click can cause different actions + if (!mLongMouseClick && eventButton == MouseButton::LEFT) + { + if (leftMouseAction()) + { + mPlayerFollowMouse = false; + return; + } + } + else if (eventButton == MouseButton::MIDDLE) + { + mPlayerFollowMouse = false; + validateSpeed(); + // Find the being nearest to the clicked position + if (actorManager != nullptr) + { + const int pixelX = mMousePressX + mPixelViewX; + const int pixelY = mMousePressY + mPixelViewY; + Being *const target = actorManager->findNearestLivingBeing( + pixelX, pixelY, 20, ActorType::Monster, nullptr); + + if (target != nullptr) + localPlayer->setTarget(target); + } + } +} + +void Viewport::getMouseTile(int &destX, int &destY) const +{ + getMouseTile(mMouseX, mMouseY, destX, destY); +} + +void Viewport::getMouseTile(const int x, const int y, + int &destX, int &destY) const +{ + if (mMap == nullptr) + return; + const int tw = mMap->getTileWidth(); + const int th = mMap->getTileHeight(); + destX = CAST_S32(x + mPixelViewX) + / static_cast(tw); + + if (mMap->isHeightsPresent()) + { + const int th2 = th / 2; + const int clickY = y + mPixelViewY - th2; + destY = y + mPixelViewY; + int newDiffY = 1000000; + const int heightTiles = mainGraphics->mHeight / th; + const int tileViewY = mPixelViewY / th; + for (int f = tileViewY; f < tileViewY + heightTiles; f ++) + { + if (!mMap->getWalk(destX, + f, + BlockMask::WALL | + BlockMask::AIR | + BlockMask::WATER | + BlockMask::PLAYERWALL)) + { + continue; + } + + const int offset = mMap->getHeightOffset( + destX, f) * th2; + const int pixelF = f * th; + const int diff = abs(clickY + offset - pixelF); + if (diff < newDiffY) + { + destY = pixelF; + newDiffY = diff; + } + } + destY /= 32; + } + else + { + destY = CAST_S32((y + mPixelViewY) / static_cast(th)); + } +} + +void Viewport::walkByMouse(const MouseEvent &event) +{ + if ((mMap == nullptr) || (localPlayer == nullptr)) + return; + if (mPlayerFollowMouse + && !inputManager.isActionActive(InputAction::STOP_ATTACK) + && !inputManager.isActionActive(InputAction::UNTARGET)) + { + if (!mMouseDirectionMove) + mPlayerFollowMouse = false; + if (mLocalWalkTime != localPlayer->getActionTime()) + { + mLocalWalkTime = cur_time; + localPlayer->unSetPickUpTarget(); + int playerX = localPlayer->getTileX(); + int playerY = localPlayer->getTileY(); + if (mMouseDirectionMove) + { + const int width = mainGraphics->mWidth / 2; + const int height = mainGraphics->mHeight / 2; + const float wh = static_cast(width) + / static_cast(height); + int x = event.getX() - width; + int y = event.getY() - height; + if ((x == 0) && (y == 0)) + return; + const int x2 = abs(x); + const int y2 = abs(y); + const float diff = 2; + int dx = 0; + int dy = 0; + if (x2 > y2) + { + if (y2 != 0 && + static_cast(x2) / static_cast(y2) / + wh > diff) + { + y = 0; + } + } + else + { + if ((x2 != 0) && y2 * wh / x2 > diff) + x = 0; + } + if (x > 0) + dx = 1; + else if (x < 0) + dx = -1; + if (y > 0) + dy = 1; + else if (y < 0) + dy = -1; + + if (mMap->getWalk(playerX + dx, + playerY + dy, + BlockMask::WALL | + BlockMask::AIR | + BlockMask::WATER | + BlockMask::PLAYERWALL)) + { + localPlayer->navigateTo(playerX + dx, playerY + dy); + } + else + { + if ((dx != 0) && (dy != 0)) + { + // try avoid diagonal collision + if (x2 > y2) + { + if (mMap->getWalk(playerX + dx, + playerY, + BlockMask::WALL | + BlockMask::AIR | + BlockMask::WATER | + BlockMask::PLAYERWALL)) + { + dy = 0; + } + else + { + dx = 0; + } + } + else + { + if (mMap->getWalk(playerX, + playerY + dy, + BlockMask::WALL | + BlockMask::AIR | + BlockMask::WATER | + BlockMask::PLAYERWALL)) + { + dx = 0; + } + else + { + dy = 0; + } + } + } + else + { + // try avoid vertical or horisontal collision + if (dx == 0) + { + if (mMap->getWalk(playerX + 1, + playerY + dy, + BlockMask::WALL | + BlockMask::AIR | + BlockMask::WATER | + BlockMask::PLAYERWALL)) + { + dx = 1; + } + if (mMap->getWalk(playerX - 1, + playerY + dy, + BlockMask::WALL | + BlockMask::AIR | + BlockMask::WATER | + BlockMask::PLAYERWALL)) + { + dx = -1; + } + } + if (dy == 0) + { + if (mMap->getWalk(playerX + dx, + playerY + 1, + BlockMask::WALL | + BlockMask::AIR | + BlockMask::WATER | + BlockMask::PLAYERWALL)) + { + dy = 1; + } + if (mMap->getWalk(playerX + dx, + playerY - 1, + BlockMask::WALL | + BlockMask::AIR | + BlockMask::WATER | + BlockMask::PLAYERWALL)) + { + dy = -1; + } + } + } + localPlayer->navigateTo(playerX + dx, playerY + dy); + } + } + else + { + int destX; + int destY; + getMouseTile(event.getX(), event.getY(), + destX, destY); + if (playerX != destX || playerY != destY) + { + if (!localPlayer->navigateTo(destX, destY)) + { + if (playerX > destX) + playerX --; + else if (playerX < destX) + playerX ++; + if (playerY > destY) + playerY --; + else if (playerY < destY) + playerY ++; + if (mMap->getWalk(playerX, playerY, 0)) + localPlayer->navigateTo(playerX, playerY); + } + } + } + } + } +} + +void Viewport::mouseDragged(MouseEvent &event) +{ + if (event.getSource() != this || event.isConsumed()) + { + mPlayerFollowMouse = false; + return; + } + if (mAllowMoveByMouse && + mMouseClicked && + (localPlayer != nullptr) && + localPlayer->canMove()) + { + if (abs(event.getX() - mMousePressX) > 32 + || abs(event.getY() - mMousePressY) > 32) + { + mPlayerFollowMouse = true; + } + + walkByMouse(event); + } +} + +void Viewport::mouseReleased(MouseEvent &event) +{ + mPlayerFollowMouse = false; + mLocalWalkTime = -1; + if (mLongMouseClick && mMouseClicked) + { + mMouseClicked = false; + if (event.getSource() != this || event.isConsumed()) + return; + const MouseButtonT eventButton = event.getButton(); + if (eventButton == MouseButton::LEFT) + { + // long button press + if ((gui != nullptr) && gui->isLongPress()) + { + if (openContextMenu(event)) + { + gui->resetClickCount(); + return; + } + } + else + { + if (leftMouseAction()) + return; + } + walkByMouse(event); + } + } +} + +void Viewport::optionChanged(const std::string &name) +{ + if (name == "ScrollLaziness") + mScrollLaziness = config.getIntValue("ScrollLaziness"); + else if (name == "ScrollRadius") + mScrollRadius = config.getIntValue("ScrollRadius"); + else if (name == "showBeingPopup") + mShowBeingPopup = config.getBoolValue("showBeingPopup"); + else if (name == "selfMouseHeal") + mSelfMouseHeal = config.getBoolValue("selfMouseHeal"); + else if (name == "enableLazyScrolling") + mEnableLazyScrolling = config.getBoolValue("enableLazyScrolling"); + else if (name == "mouseDirectionMove") + mMouseDirectionMove = config.getBoolValue("mouseDirectionMove"); + else if (name == "longmouseclick") + mLongMouseClick = config.getBoolValue("longmouseclick"); + else if (name == "allowMoveByMouse") + mAllowMoveByMouse = config.getBoolValue("allowMoveByMouse"); +} + +void Viewport::mouseMoved(MouseEvent &event) +{ + // Check if we are on the map + if (mMap == nullptr || + localPlayer == nullptr || + actorManager == nullptr) + { + return; + } + + if (mMouseDirectionMove) + mPlayerFollowMouse = false; + + const int x = mMouseX + mPixelViewX; + const int y = mMouseY + mPixelViewY; + + ActorTypeT type = ActorType::Unknown; + mHoverBeing = actorManager->findBeingByPixel(x, y, AllPlayers_true); + if (mHoverBeing != nullptr) + type = mHoverBeing->getType(); + if ((mHoverBeing != nullptr) + && (type == ActorType::Player + || type == ActorType::Npc + || type == ActorType::Homunculus + || type == ActorType::Mercenary + || type == ActorType::Pet)) + { + PopupManager::hideTextPopup(); + if (mShowBeingPopup && (beingPopup != nullptr)) + beingPopup->show(mMouseX, mMouseY, mHoverBeing); + } + else + { + PopupManager::hideBeingPopup(); + } + + mHoverItem = actorManager->findItem(x / mMap->getTileWidth(), + y / mMap->getTileHeight()); + + if ((mHoverBeing == nullptr) && (mHoverItem == nullptr)) + { + const SpecialLayer *const specialLayer = mMap->getSpecialLayer(); + if (specialLayer != nullptr) + { + const int mouseTileX = (mMouseX + mPixelViewX) + / mMap->getTileWidth(); + const int mouseTileY = (mMouseY + mPixelViewY) + / mMap->getTileHeight(); + + mHoverSign = specialLayer->getTile(mouseTileX, mouseTileY); + if (mHoverSign != nullptr && + mHoverSign->getType() != MapItemType::EMPTY) + { + if (!mHoverSign->getComment().empty()) + { + PopupManager::hideBeingPopup(); + if (textPopup != nullptr) + { + textPopup->show(mMouseX, mMouseY, + mHoverSign->getComment()); + } + } + else + { + if (PopupManager::isTextPopupVisible()) + PopupManager::hideTextPopup(); + } + gui->setCursorType(Cursor::CURSOR_UP); + return; + } + } + } + if (!event.isConsumed() && + PopupManager::isTextPopupVisible()) + { + PopupManager::hideTextPopup(); + } + + if (mHoverBeing != nullptr) + { + switch (type) + { + case ActorType::Npc: + case ActorType::Monster: + case ActorType::Portal: + case ActorType::Pet: + case ActorType::Mercenary: + case ActorType::Homunculus: + case ActorType::SkillUnit: + case ActorType::Elemental: + gui->setCursorType(mHoverBeing->getHoverCursor()); + break; + + case ActorType::Avatar: + case ActorType::FloorItem: + case ActorType::Unknown: + case ActorType::Player: + default: + gui->setCursorType(Cursor::CURSOR_POINTER); + break; + } + } + // Item mouseover + else if (mHoverItem != nullptr) + { + gui->setCursorType(mHoverItem->getHoverCursor()); + } + else + { + gui->setCursorType(Cursor::CURSOR_POINTER); + } +} + +void Viewport::toggleMapDrawType() +{ + settings.mapDrawType = static_cast( + CAST_S32(settings.mapDrawType) + 1); + if (settings.mapDrawType > MapType::BLACKWHITE) + settings.mapDrawType = MapType::NORMAL; + if (mMap != nullptr) + mMap->setDrawLayersFlags(settings.mapDrawType); +} + +void Viewport::toggleCameraMode() +{ + settings.cameraMode ++; + if (settings.cameraMode > 1) + settings.cameraMode = 0; + if (settings.cameraMode == 0U) + { + mCameraRelativeX = 0; + mCameraRelativeY = 0; + updateMidVars(); + } + UpdateStatusListener::distributeEvent(); +} + +void Viewport::clearHover(const ActorSprite *const actor) +{ + if (mHoverBeing == actor) + mHoverBeing = nullptr; + + if (mHoverItem == actor) + mHoverItem = nullptr; +} + +void Viewport::cleanHoverItems() +{ + mHoverBeing = nullptr; + mHoverItem = nullptr; + mHoverSign = nullptr; +} + +void Viewport::moveCamera(const int dx, const int dy) +{ + mCameraRelativeX += dx; + mCameraRelativeY += dy; + updateMidVars(); +} + +void Viewport::moveCameraToActor(const BeingId actorId, + const int x, const int y) +{ + if ((localPlayer == nullptr) || (actorManager == nullptr)) + return; + + const Actor *const actor = actorManager->findBeing(actorId); + if (actor == nullptr) + return; + settings.cameraMode = 1; + mCameraRelativeX = actor->mPixelX - localPlayer->mPixelX + x; + mCameraRelativeY = actor->mPixelY - localPlayer->mPixelY + y; + updateMidVars(); +} + +void Viewport::moveCameraToPosition(const int x, const int y) +{ + if (localPlayer == nullptr) + return; + + settings.cameraMode = 1; + mCameraRelativeX = x - localPlayer->mPixelX; + mCameraRelativeY = y - localPlayer->mPixelY; + updateMidVars(); +} + +void Viewport::moveCameraRelative(const int x, const int y) +{ + settings.cameraMode = 1; + mCameraRelativeX += x; + mCameraRelativeY += y; + updateMidVars(); +} + +void Viewport::returnCamera() +{ + settings.cameraMode = 0; + mCameraRelativeX = 0; + mCameraRelativeY = 0; + updateMidVars(); +} + +void Viewport::validateSpeed() +{ + if (!inputManager.isActionActive(InputAction::TARGET_ATTACK) && + !inputManager.isActionActive(InputAction::ATTACK)) + { + if (Game::instance() != nullptr) + Game::instance()->setValidSpeed(); + } +} + +void Viewport::updateMidVars() +{ + mMidTileX = (mainGraphics->mWidth + mScrollCenterOffsetX) / 2 + - mCameraRelativeX; + mMidTileY = (mainGraphics->mHeight + mScrollCenterOffsetY) / 2 + - mCameraRelativeY; +} + +void Viewport::updateMaxVars() +{ + if (mMap == nullptr) + return; + mViewXmax = mMap->getWidth() * mMap->getTileWidth() + - mainGraphics->mWidth; + mViewYmax = mMap->getHeight() * mMap->getTileHeight() + - mainGraphics->mHeight; +} + +void Viewport::videoResized() +{ + updateMidVars(); + updateMaxVars(); + if (mMap != nullptr) + mMap->screenResized(); +} diff --git a/src/progs/manaverse/gui/viewport.h b/src/progs/manaverse/gui/viewport.h new file mode 100644 index 000000000..781f4255f --- /dev/null +++ b/src/progs/manaverse/gui/viewport.h @@ -0,0 +1,250 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * 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 . + */ + +#ifndef PROGS_MANAVERSE_GUI_VIEWPORT_H +#define PROGS_MANAVERSE_GUI_VIEWPORT_H + +#include "position.h" + +#include "enums/simpletypes/beingid.h" + +#include "gui/widgets/windowcontainer.h" + +#include "listeners/mouselistener.h" + +class ActorSprite; +class Being; +class FloorItem; +class Graphics; +class Map; +class MapItem; + +/** + * The viewport on the map. Displays the current map and handles mouse input + * and the popup menu. + */ +class Viewport final : public WindowContainer, + public MouseListener, + public ConfigListener +{ + public: + /** + * Constructor. + */ + Viewport(); + + A_DELETE_COPY(Viewport) + + /** + * Destructor. + */ + ~Viewport() override final; + + /** + * Sets the map displayed by the viewport. + */ + void setMap(Map *const map); + + /** + * Draws the viewport. + */ + void draw(Graphics *const graphics) override final A_NONNULL(2); + + void safeDraw(Graphics *const graphics) override final A_NONNULL(2); + + /** + * Implements player to keep following mouse. + */ + void logic() override final; + + /** + * Toggles whether the path debug graphics are shown. normal, + * debug with all images and grid, debug with out big images + * and with out grid. + */ + void toggleMapDrawType(); + + void toggleCameraMode(); + + /** + * Handles mouse press on map. + */ + void mousePressed(MouseEvent &event) override final; + + /** + * Handles mouse move on map + */ + void mouseDragged(MouseEvent &event) override final; + + /** + * Handles mouse button release on map. + */ + void mouseReleased(MouseEvent &event) override final; + + /** + * Handles mouse move on map. + */ + void mouseMoved(MouseEvent &event) override final; + + /** + * A relevant config option changed. + */ + void optionChanged(const std::string &name) override final; + + /** + * Returns camera x offset in pixels. + */ + int getCameraX() const noexcept2 A_WARN_UNUSED + { return mPixelViewX; } + + /** + * Returns camera y offset in pixels. + */ + int getCameraY() const noexcept2 A_WARN_UNUSED + { return mPixelViewY; } + + /** + * Changes viewpoint by relative pixel coordinates. + */ + void scrollBy(const int x, const int y) + { mPixelViewX += x; mPixelViewY += y; } + + /** + * Clear all hover item, being etc + */ + void cleanHoverItems(); + + Map *getMap() const noexcept2 A_WARN_UNUSED + { return mMap; } + + void moveCamera(const int dx, const int dy); + + int getCameraRelativeX() const noexcept2 A_WARN_UNUSED + { return mCameraRelativeX; } + + int getCameraRelativeY() const noexcept2 A_WARN_UNUSED + { return mCameraRelativeY; } + + void setCameraRelativeX(const int n) + { mCameraRelativeX = n; updateMidVars(); } + + void setCameraRelativeY(const int n) + { mCameraRelativeY = n; updateMidVars(); } + + void moveCameraToActor(const BeingId actorId, + const int x, + const int y); + + void moveCameraToPosition(const int x, const int y); + + void moveCameraRelative(const int x, const int y); + + void returnCamera(); + + void getMouseTile(int &destX, int &destY) const; + + void videoResized(); + + int mMouseX; /**< Current mouse position in pixels. */ + int mMouseY; /**< Current mouse position in pixels. */ + + protected: + friend class ActorManager; + + /// Clears any matching hovers + void clearHover(const ActorSprite *const actor); + + void updateMidVars(); + + void updateMaxVars(); + + static void validateSpeed(); + + private: + /** + * Finds a path from the player to the mouse, and draws it. This is for + * debug purposes. + */ + void drawDebugPath(Graphics *const graphics) A_NONNULL(2); + + /** + * Draws the given path. + */ + void drawPath(Graphics *const graphics, + const Path &path, + const Color &color) + const A_NONNULL(2); + + bool leftMouseAction(); + + bool openContextMenu(const MouseEvent &event); + + void walkByMouse(const MouseEvent &event); + + void getMouseTile(const int x, + const int y, + int &destX, + int &destY) const; + + /** + * Make the player go to the mouse position. + */ + void followMouse(); + + Map *mMap; /**< The current map. */ + + Being *mHoverBeing; /**< Being mouse is currently over. */ + FloorItem *mHoverItem; /**< FloorItem mouse is currently over. */ + MapItem *mHoverSign; /**< Map sign mouse is currently over. */ + + int mScrollRadius; + int mScrollLaziness; + int mScrollCenterOffsetX; + int mScrollCenterOffsetY; + int mMousePressX; + int mMousePressY; + int mPixelViewX; /**< Current viewpoint in pixels. */ + int mPixelViewY; /**< Current viewpoint in pixels. */ + int mMidTileX; + int mMidTileY; + int mViewXmax; + int mViewYmax; + + time_t mLocalWalkTime; + + int mCameraRelativeX; + int mCameraRelativeY; + + bool mShowBeingPopup; + bool mSelfMouseHeal; + bool mEnableLazyScrolling; + bool mMouseDirectionMove; + bool mLongMouseClick; + bool mAllowMoveByMouse; + bool mMouseClicked; + bool mPlayerFollowMouse; +}; + +extern Viewport *viewport; /**< The viewport. */ + +#endif // PROGS_MANAVERSE_GUI_VIEWPORT_H diff --git a/src/render/mobileopengl2graphics.cpp b/src/render/mobileopengl2graphics.cpp index 7c484a2c6..ef2a248af 100644 --- a/src/render/mobileopengl2graphics.cpp +++ b/src/render/mobileopengl2graphics.cpp @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -169,7 +170,7 @@ void MobileOpenGL2Graphics::postInit() restrict2 if (mProgram == nullptr) { graphicsManager.logError(); - logger->safeError("Shader creation error. See manaplus.log."); + logger->safeError("Shader creation error. See manaverse.log."); } mProgramId = mProgram->getProgramId(); if (mProgramId == 0U) diff --git a/src/render/modernopenglgraphics.cpp b/src/render/modernopenglgraphics.cpp index 95e7140c0..afc424f6e 100644 --- a/src/render/modernopenglgraphics.cpp +++ b/src/render/modernopenglgraphics.cpp @@ -2,7 +2,8 @@ * The ManaPlus Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -174,7 +175,7 @@ void ModernOpenGLGraphics::postInit() restrict2 if (mProgram == nullptr) { graphicsManager.logError(); - logger->safeError("Shader creation error. See manaplus.log."); + logger->safeError("Shader creation error. See manaverse.log."); } mProgramId = mProgram->getProgramId(); if (mProgramId == 0U) diff --git a/src/resources/db/emotedb.cpp b/src/resources/db/emotedb.cpp index 25501eaa1..301e35108 100644 --- a/src/resources/db/emotedb.cpp +++ b/src/resources/db/emotedb.cpp @@ -1,7 +1,8 @@ /* * The ManaPlus Client * Copyright (C) 2009 Aethyra Development Team - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -64,7 +65,7 @@ void EmoteDB::load() loadXmlFile(paths.getStringValue("emotesFile"), SkipError_false); loadXmlFile(paths.getStringValue("emotesPatchFile"), SkipError_true); loadXmlDir("emotesPatchDir", loadXmlFile) - loadSpecialXmlFile("graphics/sprites/manaplus_emotes.xml", + loadSpecialXmlFile("graphics/sprites/manaverse_emotes.xml", SkipError_false); mLoaded = true; @@ -156,7 +157,7 @@ void EmoteDB::loadSpecialXmlFile(const std::string &fileName, if ((rootNode == nullptr) || !xmlNameEqual(rootNode, "emotes")) { logger->log1("Emote Database: Error while loading" - " manaplus_emotes.xml!"); + " manaverse_emotes.xml!"); return; } @@ -179,7 +180,7 @@ void EmoteDB::loadSpecialXmlFile(const std::string &fileName, if (id == -1) { reportAlways("Emote Database: Emote with missing ID in " - "manaplus_emotes.xml!") + "manaverse_emotes.xml!") continue; } const int altId = XML::getProperty(emoteNode, "altid", -1); diff --git a/src/test/testlauncher.cpp b/src/test/testlauncher.cpp index 6dea65522..39b9b6fda 100644 --- a/src/test/testlauncher.cpp +++ b/src/test/testlauncher.cpp @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -415,9 +416,9 @@ int TestLauncher::testInternal() Image *img[4]; img[0] = Theme::getImageFromTheme( - "graphics/sprites/manaplus_emotions.png"); + "graphics/sprites/manaverse_emotions.png"); img[1] = Theme::getImageFromTheme( - "graphics/sprites/manaplus_emotions.png"); + "graphics/sprites/manaverse_emotions.png"); img[2] = Theme::getImageFromTheme("graphics/sprites/arrow_left.png"); img[3] = Theme::getImageFromTheme("graphics/sprites/arrow_right.png"); int idx = 0; diff --git a/src/test/testmain.cpp b/src/test/testmain.cpp index 38f35d335..1ca8adb1e 100644 --- a/src/test/testmain.cpp +++ b/src/test/testmain.cpp @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * diff --git a/src/unittests/utils/xmlutils.cc b/src/unittests/utils/xmlutils.cc index 482580af5..64ca7e41f 100644 --- a/src/unittests/utils/xmlutils.cc +++ b/src/unittests/utils/xmlutils.cc @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2014-2019 The ManaPlus Developers + * Copyright (C) 2014-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -140,7 +141,7 @@ TEST_CASE("xmlutils readXmlStringMap 1", "") std::map arr; - readXmlStringMap("graphics/sprites/manaplus_emotes.xml", + readXmlStringMap("graphics/sprites/manaverse_emotes.xml", "emotes", "emote", "sprite", diff --git a/src/utils/gettexthelper.cpp b/src/utils/gettexthelper.cpp index 66ebcb469..61a413866 100644 --- a/src/utils/gettexthelper.cpp +++ b/src/utils/gettexthelper.cpp @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2011-2019 The ManaPlus Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -107,7 +108,7 @@ void GettextHelper::initLang() #else // ENABLE_PORTABLE #ifdef __APPLE__ bindTextDomain((std::string(VirtFs::getBaseDir()) - .append("ManaPlus.app/Contents/Resources/locale/")).c_str()); + .append("ManaVerse.app/Contents/Resources/locale/")).c_str()); #else // __APPLE__ bindTextDomain(LOCALEDIR); @@ -129,8 +130,8 @@ void GettextHelper::initLang() else logger->log("locale empty"); } - bind_textdomain_codeset("manaplus", "UTF-8"); - textdomain("manaplus"); + bind_textdomain_codeset("manaverse", "UTF-8"); + textdomain("manaverse"); #elif defined(ENABLE_CUSTOMNLS) mainTranslator = new PoDict("en"); setLangEnv(); @@ -140,7 +141,7 @@ void GettextHelper::initLang() #ifdef ENABLE_NLS void GettextHelper::bindTextDomain(const char *const path) { - const char *const dir = bindtextdomain("manaplus", path); + const char *const dir = bindtextdomain("manaverse", path); if (dir) logger->log("bindtextdomain: %s", dir); else diff --git a/src/utils/translation/translationmanager.cpp b/src/utils/translation/translationmanager.cpp index c5bad1a55..49cadaf63 100644 --- a/src/utils/translation/translationmanager.cpp +++ b/src/utils/translation/translationmanager.cpp @@ -1,6 +1,7 @@ /* * The ManaPlus Client - * Copyright (C) 2012-2019 The ManaPlus Developers + * Copyright (C) 2012-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * @@ -60,7 +61,7 @@ void TranslationManager::loadDictionaryLang() void TranslationManager::loadGettextLang() { delete mainTranslator; - mainTranslator = loadLang(getLang(), "manaplus/", nullptr); + mainTranslator = loadLang(getLang(), "manaverse/", nullptr); } #endif // ENABLE_CUSTOMNLS diff --git a/tools/ci/branches/.gitlab-ci_header.yml b/tools/ci/branches/.gitlab-ci_header.yml index faeae1416..122e1d3d7 100644 --- a/tools/ci/branches/.gitlab-ci_header.yml +++ b/tools/ci/branches/.gitlab-ci_header.yml @@ -12,7 +12,7 @@ before_script: - ":; ${DOCKERRETRY} ${PMUPDATE} >logs/apt.log" - ":; ${DOCKERRETRY} ${PMINSTALL} ${PACKAGES} >>logs/apt.log" - ":; ./tools/ci/scripts/clonesrc.sh" - - ":; cd manaplus" + - ":; cd manaverse" image: debian:unstable diff --git a/tools/ci/branches/ci_checks/.gitlab-ci.yml b/tools/ci/branches/ci_checks/.gitlab-ci.yml index 57aa9ac1d..3864a34d8 100644 --- a/tools/ci/branches/ci_checks/.gitlab-ci.yml +++ b/tools/ci/branches/ci_checks/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] diff --git a/tools/ci/branches/ci_clang4_5/.gitlab-ci.yml b/tools/ci/branches/ci_clang4_5/.gitlab-ci.yml index ebc9c99e1..e2b326ea7 100644 --- a/tools/ci/branches/ci_clang4_5/.gitlab-ci.yml +++ b/tools/ci/branches/ci_clang4_5/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] diff --git a/tools/ci/branches/ci_clang6/.gitlab-ci.yml b/tools/ci/branches/ci_clang6/.gitlab-ci.yml index 0ec29486d..c6542a05b 100644 --- a/tools/ci/branches/ci_clang6/.gitlab-ci.yml +++ b/tools/ci/branches/ci_clang6/.gitlab-ci.yml @@ -18,7 +18,7 @@ clang-6.0_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/clang60_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/clang60_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: debian:bullseye variables: @@ -34,7 +34,7 @@ clang-6.0_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/clang60_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/clang60_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:bullseye variables: @@ -49,7 +49,7 @@ clang-6.0_tests_i386: clang-6.0_tests_sdl2: stage: build script: - - ./tools/ci/jobs/clang60_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/clang60_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push image: debian:bullseye variables: @@ -64,7 +64,7 @@ clang-6.0_tests_sdl2: clang-6.0_tests_sdl2_i386: stage: build script: - - ./tools/ci/jobs/clang60_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/clang60_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:bullseye variables: diff --git a/tools/ci/branches/ci_clang7/.gitlab-ci.yml b/tools/ci/branches/ci_clang7/.gitlab-ci.yml index fd92572f6..26ac78154 100644 --- a/tools/ci/branches/ci_clang7/.gitlab-ci.yml +++ b/tools/ci/branches/ci_clang7/.gitlab-ci.yml @@ -18,7 +18,7 @@ clang-7.0_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/clang70_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/clang70_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: debian:buster variables: @@ -34,7 +34,7 @@ clang-7.0_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/clang70_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/clang70_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:buster variables: @@ -49,7 +49,7 @@ clang-7.0_tests_i386: clang-7.0_tests_sdl2: stage: build script: - - ./tools/ci/jobs/clang70_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/clang70_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push image: debian:buster variables: @@ -64,7 +64,7 @@ clang-7.0_tests_sdl2: clang-7.0_tests_sdl2_i386: stage: build script: - - ./tools/ci/jobs/clang70_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/clang70_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:buster variables: diff --git a/tools/ci/branches/ci_fedora/.gitlab-ci.yml b/tools/ci/branches/ci_fedora/.gitlab-ci.yml index 125b2f9d2..c25baf76f 100644 --- a/tools/ci/branches/ci_fedora/.gitlab-ci.yml +++ b/tools/ci/branches/ci_fedora/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -20,7 +20,7 @@ stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gccsnapshot_sanitize_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gccsnapshot_sanitize_tests.sh --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" <<: *job-push image: fedora:rawhide @@ -34,7 +34,7 @@ .fedora_gcc-snapshot_sanitize_sdl2_tests: stage: build script: - - ./tools/ci/jobs/gccsnapshot_sanitize_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gccsnapshot_sanitize_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" <<: *job-push image: fedora:rawhide @@ -49,7 +49,7 @@ fedora_gcc-snapshot_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gccsnapshot_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gccsnapshot_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: fedora:rawhide variables: @@ -62,7 +62,7 @@ fedora_gcc-snapshot_tests: fedora_gcc-snapshot_sdl2_tests: stage: build script: - - ./tools/ci/jobs/gccsnapshot_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gccsnapshot_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push image: fedora:rawhide variables: diff --git a/tools/ci/branches/ci_gcc-snapshot/.gitlab-ci.yml b/tools/ci/branches/ci_gcc-snapshot/.gitlab-ci.yml index 91d5117f4..d59a664dd 100644 --- a/tools/ci/branches/ci_gcc-snapshot/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc-snapshot/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] diff --git a/tools/ci/branches/ci_gcc10/.gitlab-ci.yml b/tools/ci/branches/ci_gcc10/.gitlab-ci.yml index 9acfd5a02..f5c71e33d 100644 --- a/tools/ci/branches/ci_gcc10/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc10/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] diff --git a/tools/ci/branches/ci_gcc10_tests/.gitlab-ci.yml b/tools/ci/branches/ci_gcc10_tests/.gitlab-ci.yml index 48caf86ff..886500d98 100644 --- a/tools/ci/branches/ci_gcc10_tests/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc10_tests/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -21,7 +21,7 @@ stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" <<: *job-push variables: @@ -39,7 +39,7 @@ stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-glibcdebug --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-glibcdebug --enable-unittests=doctest --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" <<: *job-push variables: @@ -56,7 +56,7 @@ gcc-10_doctest_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -73,7 +73,7 @@ gcc-10_tests_simd: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-10 g++-10 @@ -88,7 +88,7 @@ gcc-10_tests_O0: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-O0" @@ -104,7 +104,7 @@ gcc-10_tests_O1: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-O1" @@ -120,7 +120,7 @@ gcc-10_tests_lto: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-ffast-math -O10 -flto -fwhole-program -funswitch-loops" @@ -136,7 +136,7 @@ gcc-10_tests_lto_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:unstable variables: @@ -153,7 +153,7 @@ gcc-10_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -169,8 +169,8 @@ gcc-10_tests_flags: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame --enable-glibcdebug - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame --enable-stldebug + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame --enable-glibcdebug + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame --enable-stldebug <<: *job-push variables: PACKAGES: gcc-10 g++-10 @@ -185,7 +185,7 @@ gcc-10_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-10 g++-10 @@ -199,7 +199,7 @@ gcc-10_tests: gcc-10_sdl2_tests_i386: stage: build script: - - ./tools/ci/jobs/gcc10_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -215,7 +215,7 @@ gcc-10_sdl2_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -233,7 +233,7 @@ gcc-10_sdl2_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -252,7 +252,7 @@ gcc-10_separate_doctest: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh <<: *job-push variables: @@ -266,7 +266,7 @@ gcc-10_separate_doctest_sanitize: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -291,7 +291,7 @@ gcc-10_separate_doctest_sanitize: gcc-10_separate_doctest_sanitize_sdl2: stage: build script: - - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd --with-sdl2 + - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd --with-sdl2 - ./tools/ci/scripts/separateunittests.sh - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -317,7 +317,7 @@ gcc-10_separate_doctest_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh <<: *job-push image: i386/debian:unstable @@ -333,7 +333,7 @@ gcc-10_separate_doctest_i386: gcc-10_separate_doctest_sdl2_i386: stage: build script: - - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd --with-sdl2 + - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd --with-sdl2 - ./tools/ci/scripts/separateunittests.sh <<: *job-push image: i386/debian:unstable @@ -364,7 +364,7 @@ gcc-10_systemcatch_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --enable-unittests=systemcatch --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --enable-unittests=systemcatch --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-10 g++-10 @@ -380,7 +380,7 @@ gcc-10_systemdoctest_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --enable-unittests=systemdoctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --enable-unittests=systemdoctest --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-10 g++-10 @@ -396,7 +396,7 @@ gcc-10_unsigned_char_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-funsigned-char" @@ -411,7 +411,7 @@ gcc-10_unsigned_char_tests: gcc-10_sdl2_unsigned_char_tests: stage: build script: - - ./tools/ci/jobs/gcc10_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc10_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-funsigned-char" diff --git a/tools/ci/branches/ci_gcc3/.gitlab-ci.yml b/tools/ci/branches/ci_gcc3/.gitlab-ci.yml index 82b58be9b..958775269 100644 --- a/tools/ci/branches/ci_gcc3/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc3/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -22,7 +22,7 @@ gcc-3_sdl1: - ./tools/ci/jobs/gcc3.sh - ./tools/ci/scripts/runtests.sh - ./tools/ci/scripts/rundyecmd.sh - image: registry.gitlab.com/manaplus/images:gentoo_gcc3_sdl1 + image: registry.gitlab.com/manaverse/images:gentoo_gcc3_sdl1 <<: *job-push variables: PMUPDATE: "echo" @@ -36,7 +36,7 @@ gcc-3_sdl2: - ./tools/ci/jobs/gcc3.sh --with-sdl2 - ./tools/ci/scripts/runtests.sh - ./tools/ci/scripts/rundyecmd.sh - image: registry.gitlab.com/manaplus/images:gentoo_gcc3_sdl2 + image: registry.gitlab.com/manaverse/images:gentoo_gcc3_sdl2 <<: *job-push variables: PMUPDATE: "echo" diff --git a/tools/ci/branches/ci_gcc49/.gitlab-ci.yml b/tools/ci/branches/ci_gcc49/.gitlab-ci.yml index d5e2872df..b7b7c4083 100644 --- a/tools/ci/branches/ci_gcc49/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc49/.gitlab-ci.yml @@ -93,8 +93,8 @@ gcc-4.9_sdl2_sanitize: gentoo_gcc-4.9_tests: stage: build script: - - ./tools/ci/jobs/gcc49_tests.sh --without-dyecmd --without-manaplusgame - image: registry.gitlab.com/manaplus/images:gentoo_gcc49_sdl1 + - ./tools/ci/jobs/gcc49_tests.sh --without-dyecmd --without-manaversegame + image: registry.gitlab.com/manaverse/images:gentoo_gcc49_sdl1 <<: *job-push variables: PMUPDATE: "echo" @@ -107,8 +107,8 @@ gentoo_gcc-4.9_tests: gentoo_gcc-4.9_tests_sdl2: stage: build script: - - ./tools/ci/jobs/gcc49_tests.sh --without-dyecmd --without-manaplusgame --with-sdl2 - image: registry.gitlab.com/manaplus/images:gentoo_gcc49_sdl2 + - ./tools/ci/jobs/gcc49_tests.sh --without-dyecmd --without-manaversegame --with-sdl2 + image: registry.gitlab.com/manaverse/images:gentoo_gcc49_sdl2 <<: *job-push variables: PMUPDATE: "echo" diff --git a/tools/ci/branches/ci_gcc4x/.gitlab-ci.yml b/tools/ci/branches/ci_gcc4x/.gitlab-ci.yml index c657d6e08..f61d3385d 100644 --- a/tools/ci/branches/ci_gcc4x/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc4x/.gitlab-ci.yml @@ -37,7 +37,7 @@ gcc-4.1_sdl1: - ./tools/ci/jobs/gcc41.sh - ./tools/ci/scripts/runtests.sh - ./tools/ci/scripts/rundyecmd.sh - image: registry.gitlab.com/manaplus/images:gentoo_gcc41_sdl1 + image: registry.gitlab.com/manaverse/images:gentoo_gcc41_sdl1 <<: *job-push variables: PMUPDATE: "echo" @@ -53,7 +53,7 @@ gcc-4.1_sdl2: - ./tools/ci/jobs/gcc41.sh --with-sdl2 - ./tools/ci/scripts/runtests.sh - ./tools/ci/scripts/rundyecmd.sh - image: registry.gitlab.com/manaplus/images:gentoo_gcc41_sdl2 + image: registry.gitlab.com/manaverse/images:gentoo_gcc41_sdl2 <<: *job-push variables: PMUPDATE: "echo" @@ -69,7 +69,7 @@ gcc-4.3_sdl1: - ./tools/ci/jobs/gcc43.sh - ./tools/ci/scripts/runtests.sh - ./tools/ci/scripts/rundyecmd.sh - image: registry.gitlab.com/manaplus/images:gentoo_gcc43_sdl1 + image: registry.gitlab.com/manaverse/images:gentoo_gcc43_sdl1 <<: *job-push variables: PMUPDATE: "echo" @@ -85,7 +85,7 @@ gcc-4.3_sdl2: - ./tools/ci/jobs/gcc43.sh --with-sdl2 - ./tools/ci/scripts/runtests.sh - ./tools/ci/scripts/rundyecmd.sh - image: registry.gitlab.com/manaplus/images:gentoo_gcc43_sdl2 + image: registry.gitlab.com/manaverse/images:gentoo_gcc43_sdl2 <<: *job-push variables: PMUPDATE: "echo" diff --git a/tools/ci/branches/ci_gcc5/.gitlab-ci.yml b/tools/ci/branches/ci_gcc5/.gitlab-ci.yml index 63c86ffa1..db45550e3 100644 --- a/tools/ci/branches/ci_gcc5/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc5/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -71,7 +71,7 @@ gcc-5_sanitize_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc5_sanitize_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc5_sanitize_tests.sh --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" image: i386/ubuntu:xenial <<: *job-push @@ -88,7 +88,7 @@ gcc-5_sanitize_no_opengl_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc5_sanitize_tests.sh --without-opengl --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc5_sanitize_tests.sh --without-opengl --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" image: ubuntu:xenial <<: *job-push @@ -106,7 +106,7 @@ gcc-5_sanitize_no_opengl_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc5_sanitize_tests.sh --without-opengl --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc5_sanitize_tests.sh --without-opengl --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" image: i386/ubuntu:xenial <<: *job-push @@ -174,7 +174,7 @@ gcc-5_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc5_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc5_tests.sh --without-dyecmd --without-manaversegame image: i386/ubuntu:xenial <<: *job-push variables: @@ -189,8 +189,8 @@ gcc-5_tests_i386: gcc-5_sdl2_tests: stage: build script: - - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-manaplusgame --enable-glibcdebug - - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-manaplusgame --enable-stldebug + - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-manaversegame --enable-glibcdebug + - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-manaversegame --enable-stldebug image: ubuntu:xenial <<: *job-push variables: @@ -205,7 +205,7 @@ gcc-5_sdl2_tests: gcc-5_sdl2_tests_i386: stage: build script: - - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-dyecmd --without-manaversegame image: i386/ubuntu:xenial <<: *job-push variables: @@ -220,7 +220,7 @@ gcc-5_sdl2_tests_i386: gcc-5_sdl2_no_opengl_tests: stage: build script: - - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-opengl --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-opengl --without-dyecmd --without-manaversegame image: ubuntu:xenial <<: *job-push variables: @@ -235,7 +235,7 @@ gcc-5_sdl2_no_opengl_tests: gcc-5_sdl2_no_opengl_tests_i386: stage: build script: - - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-opengl --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc5_sdl2_tests.sh --without-opengl --without-dyecmd --without-manaversegame image: i386/ubuntu:xenial <<: *job-push variables: diff --git a/tools/ci/branches/ci_gcc6/.gitlab-ci.yml b/tools/ci/branches/ci_gcc6/.gitlab-ci.yml index 298300ff0..2e202b946 100644 --- a/tools/ci/branches/ci_gcc6/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc6/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] diff --git a/tools/ci/branches/ci_gcc6_tests/.gitlab-ci.yml b/tools/ci/branches/ci_gcc6_tests/.gitlab-ci.yml index f26477e95..54dbab03c 100644 --- a/tools/ci/branches/ci_gcc6_tests/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc6_tests/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -20,7 +20,7 @@ gcc-6_sanitize_doctest_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" image: debian:stretch <<: *job-push @@ -37,7 +37,7 @@ gcc-6_doctest_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame image: i386/debian:stretch <<: *job-push variables: @@ -53,7 +53,7 @@ gcc-6_tests_simd: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_tests_simd.sh --without-dyecmd --without-manaversegame image: debian:stretch <<: *job-push variables: @@ -69,7 +69,7 @@ gcc-6_tests_lto: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame image: debian:stretch <<: *job-push variables: @@ -86,7 +86,7 @@ gcc-6_tests_lto_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:stretch variables: @@ -103,7 +103,7 @@ gcc-6_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame image: debian:stretch <<: *job-push variables: @@ -119,7 +119,7 @@ gcc-6_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame image: i386/debian:stretch <<: *job-push variables: @@ -135,7 +135,7 @@ gcc-6_tests_glibcdebug: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame --enable-glibcdebug + - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame --enable-glibcdebug image: debian:stretch <<: *job-push variables: @@ -151,7 +151,7 @@ gcc-6_tests_glibcdebug_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame --enable-glibcdebug + - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame --enable-glibcdebug image: i386/debian:stretch <<: *job-push variables: @@ -166,7 +166,7 @@ gcc-6_tests_glibcdebug_i386: gcc-6_sdl2_tests: stage: build script: - - ./tools/ci/jobs/gcc6_sdl2_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_sdl2_tests.sh --without-dyecmd --without-manaversegame image: debian:stretch <<: *job-push variables: @@ -181,7 +181,7 @@ gcc-6_sdl2_tests: gcc-6_sdl2_tests_i386: stage: build script: - - ./tools/ci/jobs/gcc6_sdl2_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_sdl2_tests.sh --without-dyecmd --without-manaversegame image: i386/debian:stretch <<: *job-push variables: @@ -197,7 +197,7 @@ gcc-6_tests_valgrind: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -216,7 +216,7 @@ gcc-6_tests_valgrind_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -235,7 +235,7 @@ gcc-6_tarball_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tarball_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_tarball_tests.sh --without-dyecmd --without-manaversegame image: debian:stretch <<: *job-push variables: diff --git a/tools/ci/branches/ci_gcc7/.gitlab-ci.yml b/tools/ci/branches/ci_gcc7/.gitlab-ci.yml index 7586df0ae..e5ec598a0 100644 --- a/tools/ci/branches/ci_gcc7/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc7/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] diff --git a/tools/ci/branches/ci_gcc7_tests/.gitlab-ci.yml b/tools/ci/branches/ci_gcc7_tests/.gitlab-ci.yml index d1be7f727..ec4c3b45f 100644 --- a/tools/ci/branches/ci_gcc7_tests/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc7_tests/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -20,7 +20,7 @@ gcc-7_sanitize_doctest_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" image: debian:buster <<: *job-push @@ -38,7 +38,7 @@ gcc-7_doctest_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame image: i386/debian:buster <<: *job-push variables: @@ -55,7 +55,7 @@ gcc-7_tests_simd: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests_simd.sh --without-dyecmd --without-manaversegame image: debian:buster <<: *job-push variables: @@ -71,7 +71,7 @@ gcc-7_tests_O0: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests_simd.sh --without-dyecmd --without-manaversegame image: debian:buster <<: *job-push variables: @@ -88,7 +88,7 @@ gcc-7_tests_O1: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests_simd.sh --without-dyecmd --without-manaversegame image: debian:buster <<: *job-push variables: @@ -105,7 +105,7 @@ gcc-7_tests_lto: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame image: debian:buster <<: *job-push variables: @@ -122,7 +122,7 @@ gcc-7_tests_lto_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:buster variables: @@ -139,7 +139,7 @@ gcc-7_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame image: i386/debian:buster <<: *job-push variables: @@ -155,8 +155,8 @@ gcc-7_tests_flags: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame --enable-glibcdebug - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame --enable-stldebug + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame --enable-glibcdebug + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame --enable-stldebug image: debian:buster <<: *job-push variables: @@ -172,7 +172,7 @@ gcc-7_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame image: debian:buster <<: *job-push variables: @@ -187,7 +187,7 @@ gcc-7_tests: gcc-7_sdl2_tests_i386: stage: build script: - - ./tools/ci/jobs/gcc7_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame image: i386/debian:buster <<: *job-push variables: @@ -203,7 +203,7 @@ gcc-7_sdl2_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -222,7 +222,7 @@ gcc-7_sdl2_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -241,7 +241,7 @@ gcc-7_separate_doctest: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh image: debian:buster <<: *job-push @@ -256,7 +256,7 @@ gcc-7_separate_doctest_sanitize: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh - ldd ./src/manaplustests | grep "libasan" image: debian:buster @@ -282,7 +282,7 @@ gcc-7_separate_doctest_sanitize: gcc-7_separate_doctest_sanitize_sdl2: stage: build script: - - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd --with-sdl2 + - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd --with-sdl2 - ./tools/ci/scripts/separateunittests.sh - ldd ./src/manaplustests | grep "libasan" image: debian:buster @@ -309,7 +309,7 @@ gcc-7_separate_doctest_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh <<: *job-push image: i386/debian:buster @@ -325,7 +325,7 @@ gcc-7_separate_doctest_i386: gcc-7_separate_doctest_sdl2_i386: stage: build script: - - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd --with-sdl2 + - ./tools/ci/jobs/gcc7_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd --with-sdl2 - ./tools/ci/scripts/separateunittests.sh <<: *job-push image: i386/debian:buster @@ -342,7 +342,7 @@ gcc-7_unsigned_char_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame image: debian:buster <<: *job-push variables: @@ -358,7 +358,7 @@ gcc-7_unsigned_char_tests: gcc-7_sdl2_unsigned_char_tests: stage: build script: - - ./tools/ci/jobs/gcc7_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc7_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame image: debian:buster <<: *job-push variables: diff --git a/tools/ci/branches/ci_gcc8/.gitlab-ci.yml b/tools/ci/branches/ci_gcc8/.gitlab-ci.yml index 29aaee53a..c4ab85379 100644 --- a/tools/ci/branches/ci_gcc8/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc8/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] diff --git a/tools/ci/branches/ci_gcc8_tests/.gitlab-ci.yml b/tools/ci/branches/ci_gcc8_tests/.gitlab-ci.yml index 65c5b8be5..66654fc9d 100644 --- a/tools/ci/branches/ci_gcc8_tests/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc8_tests/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -21,7 +21,7 @@ stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" <<: *job-push variables: @@ -39,7 +39,7 @@ stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_sanitize_tests.sh --enable-glibcdebug --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_sanitize_tests.sh --enable-glibcdebug --enable-unittests=doctest --without-dyecmd --without-manaversegame - ldd ./src/manaplustests | grep "libasan" <<: *job-push variables: @@ -56,7 +56,7 @@ gcc-8_doctest_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -73,7 +73,7 @@ gcc-8_tests_simd: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -88,7 +88,7 @@ gcc-8_tests_O0: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-O0" @@ -104,7 +104,7 @@ gcc-8_tests_O1: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-O1" @@ -120,7 +120,7 @@ gcc-8_tests_lto: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-ffast-math -O9 -flto -fwhole-program -funswitch-loops" @@ -136,7 +136,7 @@ gcc-8_tests_lto_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:unstable variables: @@ -153,7 +153,7 @@ gcc-8_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -169,8 +169,8 @@ gcc-8_tests_flags: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame --enable-glibcdebug - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame --enable-stldebug + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame --enable-glibcdebug + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame --enable-stldebug <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -185,7 +185,7 @@ gcc-8_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -199,7 +199,7 @@ gcc-8_tests: gcc-8_sdl2_tests_i386: stage: build script: - - ./tools/ci/jobs/gcc8_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -215,7 +215,7 @@ gcc-8_sdl2_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -233,7 +233,7 @@ gcc-8_sdl2_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -252,7 +252,7 @@ gcc-8_separate_doctest: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh <<: *job-push variables: @@ -266,7 +266,7 @@ gcc-8_separate_doctest_sanitize: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -291,7 +291,7 @@ gcc-8_separate_doctest_sanitize: gcc-8_separate_doctest_sanitize_sdl2: stage: build script: - - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd --with-sdl2 + - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd --with-sdl2 - ./tools/ci/scripts/separateunittests.sh - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -317,7 +317,7 @@ gcc-8_separate_doctest_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh <<: *job-push image: i386/debian:unstable @@ -333,7 +333,7 @@ gcc-8_separate_doctest_i386: gcc-8_separate_doctest_sdl2_i386: stage: build script: - - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd --with-sdl2 + - ./tools/ci/jobs/gcc8_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd --with-sdl2 - ./tools/ci/scripts/separateunittests.sh <<: *job-push image: i386/debian:unstable @@ -364,7 +364,7 @@ gcc-8_systemcatch_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --enable-unittests=systemcatch --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --enable-unittests=systemcatch --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -380,7 +380,7 @@ gcc-8_systemdoctest_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --enable-unittests=systemdoctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --enable-unittests=systemdoctest --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -396,7 +396,7 @@ gcc-8_unsigned_char_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-funsigned-char" @@ -411,7 +411,7 @@ gcc-8_unsigned_char_tests: gcc-8_sdl2_unsigned_char_tests: stage: build script: - - ./tools/ci/jobs/gcc8_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-funsigned-char" diff --git a/tools/ci/branches/ci_gcc9/.gitlab-ci.yml b/tools/ci/branches/ci_gcc9/.gitlab-ci.yml index ff98223ed..1e0f4e672 100644 --- a/tools/ci/branches/ci_gcc9/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc9/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] diff --git a/tools/ci/branches/ci_gcc9_tests/.gitlab-ci.yml b/tools/ci/branches/ci_gcc9_tests/.gitlab-ci.yml index 90f668189..df3457748 100644 --- a/tools/ci/branches/ci_gcc9_tests/.gitlab-ci.yml +++ b/tools/ci/branches/ci_gcc9_tests/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -21,8 +21,8 @@ stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame - ldd ./src/manaplustests | grep "libasan" + - ./tools/ci/jobs/gcc9_sanitize_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-9 g++-9 @@ -39,8 +39,8 @@ stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_sanitize_tests.sh --enable-glibcdebug --enable-unittests=doctest --without-dyecmd --without-manaplusgame - ldd ./src/manaplustests | grep "libasan" + - ./tools/ci/jobs/gcc9_sanitize_tests.sh --enable-glibcdebug --enable-unittests=doctest --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-9 g++-9 @@ -56,7 +56,7 @@ gcc-9_doctest_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --enable-unittests=doctest --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -73,7 +73,7 @@ gcc-9_tests_simd: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-9 g++-9 @@ -88,7 +88,7 @@ gcc-9_tests_O0: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-O0" @@ -104,7 +104,7 @@ gcc-9_tests_O1: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests_simd.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests_simd.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-O1" @@ -120,7 +120,7 @@ gcc-9_tests_lto: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-ffast-math -O9 -flto -fwhole-program -funswitch-loops" @@ -136,7 +136,7 @@ gcc-9_tests_lto_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:unstable variables: @@ -153,7 +153,7 @@ gcc-9_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -169,8 +169,8 @@ gcc-9_tests_flags: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame --enable-glibcdebug - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame --enable-stldebug + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame --enable-glibcdebug + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame --enable-stldebug <<: *job-push variables: PACKAGES: gcc-9 g++-9 @@ -185,7 +185,7 @@ gcc-9_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-9 g++-9 @@ -199,7 +199,7 @@ gcc-9_tests: gcc-9_sdl2_tests_i386: stage: build script: - - ./tools/ci/jobs/gcc9_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame image: i386/debian:unstable <<: *job-push variables: @@ -215,7 +215,7 @@ gcc-9_sdl2_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -233,7 +233,7 @@ gcc-9_sdl2_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame || true + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame || true - echo test valgrind - valgrind -q --read-var-info=yes --track-origins=yes --malloc-fill=11 --free-fill=55 --show-reachable=yes --leak-check=full --leak-resolution=high --partial-loads-ok=yes --error-limit=no ./src/manaplustests 2>logs/valg.log - grep "invalid" logs/valg.log && exit 1 || true @@ -252,7 +252,7 @@ gcc-9_separate_doctest: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh <<: *job-push variables: @@ -266,7 +266,7 @@ gcc-9_separate_doctest_sanitize: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -293,7 +293,7 @@ gcc-9_separate_doctest_sanitize: gcc-9_separate_doctest_sanitize_sdl2: stage: build script: - - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd --with-sdl2 + - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd --with-sdl2 - ./tools/ci/scripts/separateunittests.sh - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -320,7 +320,7 @@ gcc-9_separate_doctest_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd - ./tools/ci/scripts/separateunittests.sh <<: *job-push image: i386/debian:unstable @@ -336,7 +336,7 @@ gcc-9_separate_doctest_i386: gcc-9_separate_doctest_sdl2_i386: stage: build script: - - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaplusgame --without-dyecmd --with-sdl2 + - ./tools/ci/jobs/gcc9_silent.sh --enable-unittestsbin=doctest --without-manaversegame --without-dyecmd --with-sdl2 - ./tools/ci/scripts/separateunittests.sh <<: *job-push image: i386/debian:unstable @@ -367,7 +367,7 @@ gcc-9_systemcatch_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --enable-unittests=systemcatch --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --enable-unittests=systemcatch --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-9 g++-9 @@ -383,7 +383,7 @@ gcc-9_systemdoctest_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --enable-unittests=systemdoctest --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --enable-unittests=systemdoctest --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-9 g++-9 @@ -399,7 +399,7 @@ gcc-9_unsigned_char_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-funsigned-char" @@ -414,7 +414,7 @@ gcc-9_unsigned_char_tests: gcc-9_sdl2_unsigned_char_tests: stage: build script: - - ./tools/ci/jobs/gcc9_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc9_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push variables: POST_CXXFLAGS: "-funsigned-char" diff --git a/tools/ci/branches/ci_glibcdebug/.gitlab-ci.yml b/tools/ci/branches/ci_glibcdebug/.gitlab-ci.yml index 2ada2b528..46c035678 100644 --- a/tools/ci/branches/ci_glibcdebug/.gitlab-ci.yml +++ b/tools/ci/branches/ci_glibcdebug/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -20,7 +20,7 @@ gcc-8_tests_glibcdebug_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame --enable-glibcdebug + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame --enable-glibcdebug image: i386/debian:unstable <<: *job-push variables: @@ -95,7 +95,7 @@ clang-7.0_glibcdebug_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/clang70_tests.sh --without-dyecmd --without-manaplusgame --enable-glibcdebug + - ./tools/ci/jobs/clang70_tests.sh --without-dyecmd --without-manaversegame --enable-glibcdebug <<: *job-push image: debian:buster variables: @@ -110,7 +110,7 @@ clang-7.0_glibcdebug_tests: clang-7.0_glibcdebug_tests_sdl2: stage: build script: - - ./tools/ci/jobs/clang70_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame --enable-glibcdebug + - ./tools/ci/jobs/clang70_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame --enable-glibcdebug <<: *job-push image: debian:buster variables: diff --git a/tools/ci/branches/ci_main1/.gitlab-ci.yml b/tools/ci/branches/ci_main1/.gitlab-ci.yml index 27ecc3655..66c25fc0f 100644 --- a/tools/ci/branches/ci_main1/.gitlab-ci.yml +++ b/tools/ci/branches/ci_main1/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -89,7 +89,7 @@ gcc-gentoo_sdl1: script: - ./tools/ci/jobs/any_compiler.sh --enable-werror - ./tools/ci/scripts/runtests.sh - image: registry.gitlab.com/manaplus/images:gentoo_gcc_sdl1 + image: registry.gitlab.com/manaverse/images:gentoo_gcc_sdl1 <<: *job-push variables: LOGFILE: gcc.log @@ -106,7 +106,7 @@ gcc-gentoo_sdl2: script: - ./tools/ci/jobs/any_compiler.sh --with-sdl2 --enable-werror - ./tools/ci/scripts/runtests.sh - image: registry.gitlab.com/manaplus/images:gentoo_gcc_sdl2 + image: registry.gitlab.com/manaverse/images:gentoo_gcc_sdl2 <<: *job-push variables: LOGFILE: gcc.log diff --git a/tools/ci/branches/ci_malloc/.gitlab-ci.yml b/tools/ci/branches/ci_malloc/.gitlab-ci.yml index ace0f93a3..9a88deb46 100644 --- a/tools/ci/branches/ci_malloc/.gitlab-ci.yml +++ b/tools/ci/branches/ci_malloc/.gitlab-ci.yml @@ -19,7 +19,7 @@ gcc-8_tests_jmalloc: script: - ls ${MALLOC} - ./tools/ci/scripts/patchsdl1.sh - - LD_PRELOAD=${MALLOC} ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame + - LD_PRELOAD=${MALLOC} ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -36,7 +36,7 @@ gcc-8_tests_jmalloc_i386: script: - ls ${MALLOC} - ./tools/ci/scripts/patchsdl1.sh - - LD_PRELOAD=${MALLOC} ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame + - LD_PRELOAD=${MALLOC} ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:unstable variables: @@ -53,7 +53,7 @@ gcc-8_tests_jmalloc_sdl2: stage: build script: - ls ${MALLOC} - - LD_PRELOAD=${MALLOC} ./tools/ci/jobs/gcc8_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - LD_PRELOAD=${MALLOC} ./tools/ci/jobs/gcc8_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -69,7 +69,7 @@ gcc-8_tests_jmalloc_sdl2_i386: stage: build script: - ls ${MALLOC} - - LD_PRELOAD=${MALLOC} ./tools/ci/jobs/gcc8_tests.sh --with-sdl2 --without-dyecmd --without-manaplusgame + - LD_PRELOAD=${MALLOC} ./tools/ci/jobs/gcc8_tests.sh --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:unstable variables: @@ -86,7 +86,7 @@ gcc-8_tests_tcmalloc: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --enable-tcmalloc --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --enable-tcmalloc --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -101,7 +101,7 @@ gcc-8_tests_tcmalloc_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --enable-tcmalloc --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --enable-tcmalloc --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:unstable variables: @@ -116,7 +116,7 @@ gcc-8_tests_tcmalloc_i386: gcc-8_tests_tcmalloc_sdl2: stage: build script: - - ./tools/ci/jobs/gcc8_tests.sh --enable-tcmalloc --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --enable-tcmalloc --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -130,7 +130,7 @@ gcc-8_tests_tcmalloc_sdl2: gcc-8_tests_tcmalloc_sdl2_i386: stage: build script: - - ./tools/ci/jobs/gcc8_tests.sh --enable-tcmalloc --with-sdl2 --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc8_tests.sh --enable-tcmalloc --with-sdl2 --without-dyecmd --without-manaversegame <<: *job-push image: i386/debian:unstable variables: diff --git a/tools/ci/branches/ci_mse/.gitlab-ci.yml b/tools/ci/branches/ci_mse/.gitlab-ci.yml index d35de9c08..a722d63b1 100644 --- a/tools/ci/branches/ci_mse/.gitlab-ci.yml +++ b/tools/ci/branches/ci_mse/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -20,7 +20,7 @@ gcc-7_tests_mse_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame --enable-stldebug + - ./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame --enable-stldebug image: i386/debian:buster <<: *job-push variables: diff --git a/tools/ci/branches/ci_mxe/.gitlab-ci.yml b/tools/ci/branches/ci_mxe/.gitlab-ci.yml index 5e7526c7a..dc10a58fc 100644 --- a/tools/ci/branches/ci_mxe/.gitlab-ci.yml +++ b/tools/ci/branches/ci_mxe/.gitlab-ci.yml @@ -6,7 +6,7 @@ stages: artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -15,7 +15,7 @@ stages: artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -24,7 +24,7 @@ mxe_gcc6_shared_32_testsbin: stage: build script: - ls /mxe - - ./tools/ci/jobs/mxe_gcc6_tests.sh --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/mxe_gcc6_tests.sh --without-manaversegame --without-dyecmd artifacts: paths: - logs @@ -32,7 +32,7 @@ mxe_gcc6_shared_32_testsbin: when: always expire_in: 1 week dependencies: [] - image: registry.gitlab.com/manaplus/mxe:gcc6_shared_32 + image: registry.gitlab.com/manaverse/mxe:gcc6_shared_32 variables: PACKAGES: bash CROSS: i686-w64-mingw32.shared @@ -43,7 +43,7 @@ mxe_gcc6_shared_64_testsbin: stage: build script: - ls /mxe - - ./tools/ci/jobs/mxe_gcc6_tests.sh --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/mxe_gcc6_tests.sh --without-manaversegame --without-dyecmd artifacts: paths: - logs @@ -51,7 +51,7 @@ mxe_gcc6_shared_64_testsbin: when: always expire_in: 1 week dependencies: [] - image: registry.gitlab.com/manaplus/mxe:gcc6_shared_64 + image: registry.gitlab.com/manaverse/mxe:gcc6_shared_64 variables: PACKAGES: bash CROSS: x86_64-w64-mingw32.shared diff --git a/tools/ci/branches/ci_site/.gitlab-ci.yml b/tools/ci/branches/ci_site/.gitlab-ci.yml index a5c5995b3..0a7d04417 100644 --- a/tools/ci/branches/ci_site/.gitlab-ci.yml +++ b/tools/ci/branches/ci_site/.gitlab-ci.yml @@ -17,7 +17,7 @@ before_script: artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -26,7 +26,7 @@ before_script: artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -35,9 +35,9 @@ gcc-6_tests_gcov: stage: build script: - ./tools/ci/scripts/clonesrc.sh - - cd manaplus + - cd manaverse - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc6_tests_gcov.sh --without-dyecmd --without-manaplusgame + - ./tools/ci/jobs/gcc6_tests_gcov.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-6 g++-6 @@ -54,8 +54,8 @@ gcc-6_sdl2_tests_gcov: stage: build script: - ./tools/ci/scripts/clonesrc.sh - - cd manaplus - - ./tools/ci/jobs/gcc6_sdl2_tests_gcov.sh --without-dyecmd --without-manaplusgame + - cd manaverse + - ./tools/ci/jobs/gcc6_sdl2_tests_gcov.sh --without-dyecmd --without-manaversegame <<: *job-push variables: PACKAGES: gcc-6 g++-6 @@ -72,12 +72,12 @@ doxygen: stage: build script: - ./tools/ci/scripts/clonesrc.sh - - cd manaplus + - cd manaverse - ./tools/ci/scripts/patchsdl1.sh - ./tools/ci/jobs/doxygen.sh artifacts: paths: - - manaplus/doxygen + - manaverse/doxygen expire_in: 3 week when: always dependencies: [] @@ -93,11 +93,11 @@ gitstats: stage: build script: - ./tools/ci/scripts/clonesrc.sh - - cd manaplus + - cd manaverse - ./tools/ci/jobs/gitstats.sh artifacts: paths: - - manaplus/stats + - manaverse/stats expire_in: 3 week when: always dependencies: [] @@ -111,12 +111,12 @@ gitstatsh: stage: build script: - ./tools/ci/scripts/clonesrc.sh - - cd manaplus + - cd manaverse - ./tools/ci/jobs/gitstatsh.sh image: debian:buster artifacts: paths: - - manaplus/stats2 + - manaverse/stats2 expire_in: 3 week when: always dependencies: [] @@ -132,10 +132,10 @@ pages: stage: stats script: - rm -rf artifacts || true - - mv manaplus artifacts + - mv manaverse artifacts - ./tools/ci/scripts/clonesrc.sh - - mv artifacts/* manaplus/ - - cd manaplus + - mv artifacts/* manaverse/ + - cd manaverse - ./tools/ci/jobs/pages.sh dependencies: - doxygen diff --git a/tools/ci/branches/ci_xmllibs/.gitlab-ci.yml b/tools/ci/branches/ci_xmllibs/.gitlab-ci.yml index b1dcf40e6..9d964af60 100644 --- a/tools/ci/branches/ci_xmllibs/.gitlab-ci.yml +++ b/tools/ci/branches/ci_xmllibs/.gitlab-ci.yml @@ -2,7 +2,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -11,7 +11,7 @@ artifacts: paths: - logs - - manaplus/logs + - manaverse/logs when: always expire_in: 3 week dependencies: [] @@ -20,7 +20,7 @@ gcc-8_pugixml_tests: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame --enable-libxml=pugixml + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame --enable-libxml=pugixml <<: *job-push variables: PACKAGES: gcc-8 g++-8 @@ -35,7 +35,7 @@ gcc-8_pugixml_tests_i386: stage: build script: - ./tools/ci/scripts/patchsdl1.sh - - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaplusgame --enable-libxml=pugixml + - ./tools/ci/jobs/gcc8_tests.sh --without-dyecmd --without-manaversegame --enable-libxml=pugixml image: i386/debian:unstable <<: *job-push variables: diff --git a/tools/ci/branches/master/.gitlab-ci.yml b/tools/ci/branches/master/.gitlab-ci.yml index 610c4dfda..69a411404 100644 --- a/tools/ci/branches/master/.gitlab-ci.yml +++ b/tools/ci/branches/master/.gitlab-ci.yml @@ -186,7 +186,7 @@ mxe_gcc6_shared_32: - ls /mxe - ./tools/ci/jobs/mxe_gcc6.sh <<: *job-push - image: registry.gitlab.com/manaplus/mxe:gcc6_shared_32 + image: registry.gitlab.com/manaverse/mxe:gcc6_shared_32 variables: PACKAGES: bash CROSS: i686-w64-mingw32.shared @@ -199,7 +199,7 @@ mxe_gcc6_shared_64: - ls /mxe - ./tools/ci/jobs/mxe_gcc6.sh <<: *job-push - image: registry.gitlab.com/manaplus/mxe:gcc6_shared_64 + image: registry.gitlab.com/manaverse/mxe:gcc6_shared_64 variables: PACKAGES: bash CROSS: x86_64-w64-mingw32.shared @@ -237,7 +237,7 @@ gcc-10_game_only: gcc-10_dyecmd_only: stage: prebuild script: - - ./tools/ci/jobs/gcc10.sh --without-manaplusgame + - ./tools/ci/jobs/gcc10.sh --without-manaversegame <<: *job-push variables: PACKAGES: gcc-10 g++-10 @@ -248,7 +248,7 @@ gcc-10_dyecmd_only: gcc-10_unittestsbin: stage: prebuild script: - - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin --without-manaplusgame --without-dyecmd + - ./tools/ci/jobs/gcc10_silent.sh --enable-unittestsbin --without-manaversegame --without-dyecmd <<: *job-push variables: PACKAGES: gcc-10 g++-10 @@ -330,7 +330,7 @@ triggers: - echo /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvz} - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5 - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaversegame --without-dyecmd - export LD_PRELOAD - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" @@ -356,7 +356,7 @@ triggers: script: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5 - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaversegame --without-dyecmd - export LD_PRELOAD - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" @@ -383,7 +383,7 @@ triggers: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - echo /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvz} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaversegame --without-dyecmd - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -405,7 +405,7 @@ triggers: stage: build script: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaversegame --without-dyecmd - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -430,7 +430,7 @@ triggers: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - echo /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvz} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --without-manaversegame --without-dyecmd - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -454,7 +454,7 @@ triggers: stage: build script: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaplusgame --without-dyecmd + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize_tests.sh --enable-unittests=yes --with-sdl2 --without-manaversegame --without-dyecmd - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/checkldd.sh src/manaplustests - ldd ./src/manaplustests | grep "libasan" <<: *job-push @@ -479,7 +479,7 @@ triggers: script: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ./tools/ci/jobs/gcc10.sh - - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ./tools/ci/scripts/checkldd.sh src/manaplus + - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ./tools/ci/scripts/checkldd.sh src/manaverse - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ./tools/ci/scripts/runtests.sh <<: *job-push variables: @@ -502,7 +502,7 @@ triggers: - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize.sh - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/runtests.sh - - ldd ./src/manaplus | grep "libasan" + - ldd ./src/manaverse | grep "libasan" <<: *job-push variables: LIBNAME: SDL @@ -524,7 +524,7 @@ triggers: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize.sh --with-sdl2 - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/runtests.sh - - ldd ./src/manaplus | grep "libasan" + - ldd ./src/manaverse | grep "libasan" <<: *job-push variables: LIBNAME: SDL @@ -549,7 +549,7 @@ triggers: - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} env - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize.sh - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/runtests.sh - - ldd ./src/manaplus | grep "libasan" + - ldd ./src/manaverse | grep "libasan" <<: *job-push variables: LIBNAME: SDL @@ -573,7 +573,7 @@ triggers: - ./tools/ci/scripts/downloadlib.sh ${LIBNAME} ${LIBVERSION} - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/jobs/gcc10_sanitize.sh --with-sdl2 - /usr/local/spm/bin/${LIBNAME}_${LIBVERSION}/runenv.sh ${runenvx} ${runenvz} ./tools/ci/scripts/runtests.sh - - ldd ./src/manaplus | grep "libasan" + - ldd ./src/manaverse | grep "libasan" <<: *job-push variables: LIBNAME: SDL diff --git a/tools/ci/jobs/gitstatsh.sh b/tools/ci/jobs/gitstatsh.sh index 376d31f43..e4f6dfbb9 100755 --- a/tools/ci/jobs/gitstatsh.sh +++ b/tools/ci/jobs/gitstatsh.sh @@ -13,7 +13,7 @@ check_error $? git log --stat --no-merges --summary --decorate=false >repo_log check_error $? cd gitstatsh/v1 -python main.py ManaPlus ../../repo_log +python main.py ManaVerse ../../repo_log check_error $? mv web ../../stats2 check_error $? diff --git a/tools/ci/jobs/xcode.sh b/tools/ci/jobs/xcode.sh index b07148b13..8649c6ba8 100755 --- a/tools/ci/jobs/xcode.sh +++ b/tools/ci/jobs/xcode.sh @@ -8,4 +8,4 @@ cd ../../Xcode || exit 1 ./build.sh || exit 1 ./pack.sh || exit 1 ls -la build || exit 1 -cp build/manaplus.dmg "${artifacts}/" || exit 1 +cp build/manaverse.dmg "${artifacts}/" || exit 1 diff --git a/tools/ci/scripts/azure/mxetest.sh b/tools/ci/scripts/azure/mxetest.sh index 30cf8342e..9dd57db4f 100755 --- a/tools/ci/scripts/azure/mxetest.sh +++ b/tools/ci/scripts/azure/mxetest.sh @@ -6,7 +6,7 @@ echo docker login registry.gitlab.com -u azure -p TOKEN docker login registry.gitlab.com -u azure -p $GITLABTOKEN || exit 1 export IMAGE="registry.gitlab.com/manaplus/mxe:gcc6_shared_${BITS}" -export COMMAND="./tools/ci/jobs/mxe_gcc6_tests.sh --without-manaplusgame --without-dyecmd" +export COMMAND="./tools/ci/jobs/mxe_gcc6_tests.sh --without-manaversegame --without-dyecmd" export PACKAGES="bash" ./tools/ci/scripts/docker_run_cross.sh || exit 1 mkdir dlls || true diff --git a/tools/ci/scripts/circleci/gcc6_sanitize_tests.sh b/tools/ci/scripts/circleci/gcc6_sanitize_tests.sh index afaae9234..10dbe2351 100755 --- a/tools/ci/scripts/circleci/gcc6_sanitize_tests.sh +++ b/tools/ci/scripts/circleci/gcc6_sanitize_tests.sh @@ -6,7 +6,7 @@ echo "Current node: ${CIRCLE_NODE_INDEX}" case $CIRCLE_NODE_INDEX in 0) export IMAGE=debian:stretch - export COMMAND="./tools/ci/jobs/gcc6_sanitize_tests.sh --enable-unittests=yes --without-dyecmd --without-manaplusgame --without-opengl --with-sdl2" + export COMMAND="./tools/ci/jobs/gcc6_sanitize_tests.sh --enable-unittests=yes --without-dyecmd --without-manaversegame --without-opengl --with-sdl2" export PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL2} valgrind" ./tools/ci/scripts/docker_run.sh ;; @@ -15,7 +15,7 @@ case $CIRCLE_NODE_INDEX in ;; 2) export IMAGE=debian:stretch - export COMMAND="./tools/ci/jobs/gcc6_sanitize_tests.sh --enable-unittests=yes --without-dyecmd --without-manaplusgame --without-opengl" + export COMMAND="./tools/ci/jobs/gcc6_sanitize_tests.sh --enable-unittests=yes --without-dyecmd --without-manaversegame --without-opengl" export PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL1} valgrind" ./tools/ci/scripts/docker_run.sh ;; diff --git a/tools/ci/scripts/circleci/gcc6_tests.sh b/tools/ci/scripts/circleci/gcc6_tests.sh index 644f4b75f..bce1cbe49 100755 --- a/tools/ci/scripts/circleci/gcc6_tests.sh +++ b/tools/ci/scripts/circleci/gcc6_tests.sh @@ -6,25 +6,25 @@ echo "Current node: ${CIRCLE_NODE_INDEX}" case $CIRCLE_NODE_INDEX in 0) export IMAGE=i386/debian:stretch - export COMMAND="./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame --without-opengl" + export COMMAND="./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame --without-opengl" export PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL1} valgrind" ./tools/ci/scripts/docker_run.sh ;; 1) export IMAGE=debian:stretch - export COMMAND="./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame --without-opengl --enable-glibcdebug --with-sdl2" + export COMMAND="./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame --without-opengl --enable-glibcdebug --with-sdl2" export PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL2} valgrind" ./tools/ci/scripts/docker_run.sh ;; 2) export IMAGE=i386/debian:stretch - export COMMAND="./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame --without-opengl --enable-glibcdebug --with-sdl2" + export COMMAND="./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame --without-opengl --enable-glibcdebug --with-sdl2" export PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL2} valgrind" ./tools/ci/scripts/docker_run.sh ;; 3) export IMAGE=debian:stretch - export COMMAND="./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaplusgame --without-opengl --enable-glibcdebug" + export COMMAND="./tools/ci/jobs/gcc6_tests.sh --without-dyecmd --without-manaversegame --without-opengl --enable-glibcdebug" export PACKAGES="gcc-6 g++-6 ${LIBS_PACKAGES} ${SDL1} valgrind" ./tools/ci/scripts/docker_run.sh ;; diff --git a/tools/ci/scripts/circleci/gcc7_sanitize_tests.sh b/tools/ci/scripts/circleci/gcc7_sanitize_tests.sh index 1b3c9a8fa..e7d243407 100755 --- a/tools/ci/scripts/circleci/gcc7_sanitize_tests.sh +++ b/tools/ci/scripts/circleci/gcc7_sanitize_tests.sh @@ -9,7 +9,7 @@ case $CIRCLE_NODE_INDEX in ;; 1) export IMAGE=debian:buster - export COMMAND="./tools/ci/jobs/gcc7_sanitize_tests.sh --enable-unittests=yes --without-dyecmd --without-manaplusgame --without-opengl" + export COMMAND="./tools/ci/jobs/gcc7_sanitize_tests.sh --enable-unittests=yes --without-dyecmd --without-manaversegame --without-opengl" export PACKAGES="gcc-7 g++-7 ${LIBS_PACKAGES} ${SDL1} valgrind" ./tools/ci/scripts/docker_run.sh ;; @@ -18,7 +18,7 @@ case $CIRCLE_NODE_INDEX in ;; 3) export IMAGE=debian:buster - export COMMAND="./tools/ci/jobs/gcc7_sanitize_tests.sh --enable-unittests=yes --without-dyecmd --without-manaplusgame --without-opengl --with-sdl2" + export COMMAND="./tools/ci/jobs/gcc7_sanitize_tests.sh --enable-unittests=yes --without-dyecmd --without-manaversegame --without-opengl --with-sdl2" export PACKAGES="gcc-7 g++-7 ${LIBS_PACKAGES} ${SDL2} valgrind" ./tools/ci/scripts/docker_run.sh ;; diff --git a/tools/ci/scripts/circleci/gcc7_tests.sh b/tools/ci/scripts/circleci/gcc7_tests.sh index 0acab9a7b..ff3b643d9 100755 --- a/tools/ci/scripts/circleci/gcc7_tests.sh +++ b/tools/ci/scripts/circleci/gcc7_tests.sh @@ -6,25 +6,25 @@ echo "Current node: ${CIRCLE_NODE_INDEX}" case $CIRCLE_NODE_INDEX in 0) export IMAGE=debian:buster - export COMMAND="./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame --without-opengl --enable-glibcdebug --with-sdl2" + export COMMAND="./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame --without-opengl --enable-glibcdebug --with-sdl2" export PACKAGES="gcc-7 g++-7 ${LIBS_PACKAGES} ${SDL2} valgrind" ./tools/ci/scripts/docker_run.sh ;; 1) export IMAGE=i386/debian:buster - export COMMAND="./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame --without-opengl --enable-glibcdebug --with-sdl2" + export COMMAND="./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame --without-opengl --enable-glibcdebug --with-sdl2" export PACKAGES="gcc-7 g++-7 ${LIBS_PACKAGES} ${SDL2} valgrind" ./tools/ci/scripts/docker_run.sh ;; 2) export IMAGE=debian:buster - export COMMAND="./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame --without-opengl --enable-glibcdebug" + export COMMAND="./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame --without-opengl --enable-glibcdebug" export PACKAGES="gcc-7 g++-7 ${LIBS_PACKAGES} ${SDL1} valgrind" ./tools/ci/scripts/docker_run.sh ;; 3) export IMAGE=i386/debian:buster - export COMMAND="./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaplusgame --without-opengl" + export COMMAND="./tools/ci/jobs/gcc7_tests.sh --without-dyecmd --without-manaversegame --without-opengl" export PACKAGES="gcc-7 g++-7 ${LIBS_PACKAGES} ${SDL1} valgrind" ./tools/ci/scripts/docker_run.sh ;; diff --git a/tools/ci/scripts/clonesrc.sh b/tools/ci/scripts/clonesrc.sh index efb0596d3..60d231c9f 100755 --- a/tools/ci/scripts/clonesrc.sh +++ b/tools/ci/scripts/clonesrc.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -rm -rf manaplus || true -./tools/ci/scripts/retry.sh "git clone --branch master --depth ${GIT_DEPTH} https://gitlab.com/manaplus/manaplus.git manaplus" || exit 1 -mkdir manaplus/logs || exit 1 +rm -rf manaverse || true +./tools/ci/scripts/retry.sh "git clone --branch master --depth ${GIT_DEPTH} https://git.themanaworld.org/mana/plus.git manaverse" || exit 1 +mkdir manaverse/logs || exit 1 diff --git a/tools/ci/scripts/init.sh b/tools/ci/scripts/init.sh index 9512e9b66..7e4350ae5 100755 --- a/tools/ci/scripts/init.sh +++ b/tools/ci/scripts/init.sh @@ -230,7 +230,7 @@ function run_tarball { cd $1 echo "tar xf ../*.tar.xz" tar xf ../*.tar.xz - cd manaplus* + cd manaverse* } function run_mplint { diff --git a/tools/ci/scripts/rundyecmd.sh b/tools/ci/scripts/rundyecmd.sh index fc399f822..c6807d91a 100755 --- a/tools/ci/scripts/rundyecmd.sh +++ b/tools/ci/scripts/rundyecmd.sh @@ -2,8 +2,8 @@ function testdye { rm test1.png || true - echo ./src/dyecmd "data/icons/manaplus.png|$1" test1.png - ./src/dyecmd "data/icons/manaplus.png|$1" test1.png || exit 1 + echo ./src/dyecmd "data/icons/manaverse.png|$1" test1.png + ./src/dyecmd "data/icons/manaverse.png|$1" test1.png || exit 1 ls test1.png || exit 1 rm test1.png || true } diff --git a/tools/ci/scripts/runtest.sh b/tools/ci/scripts/runtest.sh index e629fc514..523bd4b41 100755 --- a/tools/ci/scripts/runtest.sh +++ b/tools/ci/scripts/runtest.sh @@ -6,19 +6,19 @@ function check_is_run { echo "Error: process look like crashed" cat logs/run.log echo "Run with gdb" - cp ./src/manaplus ./logs/ + cp ./src/manaverse ./logs/ cp -r core* ./logs/ sleep 10 COREFILE=$(find . -maxdepth 1 -name "core*" | head -n 1) if [[ -f "$COREFILE" ]]; then - gdb -c "$COREFILE" ./src/manaplus -ex "thread apply all bt" -ex "set pagination 0" -batch + gdb -c "$COREFILE" ./src/manaverse -ex "thread apply all bt" -ex "set pagination 0" -batch fi exit 1 fi } function check_assert { - grep -A 20 "Assert:" "${HOME}/.local/share/mana/manaplus.log" + grep -A 20 "Assert:" "${HOME}/.local/share/manaverse/manaverse.log" if [ "$?" == 0 ]; then echo "Assert found in log" exit 1 @@ -31,9 +31,9 @@ function wait_for_servers_list { echo "wait for servers list ${n}" check_is_run # check here - grep "Skipping servers list update" "${HOME}/.local/share/mana/manaplus.log" && return - grep "Servers list updated" "${HOME}/.local/share/mana/manaplus.log" && return - grep "Error: servers list updating error" "${HOME}/.local/share/mana/manaplus.log" + grep "Skipping servers list update" "${HOME}/.local/share/manaverse/manaverse.log" && return + grep "Servers list updated" "${HOME}/.local/share/manaverse/manaverse.log" && return + grep "Error: servers list updating error" "${HOME}/.local/share/manaverse/manaverse.log" if [ "$?" == 0 ]; then echo "Servers list downloading error" exit 1 @@ -50,9 +50,9 @@ function wait_for_servers_list { } function run { - ./src/manaplus --hide-cursor --enable-ipc --renderer=0 >logs/run.log 2>&1 & + ./src/manaverse --hide-cursor --enable-ipc --renderer=0 >logs/run.log 2>&1 & export PID=$! - echo "manaplus PID: ${PID}" + echo "manaverse PID: ${PID}" sleep 15 echo "pause after run" wait_for_servers_list @@ -95,16 +95,16 @@ function send_command { } function check_exists { - if [ ! -f "logs/home/Desktop/ManaPlus/$1" ]; then + if [ ! -f "logs/home/Desktop/ManaVerse/$1" ]; then sleep 7 - if [ ! -f "logs/home/Desktop/ManaPlus/$1" ]; then + if [ ! -f "logs/home/Desktop/ManaVerse/$1" ]; then echo "Error: image $1 not exists" exit 1 fi fi - if [ ! -f "logs/home/Desktop/ManaPlus/$2" ]; then + if [ ! -f "logs/home/Desktop/ManaVerse/$2" ]; then sleep 7 - if [ ! -f "logs/home/Desktop/ManaPlus/$2" ]; then + if [ ! -f "logs/home/Desktop/ManaVerse/$2" ]; then echo "Error: image $2 not exists" exit 1 fi @@ -113,7 +113,7 @@ function check_exists { function imagesdiff { check_exists "$1" "$2" - diff "logs/home/Desktop/ManaPlus/$1" "logs/home/Desktop/ManaPlus/$2" + diff "logs/home/Desktop/ManaVerse/$1" "logs/home/Desktop/ManaVerse/$2" if [ "$?" == 0 ]; then echo "Error: images '$1' and '$2' is same." exit 1 @@ -122,7 +122,7 @@ function imagesdiff { function imagessame { check_exists "$1" "$2" - diff "logs/home/Desktop/ManaPlus/$1" "logs/home/Desktop/ManaPlus/$2" + diff "logs/home/Desktop/ManaVerse/$1" "logs/home/Desktop/ManaVerse/$2" if [ "$?" != 0 ]; then echo "Error: images '$1' and '$2' is different." exit 1 @@ -233,7 +233,7 @@ imagesdiff new_server.png about.png send_command "/sendmousekey 500 20 1" send_command "/screenshot about.png" -# open about manaplus page +# open about manaverse page send_command "/sendmousekey 300 ${ABOUTYOFFSET} 1" send_command "/screenshot about2.png" imagesdiff about.png about2.png diff --git a/tools/ci/scripts/runtests.sh b/tools/ci/scripts/runtests.sh index 1263521f9..cf781ff1b 100755 --- a/tools/ci/scripts/runtests.sh +++ b/tools/ci/scripts/runtests.sh @@ -22,12 +22,12 @@ echo "clean config runs" n=0 while true; do echo "run test ${n}" - rm "${HOME}/.config/mana/mana/config.xml" - rm "/root/.config/mana/mana/config.xml" - rm "${HOME}/.config/mana/mana/serverlistplus.xml" - rm "/root/.config/mana/mana/serverlistplus.xml" - rm "${HOME}/.local/share/mana/manaplus.log" - rm "/root/.local/share/mana/manaplus.log" + rm "${HOME}/.config/mana/manaverse/config.xml" + rm "/root/.config/mana/manaverse/config.xml" + rm "${HOME}/.config/mana/manaverse/serverlistplus.xml" + rm "/root/.config/mana/manaverse/serverlistplus.xml" + rm "${HOME}/.local/share/manaverse/manaverse.log" + rm "/root/.local/share/manaverse/manaverse.log" ./tools/ci/scripts/runtest.sh if [ "$?" != 0 ]; then exit 1 @@ -45,8 +45,8 @@ echo "existing config runs" n=0 while true; do echo "run test ${n}" - rm "${HOME}/.local/share/mana/manaplus.log" - rm "/root/.local/share/mana/manaplus.log" + rm "${HOME}/.local/share/manaverse/manaverse.log" + rm "/root/.local/share/manaverse/manaverse.log" ./tools/ci/scripts/runtest.sh if [ "$?" != 0 ]; then exit 1 diff --git a/tools/doxygen/doxygen.conf b/tools/doxygen/doxygen.conf index 76ca1ea11..fcf2b170b 100644 --- a/tools/doxygen/doxygen.conf +++ b/tools/doxygen/doxygen.conf @@ -4,10 +4,10 @@ c# Doxyfile 1.8.8 # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "ManaPlus" +PROJECT_NAME = "ManaVerse" PROJECT_NUMBER = PROJECT_BRIEF = -PROJECT_LOGO = data/icons/manaplus.png +PROJECT_LOGO = data/icons/manaverse.png OUTPUT_DIRECTORY = doxygen CREATE_SUBDIRS = NO ALLOW_UNICODE_NAMES = NO -- cgit v1.2.3-60-g2f50