mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-22 17:18:39 +00:00
Merge branch 'master' into master
This commit is contained in:
commit
c5e5da27fd
126 changed files with 3626 additions and 3063 deletions
|
@ -1,9 +1,16 @@
|
|||
[*]
|
||||
end_of_line = lf
|
||||
|
||||
[*.{cpp,h,lua,txt,glsl,md,c,cmake,java,gradle}]
|
||||
[*.{cpp,h,lua,txt,glsl,c,cmake,java,gradle}]
|
||||
charset = utf-8
|
||||
indent_size = 4
|
||||
indent_style = tab
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
charset = utf-8
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
|
7
.github/workflows/android.yml
vendored
7
.github/workflows/android.yml
vendored
|
@ -35,7 +35,12 @@ jobs:
|
|||
- name: Install deps
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y --no-install-recommends gettext openjdk-17-jdk-headless
|
||||
sudo apt-get install -y --no-install-recommends gettext
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
- name: Build AAB with Gradle
|
||||
# We build an AAB as well for uploading to the the Play Store.
|
||||
run: cd android; ./gradlew bundlerelease
|
||||
|
|
5
.github/workflows/macos.yml
vendored
5
.github/workflows/macos.yml
vendored
|
@ -10,6 +10,7 @@ on:
|
|||
- 'src/**.cpp'
|
||||
- 'irr/**.[ch]'
|
||||
- 'irr/**.cpp'
|
||||
- 'irr/**.mm' # Objective-C(++)
|
||||
- '**/CMakeLists.txt'
|
||||
- 'cmake/Modules/**'
|
||||
- '.github/workflows/macos.yml'
|
||||
|
@ -28,7 +29,8 @@ on:
|
|||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-latest
|
||||
# use macOS 13 since it's the last one that still runs on x86
|
||||
runs-on: macos-13
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install deps
|
||||
|
@ -58,6 +60,7 @@ jobs:
|
|||
- name: CPack
|
||||
run: |
|
||||
cd build
|
||||
rm -rf macos
|
||||
cmake .. -DINSTALL_DEVTEST=FALSE
|
||||
cpack -G ZIP -B macos
|
||||
|
||||
|
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -43,6 +43,10 @@ build/.cmake/
|
|||
*.zsync
|
||||
appimage-build
|
||||
AppDir
|
||||
# Direnv
|
||||
.direnv/
|
||||
# Nix
|
||||
/result
|
||||
|
||||
## Files related to Minetest development cycle
|
||||
/*.patch
|
||||
|
|
|
@ -20,7 +20,7 @@ read_globals = {
|
|||
"PerlinNoise", "PerlinNoiseMap",
|
||||
|
||||
string = {fields = {"split", "trim"}},
|
||||
table = {fields = {"copy", "getn", "indexof", "insert_all"}},
|
||||
table = {fields = {"copy", "getn", "indexof", "keyof", "insert_all"}},
|
||||
math = {fields = {"hypot", "round"}},
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ set(CLANG_MINIMUM_VERSION "7.0.1")
|
|||
|
||||
# You should not need to edit these manually, use util/bump_version.sh
|
||||
set(VERSION_MAJOR 5)
|
||||
set(VERSION_MINOR 9)
|
||||
set(VERSION_MINOR 10)
|
||||
set(VERSION_PATCH 0)
|
||||
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
|
||||
|
||||
|
|
|
@ -1,17 +1,20 @@
|
|||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
buildToolsVersion '33.0.2'
|
||||
ndkVersion "$ndk_version"
|
||||
defaultConfig {
|
||||
applicationId 'net.minetest.minetest'
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 33
|
||||
compileSdk 34
|
||||
targetSdkVersion 34
|
||||
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
|
||||
versionCode project.versionCode
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
buildConfig true
|
||||
}
|
||||
|
||||
// load properties
|
||||
Properties props = new Properties()
|
||||
def propfile = file('../local.properties')
|
||||
|
@ -49,6 +52,7 @@ android {
|
|||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
namespace 'net.minetest.minetest'
|
||||
}
|
||||
|
||||
task prepareAssets() {
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="net.minetest.minetest"
|
||||
android:installLocation="auto">
|
||||
android:installLocation="auto">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
|
|
@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
package net.minetest.minetest;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
|
@ -83,13 +84,18 @@ public class MainActivity extends AppCompatActivity {
|
|||
}
|
||||
};
|
||||
|
||||
@SuppressLint("UnspecifiedRegisterReceiverFlag")
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
IntentFilter filter = new IntentFilter(ACTION_UPDATE);
|
||||
registerReceiver(myReceiver, filter);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
registerReceiver(myReceiver, filter, RECEIVER_NOT_EXPORTED);
|
||||
} else {
|
||||
registerReceiver(myReceiver, filter);
|
||||
}
|
||||
|
||||
mProgressBar = findViewById(R.id.progressBar);
|
||||
mTextView = findViewById(R.id.textView);
|
||||
|
|
|
@ -186,6 +186,7 @@ public class UnzipService extends IntentService {
|
|||
|
||||
private void publishProgress(@Nullable Notification.Builder notificationBuilder, @StringRes int message, int progress) {
|
||||
Intent intentUpdate = new Intent(ACTION_UPDATE);
|
||||
intentUpdate.setPackage(getPackageName());
|
||||
intentUpdate.putExtra(ACTION_PROGRESS, progress);
|
||||
intentUpdate.putExtra(ACTION_PROGRESS_MESSAGE, message);
|
||||
if (!isSuccess)
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
project.ext.set("versionMajor", 5) // Version Major
|
||||
project.ext.set("versionMinor", 9) // Version Minor
|
||||
project.ext.set("versionMinor", 10) // Version Minor
|
||||
project.ext.set("versionPatch", 0) // Version Patch
|
||||
// ^ keep in sync with cmake
|
||||
project.ext.set("versionCode", 46) // Android Version Code
|
||||
project.ext.set("versionCode", 48) // Android Version Code
|
||||
// NOTE: +2 after each release!
|
||||
// +1 for ARM and +1 for ARM64 APK's, because
|
||||
// each APK must have a larger `versionCode` than the previous
|
||||
|
@ -16,7 +16,7 @@ buildscript {
|
|||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.4.1'
|
||||
classpath 'com.android.tools.build:gradle:8.5.1'
|
||||
classpath 'de.undercouch:gradle-download-task:4.1.1'
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
|
|
@ -9,3 +9,5 @@ org.gradle.parallel.threads=8
|
|||
org.gradle.configureondemand=true
|
||||
android.enableJetifier=false
|
||||
android.useAndroidX=true
|
||||
android.nonTransitiveRClass=false
|
||||
android.nonFinalResIds=false
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
|
|
@ -1,194 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 135.46666 135.46667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="gear_icon.svg"
|
||||
inkscape:export-filename="/home/stu/Desktop/icons/png/gear_icon.png"
|
||||
inkscape:export-xdpi="24"
|
||||
inkscape:export-ydpi="24">
|
||||
<defs
|
||||
id="defs2">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
orient="auto"
|
||||
id="DistanceX">
|
||||
<path
|
||||
id="path4687"
|
||||
style="stroke:#000000; stroke-width:0.5"
|
||||
d="M 3,-3 L -3,3 M 0,-5 L 0,5" />
|
||||
</marker>
|
||||
<pattern
|
||||
y="0"
|
||||
x="0"
|
||||
width="8"
|
||||
patternUnits="userSpaceOnUse"
|
||||
id="Hatch"
|
||||
height="8">
|
||||
<path
|
||||
id="path4690"
|
||||
stroke-width="0.25"
|
||||
stroke="#000000"
|
||||
linecap="square"
|
||||
d="M8 4 l-4,4" />
|
||||
<path
|
||||
id="path4692"
|
||||
stroke-width="0.25"
|
||||
stroke="#000000"
|
||||
linecap="square"
|
||||
d="M6 2 l-4,4" />
|
||||
<path
|
||||
id="path4694"
|
||||
stroke-width="0.25"
|
||||
stroke="#000000"
|
||||
linecap="square"
|
||||
d="M4 0 l-4,4" />
|
||||
</pattern>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
orient="auto"
|
||||
id="DistanceX-3">
|
||||
<path
|
||||
id="path4756"
|
||||
style="stroke:#000000; stroke-width:0.5"
|
||||
d="M 3,-3 L -3,3 M 0,-5 L 0,5" />
|
||||
</marker>
|
||||
<pattern
|
||||
y="0"
|
||||
x="0"
|
||||
width="8"
|
||||
patternUnits="userSpaceOnUse"
|
||||
id="Hatch-6"
|
||||
height="8">
|
||||
<path
|
||||
id="path4759"
|
||||
stroke-width="0.25"
|
||||
stroke="#000000"
|
||||
linecap="square"
|
||||
d="M8 4 l-4,4" />
|
||||
<path
|
||||
id="path4761"
|
||||
stroke-width="0.25"
|
||||
stroke="#000000"
|
||||
linecap="square"
|
||||
d="M6 2 l-4,4" />
|
||||
<path
|
||||
id="path4763"
|
||||
stroke-width="0.25"
|
||||
stroke="#000000"
|
||||
linecap="square"
|
||||
d="M4 0 l-4,4" />
|
||||
</pattern>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#404040"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.5"
|
||||
inkscape:cx="-308.644"
|
||||
inkscape:cy="171.10144"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1023"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="34"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:pagecheckerboard="false"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-to-guides="false"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:object-nodes="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid16"
|
||||
spacingx="2.1166666"
|
||||
spacingy="2.1166666"
|
||||
empspacing="2"
|
||||
color="#40ff40"
|
||||
opacity="0.1254902"
|
||||
empcolor="#40ff40"
|
||||
empopacity="0.25098039" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-161.53332)">
|
||||
<g
|
||||
id="g4792"
|
||||
transform="matrix(0.68725287,0,0,0.65623884,67.477909,-509.24679)"
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.74041259;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
<g
|
||||
id="g4772"
|
||||
inkscape:label="OpenJsCad"
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.74041259;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 256,80.943359 -8.28125,0.72461 -3.63477,5.410156 -5.61328,12.685547 -2.28906,9.259768 -0.35156,5.1875 0.0937,0.86133 0.70703,2.44726 0.60547,9.80664 -2.66602,5.47461 -21.5957,5.78711 -5.04492,-3.40625 -4.37696,-8.79687 -0.61132,-2.47071 -0.35157,-0.79297 -2.89648,-4.31836 -6.60938,-6.87304 -11.20507,-8.17969 -5.84961,-2.86719 -7.53516,3.51367 -6.80859,4.76954 -0.44336,6.50195 1.48047,13.79297 2.64453,9.16406 2.28906,4.66992 0.51172,0.69922 1.83398,1.76563 5.42774,8.18945 0.42773,6.07422 -15.81054,15.81445 -6.07032,-0.42773 -8.18945,-5.42969 -1.76367,-1.83399 -0.69922,-0.51171 -4.66992,-2.28907 -9.15821,-2.64843 -13.79297,-1.47852 -6.5,0.44141 -4.76757,6.8125 -3.51367,7.53515 2.86914,5.85157 8.17382,11.20703 6.87305,6.61132 4.31641,2.90039 0.79297,0.34961 2.4707,0.61133 8.79492,4.37696 3.4043,5.04687 -5.78516,21.60156 -5.47265,2.66602 -9.80469,-0.60547 -2.44727,-0.70703 -0.85937,-0.0918 -5.1875,0.35156 -9.257816,2.28907 -12.68164,5.61523 -5.408203,3.63281 -0.72461,8.28516 0.72461,8.28516 5.408203,3.63281 12.68164,5.61523 9.257816,2.28907 5.1875,0.35156 0.85937,-0.0918 2.44727,-0.70703 9.80469,-0.60547 5.47265,2.66602 5.78516,21.60156 -3.4043,5.04687 -8.79492,4.37696 -2.4707,0.61133 -0.79297,0.34961 -4.31641,2.90039 -6.87305,6.61132 -8.17382,11.20703 -2.86914,5.85157 3.51367,7.53515 4.76757,6.8125 6.5,0.44141 13.79297,-1.47852 9.15821,-2.64843 4.66992,-2.28907 0.69922,-0.50976 1.76367,-1.83594 8.18945,-5.42969 6.07032,-0.42773 15.81054,15.81445 -0.42773,6.07422 -5.42774,8.18945 -1.83398,1.76563 -0.51172,0.69922 -2.28906,4.66992 -2.64453,9.16406 -1.48047,13.79297 0.44336,6.50195 6.80859,4.76758 7.53516,3.51758 5.84961,-2.86914 11.20507,-8.17969 6.60938,-6.87304 2.89648,-4.31836 0.35157,-0.79297 0.61132,-2.47071 4.37696,-8.79687 5.04492,-3.40625 21.5957,5.78711 2.66602,5.47461 -0.60547,9.80664 -0.70703,2.44726 -0.0937,0.85938 0.35156,5.18945 2.28906,9.25977 5.61328,12.68555 3.63477,5.41015 8.28125,0.72461 8.28125,-0.72461 3.63477,-5.41015 5.61328,-12.68555 2.28906,-9.25977 0.35156,-5.18945 -0.0937,-0.85938 -0.70703,-2.44726 -0.60547,-9.80664 2.66602,-5.47461 21.5957,-5.78711 5.04492,3.40625 4.37696,8.79687 0.61132,2.47071 0.35157,0.79297 2.89648,4.31836 6.60938,6.87304 11.20507,8.17969 5.84961,2.86914 7.53516,-3.51758 6.80859,-4.76758 0.44336,-6.50195 -1.48047,-13.79297 -2.64453,-9.16406 -2.28906,-4.66992 -0.51172,-0.69922 -1.83398,-1.76563 -5.42774,-8.18945 -0.42773,-6.07422 15.81054,-15.81445 6.07032,0.42773 8.18945,5.42969 1.76367,1.83594 0.69922,0.50976 4.66992,2.28907 9.15821,2.64843 13.79297,1.47852 6.5,-0.44141 v -0.002 l 4.76757,-6.81055 3.51367,-7.53711 -2.86914,-5.85156 -8.17382,-11.20508 -6.87305,-6.61328 -4.31641,-2.89843 -0.79297,-0.34961 -2.4707,-0.61133 -8.79492,-4.37891 -3.4043,-5.04492 5.78516,-21.60352 5.47265,-2.66797 9.80469,0.60938 2.44727,0.70703 0.85937,0.0918 5.1875,-0.35156 9.25782,-2.28907 12.68164,-5.61718 5.4082,-3.63282 0.72461,-8.28515 -0.72461,-8.28321 -5.4082,-3.63476 -12.68164,-5.61524 -9.25782,-2.28711 -5.1875,-0.35351 -0.85937,0.0937 -2.44727,0.70508 -9.80469,0.60937 -5.47265,-2.66797 -5.78516,-21.59961 3.4043,-5.04882 8.79492,-4.37696 2.4707,-0.61133 0.79297,-0.35156 4.31641,-2.89844 6.87305,-6.61132 8.17382,-11.20703 2.86914,-5.85157 -3.51367,-7.53711 -4.76757,-6.81054 -6.5,-0.44336 -13.79297,1.48047 -9.15821,2.64648 -4.66992,2.28906 -0.69922,0.51172 -1.76367,1.83594 -8.18945,5.42773 -6.07032,0.42774 -15.81054,-15.81446 0.42773,-6.07226 5.42774,-8.18945 1.83398,-1.76563 0.51172,-0.69922 2.28906,-4.67187 2.64453,-9.16016 1.48047,-13.79492 -0.44336,-6.50195 -6.80859,-4.76954 -7.53516,-3.51562 -5.84961,2.87109 -11.20507,8.17578 -6.60938,6.875 -2.89648,4.31836 -0.35157,0.79102 -0.61132,2.47266 -4.37696,8.79687 -5.04492,3.4082 -21.5957,-5.79101 -2.66602,-5.47266 0.60547,-9.80664 0.70703,-2.44726 0.0937,-0.85938 -0.35156,-5.19141 -2.28906,-9.259761 -5.61328,-12.683594 -3.63477,-5.412109 z m 0,97.111331 A 77.946197,77.946197 0 0 1 333.94531,256 77.946197,77.946197 0 0 1 256,333.94531 77.946197,77.946197 0 0 1 178.05469,256 77.946197,77.946197 0 0 1 256,178.05469 Z"
|
||||
transform="matrix(0.38495268,0,0,0.40318156,-98.176247,1022.1341)"
|
||||
id="path4768"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
id="g4774"
|
||||
inkscape:label="0"
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.74041259;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 9.7 KiB |
|
@ -2,23 +2,23 @@
|
|||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="256"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 67.73333 135.46667"
|
||||
viewBox="0 0 135.46666 135.46667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="rare_controls.svg"
|
||||
inkscape:export-filename="/home/stu/Desktop/icons/png/rare_controls.png"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="overflow_btn.svg"
|
||||
inkscape:export-filename="../../textures/base/pack/overflow_btn.png"
|
||||
inkscape:export-xdpi="24.000002"
|
||||
inkscape:export-ydpi="24.000002">
|
||||
inkscape:export-ydpi="24.000002"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs2">
|
||||
<filter
|
||||
|
@ -397,22 +397,24 @@
|
|||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:cx="-59.862018"
|
||||
inkscape:cy="260.34663"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:cx="41.921331"
|
||||
inkscape:cy="163.13964"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1023"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="34"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:pagecheckerboard="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-page="true"
|
||||
showguides="false">
|
||||
showguides="false"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid16"
|
||||
|
@ -422,7 +424,11 @@
|
|||
color="#40ff40"
|
||||
opacity="0.1254902"
|
||||
empcolor="#40ff40"
|
||||
empopacity="0.25098039" />
|
||||
empopacity="0.25098039"
|
||||
originx="0"
|
||||
originy="0"
|
||||
units="px"
|
||||
visible="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
|
@ -432,7 +438,6 @@
|
|||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
</cc:Work>
|
||||
|
@ -496,26 +501,27 @@
|
|||
x="264.65997"
|
||||
y="124.10143"
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" /></flowRegion><flowPara
|
||||
id="flowPara4724" /></flowRoot> <rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5231-9"
|
||||
width="25.4"
|
||||
height="25.400003"
|
||||
x="21.166666"
|
||||
y="101.6" />
|
||||
id="flowPara4724" /></flowRoot>
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5231-9-7"
|
||||
width="25.4"
|
||||
height="25.400003"
|
||||
x="21.166666"
|
||||
y="55.033333" />
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:5.38756;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5231-9-5"
|
||||
width="25.4"
|
||||
height="25.400003"
|
||||
x="21.166664"
|
||||
y="8.4666681" />
|
||||
width="96.212502"
|
||||
height="0.61243516"
|
||||
x="19.62678"
|
||||
y="33.575779" />
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:5.38755;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5231-9-5-7"
|
||||
width="96.212448"
|
||||
height="0.6124543"
|
||||
x="19.627108"
|
||||
y="67.442772" />
|
||||
<rect
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:5.38755;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5231-9-5-7-5"
|
||||
width="96.212448"
|
||||
height="0.6124543"
|
||||
x="19.627108"
|
||||
y="101.30978" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
@ -2,12 +2,11 @@ apply plugin: 'com.android.library'
|
|||
apply plugin: 'de.undercouch.download'
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
buildToolsVersion '33.0.2'
|
||||
ndkVersion "$ndk_version"
|
||||
defaultConfig {
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 33
|
||||
compileSdk 34
|
||||
targetSdkVersion 34
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID_STL=c++_shared",
|
||||
|
@ -40,6 +39,7 @@ android {
|
|||
}
|
||||
}
|
||||
}
|
||||
namespace 'net.minetest'
|
||||
}
|
||||
|
||||
// get precompiled deps
|
||||
|
|
|
@ -1 +1 @@
|
|||
<manifest package="net.minetest" />
|
||||
<manifest />
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
-- Registered metatables, used by the C++ packer
|
||||
local known_metatables = {}
|
||||
function core.register_async_metatable(name, mt)
|
||||
function core.register_portable_metatable(name, mt)
|
||||
assert(type(name) == "string", ("attempt to use %s value as metatable name"):format(type(name)))
|
||||
assert(type(mt) == "table", ("attempt to register a %s value as metatable"):format(type(mt)))
|
||||
assert(known_metatables[name] == nil or known_metatables[name] == mt,
|
||||
|
@ -10,4 +10,10 @@ function core.register_async_metatable(name, mt)
|
|||
end
|
||||
core.known_metatables = known_metatables
|
||||
|
||||
core.register_async_metatable("__builtin:vector", vector.metatable)
|
||||
function core.register_async_metatable(...)
|
||||
core.log("deprecated", "minetest.register_async_metatable is deprecated. " ..
|
||||
"Use minetest.register_portable_metatable instead.")
|
||||
return core.register_portable_metatable(...)
|
||||
end
|
||||
|
||||
core.register_portable_metatable("__builtin:vector", vector.metatable)
|
||||
|
|
|
@ -205,6 +205,16 @@ function table.indexof(list, val)
|
|||
return -1
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function table.keyof(tb, val)
|
||||
for k, v in pairs(tb) do
|
||||
if v == val then
|
||||
return k
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function string:trim()
|
||||
return self:match("^%s*(.-)%s*$")
|
||||
|
|
|
@ -166,6 +166,16 @@ describe("table", function()
|
|||
it("indexof()", function()
|
||||
assert.equal(1, table.indexof({"foo", "bar"}, "foo"))
|
||||
assert.equal(-1, table.indexof({"foo", "bar"}, "baz"))
|
||||
assert.equal(-1, table.indexof({[2] = "foo", [3] = "bar"}, "foo"))
|
||||
assert.equal(-1, table.indexof({[1] = "foo", [3] = "bar"}, "bar"))
|
||||
end)
|
||||
|
||||
it("keyof()", function()
|
||||
assert.equal("a", table.keyof({a = "foo", b = "bar"}, "foo"))
|
||||
assert.equal(nil, table.keyof({a = "foo", b = "bar"}, "baz"))
|
||||
assert.equal(1, table.keyof({"foo", "bar"}, "foo"))
|
||||
assert.equal(2, table.keyof({[2] = "foo", [3] = "bar"}, "foo"))
|
||||
assert.equal(3, table.keyof({[1] = "foo", [3] = "bar"}, "bar"))
|
||||
end)
|
||||
end)
|
||||
|
||||
|
|
|
@ -375,6 +375,18 @@ function vector.in_area(pos, min, max)
|
|||
(pos.z >= min.z) and (pos.z <= max.z)
|
||||
end
|
||||
|
||||
function vector.random_direction()
|
||||
-- Generate a random direction of unit length, via rejection sampling
|
||||
local x, y, z, l2
|
||||
repeat -- expected less than two attempts on average (volume sphere vs. cube)
|
||||
x, y, z = math.random() * 2 - 1, math.random() * 2 - 1, math.random() * 2 - 1
|
||||
l2 = x*x + y*y + z*z
|
||||
until l2 <= 1 and l2 >= 1e-6
|
||||
-- normalize
|
||||
local l = math.sqrt(l2)
|
||||
return fast_new(x/l, y/l, z/l)
|
||||
end
|
||||
|
||||
if rawget(_G, "core") and core.set_read_vector and core.set_push_vector then
|
||||
local function read_vector(v)
|
||||
return v.x, v.y, v.z
|
||||
|
|
246
builtin/locale/__builtin.fr.tr
Normal file
246
builtin/locale/__builtin.fr.tr
Normal file
|
@ -0,0 +1,246 @@
|
|||
# textdomain: __builtin
|
||||
Invalid parameters (see /help @1).=Paramètres invalides (voir /help @1).
|
||||
Too many arguments, try using just /help <command>=Trop de paramètres, essayez /help <command>
|
||||
Available commands: @1=Commandes disponibles : @1
|
||||
Use '/help <cmd>' to get more information, or '/help all' to list everything.=Essayez '/help <cmd>' pour obtenir plus d'informations, ou '/help all' pour tout lister.
|
||||
Available commands:=Commandes disponibles :
|
||||
Command not available: @1=Commande non disponible : @1
|
||||
[all | privs | <cmd>] [-t]=[all | privs | <cmd>] [-t]
|
||||
Get help for commands or list privileges (-t: output in chat)=Obtenir de l'aide pour les commandes ou pour lister les privilèges (-t : affichage dans le tchat)
|
||||
Available privileges:=Privilèges disponibles :
|
||||
Command=Commande
|
||||
Parameters=Paramètres
|
||||
For more information, click on any entry in the list.=Pour plus d'informations, cliquez sur une entrée dans la liste.
|
||||
Double-click to copy the entry to the chat history.=Double-cliquez pour copier une entrée dans l'historique du tchat.
|
||||
Command: @1 @2=Commande : @1 @2
|
||||
Available commands: (see also: /help <cmd>)=Commandes disponibles : (voir aussi : /help <cmd>)
|
||||
Close=Fermer
|
||||
Privilege=Privilège
|
||||
Description=Description
|
||||
Empty command.=Commande vide.
|
||||
Invalid command: @1=Commande invalide : @1
|
||||
Invalid command usage.=Usage invalide de la commande.
|
||||
(@1 s)= (@1 s)
|
||||
Command execution took @1 s=L'exécution de la commande a pris @1 s.
|
||||
You don't have permission to run this command (missing privileges: @1).=Vous n'avez pas la permission d'exécuter cette commande (privilèges manquants : @1)
|
||||
Unable to get position of player @1.=Impossible d'obtenir la position du joueur @1.
|
||||
Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Format incorrect de la zone. Demandé : (x1, y1, z1) (x2, y2, z2)
|
||||
<action>=<action>
|
||||
Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=Affiche une action de tchat (ex : '/me commande une pizza' affichage '<joueur> commande une pizza')
|
||||
Show the name of the server owner=Affiche le nom du propriétaire du serveur
|
||||
The administrator of this server is @1.=L'administrateur de ce serveur est @1.
|
||||
There's no administrator named in the config file.=Il n'y a pas d'administrateur indiqué dans le fichier de configuration.
|
||||
@1 does not have any privileges.=@1 ne possède aucun privilège.
|
||||
Privileges of @1: @2=Privilège(s) de @1 : @2
|
||||
[<name>]=[<nom>]
|
||||
Show privileges of yourself or another player=Affiche vos privilèges ou ceux d'un autre joueur.
|
||||
Player @1 does not exist.=Le joueur @1 n'existe pas.
|
||||
<privilege>=<privilège>
|
||||
Return list of all online players with privilege=Renvoie la liste de tous les joueurs en ligne avec un privilège.
|
||||
Invalid parameters (see /help haspriv).=Paramètres invalides (voir /help haspriv)
|
||||
Unknown privilege!=Privilège inconnu !
|
||||
No online player has the "@1" privilege.=Aucun joueur en ligne avant le privilège « @1 »
|
||||
Players online with the "@1" privilege: @2=Joueurs en ligne avec le privilège « @1 » : @2
|
||||
Your privileges are insufficient.=Vos privilèges sont insuffisants.
|
||||
Your privileges are insufficient. '@1' only allows you to grant: @2=Vos privilèges sont insuffisants. '@1' vous autorise seulement d'accorder : @2
|
||||
Unknown privilege: @1=Privilège inconnu : @1
|
||||
@1 granted you privileges: @2=@1 vous a accordé les privilèges : @2
|
||||
<name> (<privilege> [, <privilege2> [<...>]] | all)=<nom> (<privilège> [, <privilège2> [<...>]] | all)
|
||||
Give privileges to player=Accorder le privilège au joueur
|
||||
Invalid parameters (see /help grant).=Paramètres invalides (voir /help grant)
|
||||
<privilege> [, <privilege2> [<...>]] | all=<privilège> [, <privilège2> [<...>]] | all
|
||||
Grant privileges to yourself=Accorder des privilèges à vous-même
|
||||
Invalid parameters (see /help grantme).=Paramètres invalides (voir /help grantme)
|
||||
Your privileges are insufficient. '@1' only allows you to revoke: @2=Vos privilèges sont insuffisants. '@1' vous autorise seulement à révoquer : @2
|
||||
Note: Cannot revoke in singleplayer: @1=Note : Impossible de révoquer en solo : @1
|
||||
Note: Cannot revoke from admin: @1=Note : Impossible de révoquer à l'administrateur : @1
|
||||
No privileges were revoked.=Aucun privilège n'a été révoqué.
|
||||
@1 revoked privileges from you: @2=@1 vous a révoqué le privilège : @2
|
||||
Remove privileges from player=Révoquer les privilèges au joueur
|
||||
Invalid parameters (see /help revoke).=Paramètres invalides (voir /help revoke).
|
||||
Revoke privileges from yourself=Révoquer des privilèges à vous-même
|
||||
Invalid parameters (see /help revokeme).=Paramètres invalides (voir /help revokeme).
|
||||
<name> <password>=<nom> <mot de passe>
|
||||
Set player's password (sent unencrypted, thus insecure)=Voir le mot de passe d'un joueur (envoyé non crypté, soit non sécurisé)
|
||||
Name field required.=Le champ « nom » est requis.
|
||||
Your password was cleared by @1.=Votre mot de passe a été effacé par @1.
|
||||
Password of player "@1" cleared.=Mot de passe du joueur « @1 » effacé.
|
||||
Your password was set by @1.=Votre mot de passe a été défini par @1.
|
||||
Password of player "@1" set.=Mot de passe « @1 » défini.
|
||||
<name>=<nom>
|
||||
Set empty password for a player=Définir un mot de passe pour un joueur
|
||||
Reload authentication data=Recharger les données d'authentification
|
||||
Done.=Fait.
|
||||
Failed.=Échoué.
|
||||
Remove a player's data=Supprimer les données d'un joueur
|
||||
Player "@1" removed.=Joueur « @1 » supprimé.
|
||||
No such player "@1" to remove.=Aucun joueur « @1 » à supprimer.
|
||||
Player "@1" is connected, cannot remove.=Le joueur « @1 » est connecté, impossible de supprimer.
|
||||
Unhandled remove_player return code @1.=La commande remove_player non gérée a retourné le code @1.
|
||||
Cannot teleport out of map bounds!=Impossible de téléporter en dehors des limites de la carte !
|
||||
Cannot get player with name @1.=Impossible d'obtenir le joueur @1.
|
||||
Cannot teleport, @1 is attached to an object!=Impossible de téléporter, @1 est lié à un objet !
|
||||
Teleporting @1 to @2.=Téléportation de @1 vers @2.
|
||||
One does not teleport to oneself.=Impossible de se téléporter vers soi-même.
|
||||
Cannot get teleportee with name @1.=Impossible d'obtenir le téléporté @1.
|
||||
Cannot get target player with name @1.=Impossible d'obtenir le joueur cible @1.
|
||||
Teleporting @1 to @2 at @3.=Téléportation de @1 vers @2 à @3.
|
||||
<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=<X>, <Y>, <Z> | <vers_nom> | <nom> <X>, <Y>, <Z> | <nom> <vers_nom>
|
||||
Teleport to position or player=Se téléporter vers une position ou un joueur.
|
||||
You don't have permission to teleport other players (missing privilege: @1).=Vous n'avez pas la permission de téléporter des joueurs (privilège manquant : @1).
|
||||
([-n] <name> <value>) | <name>=([-n] <nom> <valeur>) | <nom>
|
||||
Set or read server configuration setting=Définir ou lire un paramètre de configuration du serveur.
|
||||
Failed. Cannot modify secure settings. Edit the settings file manually.=Échoué. Impossible de modifier les paramètres sécurisés. Éditez le fichier manuellement.
|
||||
Failed. Use '/set -n <name> <value>' to create a new setting.=Échoué. Utilisez '/set -n <nom> <valeur>' pour créer un nouveau paramètre.
|
||||
@1 @= @2=@1 @= @2
|
||||
<not set>=<non défini>
|
||||
Invalid parameters (see /help set).=Paramètres invalides (voir /help set).
|
||||
Finished emerging @1 blocks in @2ms.=Fini de générer @1 blocks en @2 ms.
|
||||
emergeblocks update: @1/@2 blocks emerged (@3%)=Mise à jour de emergeblocks : @1/@2 de blocs générés (@3%)
|
||||
(here [<radius>]) | (<pos1> <pos2>)=(here [<rayon>]) | (<pos1> <pos1>)
|
||||
Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Charger (ou, si inexistant, générer), des blocs contenus dans la zone de pos1 à pos2 (<pos1> et <pos2> doivent être entre parenthèses)
|
||||
Started emerge of area ranging from @1 to @2.=Début de la génération de la zone de @1 à @2.
|
||||
Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Supprimer les blocs contenus dans la zone de pos1 à pos2 (<pos1> et <pos2> doivent être entre parenthèses)
|
||||
Successfully cleared area ranging from @1 to @2.=La zone de @1 à @2 a été nettoyée avec succès.
|
||||
Failed to clear one or more blocks in area.=Le nettoyage d'un ou plusieurs blocs dans la zone a echoué.
|
||||
Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=Réinitialiser l'éclairage dans la zone de pos1 à pos2 (<pos1> et <pos2> doivent être entre parenthèses)
|
||||
Successfully reset light in the area ranging from @1 to @2.=L'éclairage dans la zone de @1 à @2 a été réinitialisé avec succès.
|
||||
Failed to load one or more blocks in area.=Le chargement d'un ou plusieurs blocs dans la zone a échoué.
|
||||
List mods installed on the server=Liste les modules installés sur le serveur.
|
||||
No mods installed.=Aucun module installé.
|
||||
Cannot give an empty item.=Impossible de donner un objet vide.
|
||||
Cannot give an unknown item.=Impossible de donner un objet inconnu.
|
||||
Giving 'ignore' is not allowed.=Donner 'ignore' n'est pas autorisé.
|
||||
@1 is not a known player.=Le joueur @1 est inconnu.
|
||||
@1 partially added to inventory.=@1 été partiellement rajouté à l'inventaire.
|
||||
@1 could not be added to inventory.=@1 n'a pas pu être rajouté à l'inventaire.
|
||||
@1 added to inventory.=@1 a été rajouté à l'inventaire.
|
||||
@1 partially added to inventory of @2.=@1 a été partiellement rajouté à l'inventaire de @2.
|
||||
@1 could not be added to inventory of @2.=@1 n'a pas pu être rajouté à l'inventaire de @2.
|
||||
@1 added to inventory of @2.=@1 a été rajouté à l'inventaire de @2.
|
||||
<name> <ItemString> [<count> [<wear>]]=<nom> <CodeObjet> [<nombre> [<usure>]]
|
||||
Give item to player=Donner un objet à un joueur
|
||||
Name and ItemString required.=Le nom et le code de l'objet sont requis
|
||||
<ItemString> [<count> [<wear>]]=<CodeObjet> [<nombre> [<usure>]]
|
||||
Give item to yourself=Donner un objet à vous-même
|
||||
ItemString required.=Code objet requis.
|
||||
<EntityName> [<X>,<Y>,<Z>]=<NomEntité> [<X>, <Y>, <Z>]
|
||||
Spawn entity at given (or your) position=Faire apparaître une entité à une position donnée (ou la vôtre)
|
||||
EntityName required.=Nom de l'entité requis.
|
||||
Unable to spawn entity, player is nil.=Impossible de faire apparaître l'entité, le joueur est inexistant.
|
||||
Cannot spawn an unknown entity.=Impossible de faire apparaître une entité inconnue.
|
||||
Invalid parameters (@1).=Paramètres invalides (@1).
|
||||
@1 spawned.=@1 a apparu.
|
||||
@1 failed to spawn.=@1 a échoué à apparaître.
|
||||
Destroy item in hand=Détruire l'objet dans la main
|
||||
Unable to pulverize, no player.=Impossible de détruire, pas de joueur.
|
||||
Unable to pulverize, no item in hand.=Impossible de détruire, pas d'objet dans la main.
|
||||
An item was pulverized.=Un objet a été détruit.
|
||||
[<range>] [<seconds>] [<limit>]=[<rayon>] [<secondes>] [<limite>]
|
||||
Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=Vérifier qui a le dernier touché un nœud ou un autre aux environs dans le temps spécifié par <secondes>. Par défaut : rayon @= 0, secondes @= 86400 @= 24h, limite @= 5. Définissez <secondes> à inf pour aucune limite de temps.
|
||||
Rollback functions are disabled.=Les fonctions retour sont désactivées.
|
||||
That limit is too high!=Cette limite est trop grande !
|
||||
Checking @1 ...=Vérification de @1 ...
|
||||
Nobody has touched the specified location in @1 seconds.=Personne n'as touché la position spécificée dans les dernières @1 secondes.
|
||||
@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 il y a @5 secondes.
|
||||
Punch a node (range@=@1, seconds@=@2, limit@=@3).=Taper un nœud (rayon @= @1, secondes @= @2, limite @= @3).
|
||||
(<name> [<seconds>]) | (:<actor> [<seconds>])=(<nom> [<secondes>]) | (:<acteur> [<secondes>])
|
||||
Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=Annuler les actions d'un joueur. La valeur par défaut de <secondes> est 60. Définissez <secondes> à inf pour aucune limite de temps.
|
||||
Invalid parameters. See /help rollback and /help rollback_check.=Paramètres invalides. Voir /help rollback et /help rollback_check.
|
||||
Reverting actions of player '@1' since @2 seconds.=Annuler les actions du joueur '@1' depuis @2 secondes.
|
||||
Reverting actions of @1 since @2 seconds.=Annuler les actions de @1 depuis @2 secondes.
|
||||
(log is too long to show)=(le journal est trop long à afficher)
|
||||
Reverting actions succeeded.=Les actions ont été annulées avec succès.
|
||||
Reverting actions FAILED.=L'annulation des actions a échoué.
|
||||
Show server status=Afficher le statut du serveur.
|
||||
This command was disabled by a mod or game.=Cette commande a été désactivée par un module ou un jeu.
|
||||
[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0.24000>]
|
||||
Show or set time of day=Afficher ou définir l'heure du jour.
|
||||
Current time is @1:@2.=L'heure actuelle est @1:@2.
|
||||
You don't have permission to run this command (missing privilege: @1).=Vous n'avez pas la permission d'exécuter cette commande (privilège manquant : @1)
|
||||
Invalid time (must be between 0 and 24000).=Heure invalide (doit être comprise entre 0 et 24000).
|
||||
Time of day changed.=L'heure du jour a changé.
|
||||
Invalid hour (must be between 0 and 23 inclusive).=Heure invalide (doit être comprise entre 0 et 23 inclus).
|
||||
Invalid minute (must be between 0 and 59 inclusive).=Minute invalide (doit être comprise entre 0 et 59 inclus).
|
||||
Show day count since world creation=Afficher le nombre de jours écoulés depuis la création du monde.
|
||||
Current day is @1.=Le jour actuel est @1.
|
||||
[<delay_in_seconds> | -1] [-r] [<message>]=[<délai_en_secondes> | -1] [-r] [<message>]
|
||||
Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=Éteindre le serveur (-1 annule une extinction programmée, -r autorise les joueurs à se reconnecter)
|
||||
Server shutting down (operator request).=Extinction du serveur (requête de l'opérateur).
|
||||
Ban the IP of a player or show the ban list=Bannir l'IP d'un joueur ou affiche la liste des bans.
|
||||
The ban list is empty.=La liste des bans est vide.
|
||||
Ban list: @1=Liste de bans : @1
|
||||
You cannot ban players in singleplayer!=Vous ne pouvez pas bannir des joueurs en solo !
|
||||
Player is not online.=Le joueur n'est pas en ligne.
|
||||
Failed to ban player.=Le bannissement du joueur a échoué.
|
||||
Banned @1.=@1 a été banni.
|
||||
<name> | <IP_address>=<nom> | <adresse_IP>
|
||||
Remove IP ban belonging to a player/IP=Rétablir un IP appartenant à un joueur ou une adresse IP.
|
||||
Failed to unban player/IP.=Le rétablissement du joueur ou de l'adresse IP a échoué.
|
||||
Unbanned @1.=@1 a été rétabli.
|
||||
<name> [<reason>]=<nom> [<motif>]
|
||||
Kick a player=Expulser un joueur
|
||||
Failed to kick player @1.=L'expulsion du joueur @1 a échoué.
|
||||
Kicked @1.=@1 a été expulsé.
|
||||
[full | quick]=[full | quick]
|
||||
Clear all objects in world=Nettoyer tous les objets dans le monde
|
||||
Invalid usage, see /help clearobjects.=Usage invalide, voir /help clearobjects.
|
||||
Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Nettoyage de tous les objects. Cela peut prendre du temps. Une inactivité peut surveni (par @1).
|
||||
Cleared all objects.=Tous les objets ont été nettoyés.
|
||||
<name> <message>=<nom> <message>
|
||||
Send a direct message to a player=Envoyer un message privé à un joueur.
|
||||
Invalid usage, see /help msg.=Usage invalide, voir /help msg.
|
||||
The player @1 is not online.=Le joueur @1 n'est pas en ligne.
|
||||
DM from @1: @2=Message privé de @1 : @2
|
||||
Message sent.=Message privé envoyé.
|
||||
Get the last login time of a player or yourself=Obtenir l'horodatage de la dernière connexion d'un joueur ou de vous-même.
|
||||
@1's last login time was @2.=@1 s'est connecté pour la dernière fois au @2.
|
||||
@1's last login time is unknown.=L'horodatage de la dernière connexion de @1 est inconnu.
|
||||
Clear the inventory of yourself or another player=Vider votre inventaire ou celui d'un autre joueur.
|
||||
You don't have permission to clear another player's inventory (missing privilege: @1).=Vous n'avez pas la permission de vider l'inventaire d'un autre joueur (privilège manquant : @1).
|
||||
@1 cleared your inventory.=@1 a vidé votre inventaire.
|
||||
Cleared @1's inventory.=L'inventaire de @1 a été vidé.
|
||||
Player must be online to clear inventory!=Le joueur doit être en ligne pour pouvoir vider son inventaire.
|
||||
Players can't be killed, damage has been disabled.=Les joueurs ne peuvent pas être tués, les dommages ont été désactivés.
|
||||
Player @1 is not online.=Le joueur @1 n'est pas en ligne.
|
||||
You are already dead.=Vous êtes déjà mort.
|
||||
@1 is already dead.=@1 est déjà mort.
|
||||
@1 has been killed.=@1 a été tué.
|
||||
Kill player or yourself=Tuer un joueur ou vous-même.
|
||||
@1 joined the game.=@1 a rejoint la partie.
|
||||
@1 left the game.=@1 a quitté la partie.
|
||||
@1 left the game (timed out).=@1 a quitté la partie (inactivité).
|
||||
(no description)=(sans description)
|
||||
Can interact with things and modify the world=Peut interagir avec des éléments ou modifier le monde.
|
||||
Can speak in chat=Peut écrire dans le tchat.
|
||||
Can modify basic privileges (@1)=Peut modifier les privilèges basiques (@1)
|
||||
Can modify privileges=Peut modifier les privilèges
|
||||
Can teleport self=Peut se téléporter
|
||||
Can teleport other players=Peut téléporter d'autres joueurs
|
||||
Can set the time of day using /time=Peut définir l'heure du jour avec /time
|
||||
Can do server maintenance stuff=Peut effectuer des tâches de maintenance du serveur
|
||||
Can bypass node protection in the world=Peut outrepasser la protection des nœuds dans le monde.
|
||||
Can ban and unban players=Peut bannir et rétablir des joueurs.
|
||||
Can kick players=Peut expulser des joueurs.
|
||||
Can use /give and /giveme=Peut utiliser /give et /giveme
|
||||
Can use /setpassword and /clearpassword=Peut utiliser /setpassword et /clearpassword
|
||||
Can use fly mode=Peut utiliser le mode vol
|
||||
Can use fast mode=Peut utiliser le mode rapide
|
||||
Can fly through solid nodes using noclip mode=Peut voler à travers des nœuds solides en utilisant le mode de collisions désactivées.
|
||||
Can use the rollback functionality=Peut utiliser la fonctionnalité de retour
|
||||
Can enable wireframe=Peut activer la vue fil de fer
|
||||
Unknown Item=Objet inconnu
|
||||
Air=Air
|
||||
Ignore=Ignorer
|
||||
You can't place 'ignore' nodes!=Vous ne pouvez pas placé de nœuds 'ignorés' !
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<filtre>] | dump [<filtre>] | save [<format> [<filtre>]] | reset
|
||||
Handle the profiler and profiling data=Traiter le profileur et les données de profilage
|
||||
Statistics written to action log.=Les statistiques sont écrites dans les journaux d'actions.
|
||||
Statistics were reset.=Les statistiques ont été réinitialisées.
|
||||
Usage: @1=Usage : @1
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Le format peut être txt, csv, lua, json ou json_pretty (les structures sont sujettes au changement).
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=Les valeurs inférieures affichent les temps absolu et relatif dépensés par étape du serveur par la fonction utilisée.
|
||||
A total of @1 sample(s) were taken.=@1 échantillons ont été collectés.
|
||||
The output is limited to '@1'.=La sortie est limitée à '@1'.
|
||||
Saving of profile failed: @1=La sauvegarde du profil a échoué : @1
|
||||
Profile saved to @1=Le profil a été sauvegardé dans @1
|
246
builtin/locale/__builtin.pt_BR.tr
Normal file
246
builtin/locale/__builtin.pt_BR.tr
Normal file
|
@ -0,0 +1,246 @@
|
|||
# textdomain: __builtin
|
||||
Invalid parameters (see /help @1).=Parâmetros inválidos (veja /help @1).
|
||||
Too many arguments, try using just /help <command>=Muitos argumentos, tente usar apenas /help <comando>
|
||||
Available commands: @1=Comandos disponíveis: @1
|
||||
Use '/help <cmd>' to get more information, or '/help all' to list everything.=Use '/help <cmd>' para obter mais informações, ou '/help all' para listar tudo.
|
||||
Available commands:=Comandos disponíveis:
|
||||
Command not available: @1=Comando não disponível: @1
|
||||
[all | privs | <cmd>] [-t]=[all | privs | <cmd>] [-t]
|
||||
Get help for commands or list privileges (-t: output in chat)=Obtenha ajuda para comandos ou liste privilégios (-t: saída no chat)
|
||||
Available privileges:=Privilégios disponíveis:
|
||||
Command=Comando
|
||||
Parameters=Parâmetros
|
||||
For more information, click on any entry in the list.=Para mais informações, clique em qualquer entrada na lista.
|
||||
Double-click to copy the entry to the chat history.=Clique duas vezes para copiar a entrada para o histórico do chat.
|
||||
Command: @1 @2=Comando: @1 @2
|
||||
Available commands: (see also: /help <cmd>)=Comandos disponíveis: (veja também: /help <cmd>)
|
||||
Close=Fechar
|
||||
Privilege=Privilégio
|
||||
Description=Descrição
|
||||
Empty command.=Comando vazio.
|
||||
Invalid command: @1=Comando inválido: @1
|
||||
Invalid command usage.=Uso de comando inválido.
|
||||
(@1 s)= (@1 s)
|
||||
Command execution took @1 s=A execução do comando levou @1 s
|
||||
You don't have permission to run this command (missing privileges: @1).=Você não tem permissão para executar este comando (privilégios faltando: @1).
|
||||
Unable to get position of player @1.=Incapaz de obter a posição do jogador @1.
|
||||
Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Formato de área incorreto. Esperado: (x1,y1,z1) (x2,y2,z2)
|
||||
<action>=<ação>
|
||||
Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=Mostra a ação do chat (por exemplo, '/me orders a pizza' exibe '<nome do jogador> pede uma pizza')
|
||||
Show the name of the server owner=Mostra o nome do dono do servidor
|
||||
The administrator of this server is @1.=O administrador deste servidor é @1.
|
||||
There's no administrator named in the config file.=Não há administrador nomeado no arquivo de configuração.
|
||||
@1 does not have any privileges.=@1 não tem nenhum privilégio.
|
||||
Privileges of @1: @2=Privilégios de @1: @2
|
||||
[<name>]=[<nome>]
|
||||
Show privileges of yourself or another player=Mostrar privilégios seus ou de outro jogador
|
||||
Player @1 does not exist.=O jogador @1 não existe.
|
||||
<privilege>=<privilégio>
|
||||
Return list of all online players with privilege=Retornar lista de todos os jogadores online com privilégio
|
||||
Invalid parameters (see /help haspriv).=Parâmetros inválidos (veja /help haspriv).
|
||||
Unknown privilege!=Privilégio desconhecido!
|
||||
No online player has the "@1" privilege.=Nenhum jogador online tem o privilégio "@1".
|
||||
Players online with the "@1" privilege: @2=Jogadores online com o privilégio "@1": @2
|
||||
Your privileges are insufficient.=Seus privilégios são insuficientes.
|
||||
Your privileges are insufficient. '@1' only allows you to grant: @2=Seus privilégios são insuficientes. '@1' só permite que você conceda: @2
|
||||
Unknown privilege: @1=Privilégio desconhecido: @1
|
||||
@1 granted you privileges: @2=@1 concedeu-lhe privilégios: @2
|
||||
<name> (<privilege> [, <privilege2> [<...>]] | all)=<nome> (<privilégio> [, <privilégio2> [<...>]] | all)
|
||||
Give privileges to player=Conceder privilégios ao jogador
|
||||
Invalid parameters (see /help grant).=Parâmetros inválidos (veja /help grant).
|
||||
<privilege> [, <privilege2> [<...>]] | all=<privilégio> [, <privilégio2> [<...>]] | all
|
||||
Grant privileges to yourself=Concede privilégios a você mesmo
|
||||
Invalid parameters (see /help grantme).=Parâmetros inválidos (veja /help grantme).
|
||||
Your privileges are insufficient. '@1' only allows you to revoke: @2=Seus privilégios são insuficientes. '@1' só permite que você revogue: @2
|
||||
Note: Cannot revoke in singleplayer: @1=Nota: Não é possível revogar em singleplayer: @1
|
||||
Note: Cannot revoke from admin: @1=Nota: Não é possível revogar do administrador: @1
|
||||
No privileges were revoked.=Nenhum privilégio foi revogado.
|
||||
@1 revoked privileges from you: @2=@1 revogou seus privilégios: @2
|
||||
Remove privileges from player=Remover privilégios do jogador
|
||||
Invalid parameters (see /help revoke).=Parâmetros inválidos (veja /help revoke).
|
||||
Revoke privileges from yourself=Revogar privilégios de si mesmo
|
||||
Invalid parameters (see /help revokeme).=Parâmetros inválidos (veja /help revokeme).
|
||||
<name> <password>=<nome> <senha>
|
||||
Set player's password (sent unencrypted, thus insecure)=Definir a senha do jogador (enviada sem criptografia, portanto insegura)
|
||||
Name field required.=Campo de nome obrigatório.
|
||||
Your password was cleared by @1.=Sua senha foi limpa por @1.
|
||||
Password of player "@1" cleared.=Senha do jogador "@1" limpa.
|
||||
Your password was set by @1.=Sua senha foi definida por @1.
|
||||
Password of player "@1" set.=Senha do jogador "@1" definida.
|
||||
<name>=<nome>
|
||||
Set empty password for a player=Definir senha vazia para um jogador
|
||||
Reload authentication data=Recarregar dados de autenticação
|
||||
Done.=Pronto.
|
||||
Failed.=Erro.
|
||||
Remove a player's data=Remover dados de um jogador
|
||||
Player "@1" removed.=Jogador "@1" removido.
|
||||
No such player "@1" to remove.=Não existe tal jogador "@1" para remover.
|
||||
Player "@1" is connected, cannot remove.=Jogador "@1" está conectado, não pode ser removido.
|
||||
Unhandled remove_player return code @1.=Código de retorno remove_player não tratado @1.
|
||||
Cannot teleport out of map bounds!=Não é possível teleportar para fora dos limites do mapa!
|
||||
Cannot get player with name @1.=Não é possível obter jogador com o nome @1.
|
||||
Cannot teleport, @1 is attached to an object!=Não é possível teleportar, @1 está anexado a um objeto!
|
||||
Teleporting @1 to @2.=Teleportando @1 para @2.
|
||||
One does not teleport to oneself.=Não tem como se teletransportar para você mesmo.
|
||||
Cannot get teleportee with name @1.=Não é possível teletransportar com o nome @1.
|
||||
Cannot get target player with name @1.=Não é possível obter jogador alvo com o nome @1.
|
||||
Teleporting @1 to @2 at @3.=Teleportando @1 para @2 em @3.
|
||||
<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=<X>,<Y>,<Z> | <para_nome> | <nome> <X>,<Y>,<Z> | <nome> <para_nome>
|
||||
Teleport to position or player=Teleportar para posição ou um jogador
|
||||
You don't have permission to teleport other players (missing privilege: @1).=Você não tem permissão para teleportar outros jogadores (privilégio faltando: @1).
|
||||
([-n] <name> <value>) | <name>=([-n] <nome> <valor>) | <nome>
|
||||
Set or read server configuration setting=Definir ou ler configuração do servidor
|
||||
Failed. Cannot modify secure settings. Edit the settings file manually.=Falha. Não é possível modificar configurações seguras. Edite o arquivo de configurações manualmente.
|
||||
Failed. Use '/set -n <name> <value>' to create a new setting.=Falhou. Use '/set -n <nome> <valor>' para criar uma nova configuração.
|
||||
@1 @= @2=@1 @= @2
|
||||
<not set>=<não definido>
|
||||
Invalid parameters (see /help set).=Parâmetros inválidos (veja /help set).
|
||||
Finished emerging @1 blocks in @2ms.=Finalizada a emergência de @1 blocos em @2ms.
|
||||
emergeblocks update: @1/@2 blocks emerged (@3%)=atualização de emergeblocks: @1/@2 blocos emergidos (@3%)
|
||||
(here [<radius>]) | (<pos1> <pos2>)=(aqui [<raio>]) | (<pos1> <pos2>)
|
||||
Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Carregar (ou, se inexistente, gerar) blocos de mapa contidos na área pos1 a pos2 (<pos1> e <pos2> devem estar entre parênteses)
|
||||
Started emerge of area ranging from @1 to @2.=Iniciada o surgimento de áreas que vão de @1 a @2.
|
||||
Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Excluir blocos de mapa contidos na área pos1 a pos2 (<pos1> e <pos2> devem estar entre parênteses)
|
||||
Successfully cleared area ranging from @1 to @2.=Área limpa com sucesso variando de @1 a @2.
|
||||
Failed to clear one or more blocks in area.=Falha ao limpar um ou mais blocos na área.
|
||||
Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=Redefine a iluminação na área entre pos1 e pos2 (<pos1> e <pos2> devem estar entre parênteses)
|
||||
Successfully reset light in the area ranging from @1 to @2.=Iluminação redefinida com sucesso na área variando de @1 a @2.
|
||||
Failed to load one or more blocks in area.=Falha ao carregar um ou mais blocos na área.
|
||||
List mods installed on the server=Listar mods instalados no servidor
|
||||
No mods installed.=Sem mods instalados.
|
||||
Cannot give an empty item.=Não é possível dar um item vazio.
|
||||
Cannot give an unknown item.=Não é possível dar um item desconhecido.
|
||||
Giving 'ignore' is not allowed.=Não é permitido dar 'ignore'.
|
||||
@1 is not a known player.=@1 não é um jogador conhecido.
|
||||
@1 partially added to inventory.=@1 parcialmente adicionado ao inventário.
|
||||
@1 could not be added to inventory.=@1 não pôde ser adicionado ao inventário.
|
||||
@1 added to inventory.=@1 adicionado ao inventário.
|
||||
@1 partially added to inventory of @2.=@1 parcialmente adicionado ao inventário de @2.
|
||||
@1 could not be added to inventory of @2.=@1 não pôde ser adicionado ao inventário de @2.
|
||||
@1 added to inventory of @2.=@1 adicionado ao inventário de @2.
|
||||
<name> <ItemString> [<count> [<wear>]]=<nome> <ItemString> [<quantidade> [<desgaste>]]
|
||||
Give item to player=Dar item ao jogador
|
||||
Name and ItemString required.=Nome e ItemString são obrigatórios.
|
||||
<ItemString> [<count> [<wear>]]=<ItemString> [<quantidade> [<desgaste>]]
|
||||
Give item to yourself=Dar item a si mesmo
|
||||
ItemString required.=ItemString é obrigatório.
|
||||
<EntityName> [<X>,<Y>,<Z>]=<NomeDaEntidade> [<X>,<Y>,<Z>]
|
||||
Spawn entity at given (or your) position=Gerar entidade na posição fornecida (ou na sua)
|
||||
EntityName required.=NomeDaEntidade é obrigatório.
|
||||
Unable to spawn entity, player is nil.=Não é possível gerar a entidade, jogador é nulo.
|
||||
Cannot spawn an unknown entity.=Não é possível gerar uma entidade desconhecida.
|
||||
Invalid parameters (@1).=Parâmetros inválidos (@1).
|
||||
@1 spawned.=@1 gerado.
|
||||
@1 failed to spawn.=Falha ao gerar @1.
|
||||
Destroy item in hand=Destruir item na mão
|
||||
Unable to pulverize, no player.=Incapaz de pulverizar, sem jogador.
|
||||
Unable to pulverize, no item in hand.=Incapaz de pulverizar, sem item na mão.
|
||||
An item was pulverized.=Um item foi pulverizado.
|
||||
[<range>] [<seconds>] [<limit>]=[<alcance>] [<segundos>] [<limite>]
|
||||
Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=Verificar quem tocou pela última vez um nó ou um nó próximo dentro do tempo especificado por <segundos>. Padrão: alcance @= 0, segundos @= 86400 @= 24h, limite @= 5. Defina <segundos> como inf para sem limite de tempo
|
||||
Rollback functions are disabled.=Funções de rollback estão desativadas.
|
||||
That limit is too high!=Esse limite é muito alto!
|
||||
Checking @1 ...=Verificando @1 ...
|
||||
Nobody has touched the specified location in @1 seconds.=Ninguém tocou a localização especificada em @1 segundos.
|
||||
@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 @5 segundos atrás.
|
||||
Punch a node (range@=@1, seconds@=@2, limit@=@3).=Golpeie um nó (alcance@=@1, segundos@=@2, limite@=@3).
|
||||
(<name> [<seconds>]) | (:<actor> [<seconds>])=(<nome> [<segundos>]) | (:<ator> [<segundos>])
|
||||
Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=Reverter ações de um jogador. O padrão para <segundos> é 60. Defina <segundos> como inf para sem limite de tempo
|
||||
Invalid parameters. See /help rollback and /help rollback_check.=Parâmetros inválidos. Veja /help rollback e /help rollback_check.
|
||||
Reverting actions of player '@1' since @2 seconds.=Revertendo ações do jogador '@1' desde @2 segundos.
|
||||
Reverting actions of @1 since @2 seconds.=Revertendo ações de @1 desde @2 segundos.
|
||||
(log is too long to show)=O log é muito longo para mostrar
|
||||
Reverting actions succeeded.=Ações revertidas com sucesso.
|
||||
Reverting actions FAILED.=Reversão de ações FALHOU.
|
||||
Show server status=Mostrar status do servidor
|
||||
This command was disabled by a mod or game.=Este comando foi desativado por um mod ou jogo.
|
||||
[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>]
|
||||
Show or set time of day=Mostrar ou definir hora do dia
|
||||
Current time is @1:@2.=A hora atual é @1:@2.
|
||||
You don't have permission to run this command (missing privilege: @1).=Você não tem permissão para executar este comando (privilégio faltando: @1).
|
||||
Invalid time (must be between 0 and 24000).=Hora inválida (deve estar entre 0 e 24000).
|
||||
Time of day changed.=Hora do dia alterada.
|
||||
Invalid hour (must be between 0 and 23 inclusive).=Hora inválida (deve estar entre 0 e 23 inclusivo).
|
||||
Invalid minute (must be between 0 and 59 inclusive).=Minuto inválido (deve estar entre 0 e 59 inclusivo).
|
||||
Show day count since world creation=Mostrar contagem de dias desde a criação do mundo
|
||||
Current day is @1.=O dia atual é @1.
|
||||
[<delay_in_seconds> | -1] [-r] [<message>]=[<atraso_em_segundos> | -1] [-r] [<mensagem>]
|
||||
Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=Desligar servidor (-1 cancela o desligamento adiado, -r permite que os jogadores se reconectem)
|
||||
Server shutting down (operator request).=Servidor desligando (solicitação do operador).
|
||||
Ban the IP of a player or show the ban list=Banir o IP de um jogador ou mostrar a lista de banimentos
|
||||
The ban list is empty.=A lista de banimentos está vazia.
|
||||
Ban list: @1=Lista de banimentos: @1
|
||||
You cannot ban players in singleplayer!=Você não pode banir jogadores em singleplayer!
|
||||
Player is not online.=Jogador não está online.
|
||||
Failed to ban player.=Falha ao banir jogador.
|
||||
Banned @1.=Banido @1.
|
||||
<name> | <IP_address>=<nome> | <endereço_IP>
|
||||
Remove IP ban belonging to a player/IP=Remover banimento de IP pertencente a um jogador/IP
|
||||
Failed to unban player/IP.=Falha ao desbanir jogador/IP.
|
||||
Unbanned @1.=Desbanido @1.
|
||||
<name> [<reason>]=<nome> [<motivo>]
|
||||
Kick a player=Expulsar um jogador
|
||||
Failed to kick player @1.=Falha ao expulsar jogador @1.
|
||||
Kicked @1.=Expulso @1.
|
||||
[full | quick]=[full | quick]
|
||||
Clear all objects in world=Limpar todos os objetos no mundo
|
||||
Invalid usage, see /help clearobjects.=Uso inválido, veja /help clearobjects.
|
||||
Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Limpeza de todos os objetos. Isso pode levar muito tempo. Você pode experimentar um tempo limite. (por @1)
|
||||
Cleared all objects.=Todos os objetos foram limpos.
|
||||
<name> <message>=<nome> <mensagem>
|
||||
Send a direct message to a player=Enviar uma mensagem direta a um jogador
|
||||
Invalid usage, see /help msg.=Uso inválido, veja /help msg.
|
||||
The player @1 is not online.=O jogador @1 não está online.
|
||||
DM from @1: @2=DM de @1: @2
|
||||
Message sent.=Mensagem enviada.
|
||||
Get the last login time of a player or yourself=Pegue o último horário de login de um jogador ou de você mesmo
|
||||
@1's last login time was @2.=O último login de @1 foi às @2.
|
||||
@1's last login time is unknown.=O último login de @1 é desconhecido.
|
||||
Clear the inventory of yourself or another player=Limpar o inventário de você mesmo ou de outro jogador
|
||||
You don't have permission to clear another player's inventory (missing privilege: @1).=Você não tem permissão para limpar o inventário de outro jogador (privilégio faltando: @1).
|
||||
@1 cleared your inventory.=@1 limpou seu inventário.
|
||||
Cleared @1's inventory.=Inventário de @1 limpo.
|
||||
Player must be online to clear inventory!=O jogador deve estar online para limpar o inventário!
|
||||
Players can't be killed, damage has been disabled.=Jogadores não podem ser mortos, o dano foi desativado.
|
||||
Player @1 is not online.=Jogador @1 não está online.
|
||||
You are already dead.=Você já está morto.
|
||||
@1 is already dead.=@1 já está morto.
|
||||
@1 has been killed.=@1 foi morto.
|
||||
Kill player or yourself=Matar jogador ou a si mesmo
|
||||
@1 joined the game.=@1 entrou no jogo.
|
||||
@1 left the game.=@1 saiu do jogo.
|
||||
@1 left the game (timed out).=@1 saiu do jogo (tempo esgotado)
|
||||
(no description)=(sem descrição)
|
||||
Can interact with things and modify the world=Pode interagir com as coisas e modificar o mundo
|
||||
Can speak in chat=Pode falar no chat
|
||||
Can modify basic privileges (@1)=Pode modificar privilégios básicos (@1)
|
||||
Can modify privileges=Pode modificar privilégios
|
||||
Can teleport self=Pode se teletransportar
|
||||
Can teleport other players=Pode teletransportar outros jogadores
|
||||
Can set the time of day using /time=Pode definir a hora do dia usando /time
|
||||
Can do server maintenance stuff=Pode realizar tarefas de manutenção do servidor
|
||||
Can bypass node protection in the world=Pode ignorar a proteção de nós no mundo
|
||||
Can ban and unban players=Pode banir e desbanir jogadores
|
||||
Can kick players=Pode chutar jogadores
|
||||
Can use /give and /giveme=Pode usar /give e /giveme
|
||||
Can use /setpassword and /clearpassword=Pode usar /setpassword e /clearpassword
|
||||
Can use fly mode=Pode usar o modo voar
|
||||
Can use fast mode=Pode usar o modo rápido
|
||||
Can fly through solid nodes using noclip mode=Pode voar através de nós sólidos usando o modo noclip
|
||||
Can use the rollback functionality=Pode usar a funcionalidade de reversão
|
||||
Can enable wireframe=Pode ativar wireframe
|
||||
Unknown Item=Item desconhecido
|
||||
Air=Ar
|
||||
Ignore=Ignorar
|
||||
You can't place 'ignore' nodes!=Você não pode colocar nós 'ignorar'!
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<filtro>] | dump [<filtro>] | save [<formato> [<filtro>]] | reset
|
||||
Handle the profiler and profiling data=Lidar com o criador de perfil e os dados de criação de perfil
|
||||
Statistics written to action log.=Estatísticas salvas no log de ações.
|
||||
Statistics were reset.=As estatísticas foram redefinidas.
|
||||
Usage: @1=Uso: @1
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=O formato pode ser txt, csv, lua, json, json_pretty (as estruturas podem estar sujeitas a alterações).
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=Os valores abaixo mostram os tempos absolutos/relativos gastos por etapa do servidor pela função instrumentada.
|
||||
A total of @1 sample(s) were taken.=Um total de @1 amostra(s) foi coletada.
|
||||
The output is limited to '@1'.=A saída é limitada a '@1'.
|
||||
Saving of profile failed: @1=Falha ao salvar o perfil: @1
|
||||
Profile saved to @1=Perfil salvo em @1
|
|
@ -306,17 +306,36 @@ function make.flags(setting)
|
|||
"label[0,0.1;" .. get_label(setting) .. "]",
|
||||
}
|
||||
|
||||
local value = core.settings:get(setting.name) or setting.default
|
||||
self.resettable = core.settings:has(setting.name)
|
||||
|
||||
checkboxes = {}
|
||||
for _, name in ipairs(value:split(",")) do
|
||||
name = name:trim()
|
||||
if name:sub(1, 2) == "no" then
|
||||
checkboxes[name:sub(3)] = false
|
||||
elseif name ~= "" then
|
||||
checkboxes[name] = true
|
||||
for _, name in ipairs(setting.possible) do
|
||||
checkboxes[name] = false
|
||||
end
|
||||
local function apply_flags(flag_string, what)
|
||||
local prefixed_flags = {}
|
||||
for _, name in ipairs(flag_string:split(",")) do
|
||||
prefixed_flags[name:trim()] = true
|
||||
end
|
||||
for _, name in ipairs(setting.possible) do
|
||||
local enabled = prefixed_flags[name]
|
||||
local disabled = prefixed_flags["no" .. name]
|
||||
if enabled and disabled then
|
||||
core.log("warning", "Flag " .. name .. " in " .. what .. " " ..
|
||||
setting.name .. " both enabled and disabled, ignoring")
|
||||
elseif enabled then
|
||||
checkboxes[name] = true
|
||||
elseif disabled then
|
||||
checkboxes[name] = false
|
||||
end
|
||||
end
|
||||
end
|
||||
-- First apply the default, which is necessary since flags
|
||||
-- which are not overridden may be missing from the value.
|
||||
apply_flags(setting.default, "default for setting")
|
||||
local value = core.settings:get(setting.name)
|
||||
if value then
|
||||
apply_flags(value, "setting")
|
||||
end
|
||||
|
||||
local columns = math.max(math.floor(avail_w / 2.5), 1)
|
||||
|
@ -325,18 +344,16 @@ function make.flags(setting)
|
|||
local y = 0.55
|
||||
|
||||
for _, possible in ipairs(setting.possible) do
|
||||
if possible:sub(1, 2) ~= "no" then
|
||||
if x >= avail_w then
|
||||
x = 0
|
||||
y = y + 0.5
|
||||
end
|
||||
|
||||
local is_checked = checkboxes[possible]
|
||||
fs[#fs + 1] = ("checkbox[%f,%f;%s;%s;%s]"):format(
|
||||
x, y, setting.name .. "_" .. possible,
|
||||
core.formspec_escape(possible), tostring(is_checked))
|
||||
x = x + column_width
|
||||
if x >= avail_w then
|
||||
x = 0
|
||||
y = y + 0.5
|
||||
end
|
||||
|
||||
local is_checked = checkboxes[possible]
|
||||
fs[#fs + 1] = ("checkbox[%f,%f;%s;%s;%s]"):format(
|
||||
x, y, setting.name .. "_" .. possible,
|
||||
core.formspec_escape(possible), tostring(is_checked))
|
||||
x = x + column_width
|
||||
end
|
||||
|
||||
return table.concat(fs, ""), y + 0.25
|
||||
|
@ -355,12 +372,10 @@ function make.flags(setting)
|
|||
if changed then
|
||||
local values = {}
|
||||
for _, name in ipairs(setting.possible) do
|
||||
if name:sub(1, 2) ~= "no" then
|
||||
if checkboxes[name] then
|
||||
table.insert(values, name)
|
||||
else
|
||||
table.insert(values, "no" .. name)
|
||||
end
|
||||
if checkboxes[name] then
|
||||
table.insert(values, name)
|
||||
else
|
||||
table.insert(values, "no" .. name)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ local core_developers = {
|
|||
"Desour/DS",
|
||||
"srifqi",
|
||||
"Gregor Parzefall (grorp)",
|
||||
"Lars Müller (luatic)",
|
||||
}
|
||||
|
||||
-- currently only https://github.com/orgs/minetest/teams/triagers/members
|
||||
|
@ -43,19 +44,24 @@ local core_team = {
|
|||
-- For updating active/previous contributors, see the script in ./util/gather_git_credits.py
|
||||
|
||||
local active_contributors = {
|
||||
"Wuzzy [Features, translations, documentation]",
|
||||
"numzero [Optimizations, work on OpenGL driver]",
|
||||
"ROllerozxa [Bugfixes, Mainmenu]",
|
||||
"Lars Müller [Bugfixes]",
|
||||
"AFCMS [Documentation]",
|
||||
"savilli [Bugfixes]",
|
||||
"fluxionary [Bugfixes]",
|
||||
"Bradley Pierce (Thresher) [Documentation]",
|
||||
"Stvk imension [Android]",
|
||||
"JosiahWI [Code cleanups]",
|
||||
"OgelGames [UI, Bugfixes]",
|
||||
"ndren [Bugfixes]",
|
||||
"Abdou-31 [Documentation]",
|
||||
"cx384",
|
||||
"numzero",
|
||||
"AFCMS",
|
||||
"sfence",
|
||||
"Wuzzy",
|
||||
"ROllerozxa",
|
||||
"JosiahWI",
|
||||
"OgelGames",
|
||||
"David Heidelberg",
|
||||
"1F616EMO",
|
||||
"HybridDog",
|
||||
"Bradley Pierce (Thresher)",
|
||||
"savilli",
|
||||
"Stvk imension",
|
||||
"y5nw",
|
||||
"chmodsayshello",
|
||||
"jordan4ibanez",
|
||||
"superfloh247",
|
||||
}
|
||||
|
||||
local previous_core_developers = {
|
||||
|
|
|
@ -153,6 +153,8 @@ invert_hotbar_mouse_wheel (Hotbar: Invert mouse wheel direction) bool false
|
|||
[*Touchscreen]
|
||||
|
||||
# Enables touchscreen mode, allowing you to play the game with a touchscreen.
|
||||
#
|
||||
# Requires: !android
|
||||
enable_touch (Enable touchscreen) bool true
|
||||
|
||||
# Touchscreen sensitivity multiplier.
|
||||
|
@ -692,6 +694,9 @@ language (Language) enum ,be,bg,ca,cs,da,de,el,en,eo,es,et,eu,fi,fr,gd,gl,hu,i
|
|||
# edge pixels when images are scaled by non-integer sizes.
|
||||
gui_scaling (GUI scaling) float 1.0 0.5 20
|
||||
|
||||
# Enables smooth scrolling.
|
||||
smooth_scrolling (Smooth scrolling) bool true
|
||||
|
||||
# Enables animation of inventory items.
|
||||
inventory_items_animations (Inventory items animations) bool false
|
||||
|
||||
|
@ -823,6 +828,9 @@ server_url (Server URL) string https://minetest.net
|
|||
# Automatically report to the serverlist.
|
||||
server_announce (Announce server) bool false
|
||||
|
||||
# Send names of online players to the serverlist. If disabled only the player count is revealed.
|
||||
server_announce_send_players (Send player names to the server list) bool tru
|
||||
|
||||
# Make local servers visible to local clients.
|
||||
serverlist_lan (Show local servers) bool true
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Minetest Lua Client Modding API Reference 5.9.0
|
||||
Minetest Lua Client Modding API Reference 5.10.0
|
||||
================================================
|
||||
* More information at <http://www.minetest.net/>
|
||||
* Developer Wiki: <http://dev.minetest.net/>
|
||||
|
@ -898,7 +898,7 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or
|
|||
"node1",
|
||||
"node2"
|
||||
},
|
||||
post_effect_color = Color, -- Color overlayed on the screen when the player is in the node
|
||||
post_effect_color = Color, -- Color overlaid on the screen when the player is in the node
|
||||
leveled = number, -- Max level for node
|
||||
sunlight_propogates = bool, -- Whether light passes through the block
|
||||
light_source = number, -- Light emitted by the block
|
||||
|
|
111
doc/lua_api.md
111
doc/lua_api.md
|
@ -1103,7 +1103,6 @@ Table used to specify how a sound is played:
|
|||
-- its end in `-start_time` seconds.
|
||||
-- It is unspecified what happens if `loop` is false and `start_time` is
|
||||
-- smaller than minus the sound's length.
|
||||
|
||||
-- Available since feature `sound_params_start_time`.
|
||||
|
||||
loop = false,
|
||||
|
@ -1117,21 +1116,6 @@ Table used to specify how a sound is played:
|
|||
-- Attach the sound to an object.
|
||||
-- Can't be used together with `pos`.
|
||||
|
||||
-- For backward compatibility, sounds continue playing at the last location
|
||||
-- of the object if an object is removed (for example if an entity dies).
|
||||
-- It is not recommended to rely on this.
|
||||
-- For death sounds, prefer playing a positional sound instead.
|
||||
|
||||
-- If you want to stop a sound when an entity dies or is deactivated,
|
||||
-- store the handle and call `minetest.sound_stop` in `on_die` / `on_deactivate`.
|
||||
|
||||
-- Ephemeral sounds are entirely unaffected by the object being removed
|
||||
-- or leaving the active object range.
|
||||
|
||||
-- Non-ephemeral sounds stop playing on clients if objects leave
|
||||
-- the active object range; they should start playing again if objects
|
||||
--- come back into range (but due to a known bug, they don't yet).
|
||||
|
||||
to_player = name,
|
||||
-- Only play for this player.
|
||||
-- Can't be used together with `exclude_player`.
|
||||
|
@ -1504,7 +1488,7 @@ Look for examples in `games/devtest` or `games/minetest_game`.
|
|||
* For supported model formats see Irrlicht engine documentation.
|
||||
* `plantlike_rooted`
|
||||
* Enables underwater `plantlike` without air bubbles around the nodes.
|
||||
* Consists of a base cube at the co-ordinates of the node plus a
|
||||
* Consists of a base cube at the coordinates of the node plus a
|
||||
`plantlike` extension above
|
||||
* If `paramtype2="leveled", the `plantlike` extension has a height
|
||||
of `param2 / 16` nodes, otherwise it's the height of 1 node
|
||||
|
@ -3078,7 +3062,7 @@ Elements
|
|||
### `textlist[<X>,<Y>;<W>,<H>;<name>;<listelem 1>,<listelem 2>,...,<listelem n>]`
|
||||
|
||||
* Scrollable item list showing arbitrary text elements
|
||||
* `name` fieldname sent to server on doubleclick value is current selected
|
||||
* `name` fieldname sent to server on double-click value is current selected
|
||||
element.
|
||||
* `listelements` can be prepended by #color in hexadecimal format RRGGBB
|
||||
(only).
|
||||
|
@ -3087,7 +3071,7 @@ Elements
|
|||
### `textlist[<X>,<Y>;<W>,<H>;<name>;<listelem 1>,<listelem 2>,...,<listelem n>;<selected idx>;<transparent>]`
|
||||
|
||||
* Scrollable itemlist showing arbitrary text elements
|
||||
* `name` fieldname sent to server on doubleclick value is current selected
|
||||
* `name` fieldname sent to server on double-click value is current selected
|
||||
element.
|
||||
* `listelements` can be prepended by #RRGGBB (only) in hexadecimal format
|
||||
* if you want a listelement to start with "#" write "##"
|
||||
|
@ -3224,7 +3208,7 @@ Elements
|
|||
|
||||
* Show scrollable table using options defined by the previous `tableoptions[]`
|
||||
* Displays cells as defined by the previous `tablecolumns[]`
|
||||
* `name`: fieldname sent to server on row select or doubleclick
|
||||
* `name`: fieldname sent to server on row select or double-click
|
||||
* `cell 1`...`cell n`: cell contents given in row-major order
|
||||
* `selected idx`: index of row to be selected within table (first row = `1`)
|
||||
* See also `minetest.explode_table_event`
|
||||
|
@ -3674,6 +3658,9 @@ Player Inventory lists
|
|||
* `hand`: list containing an override for the empty hand
|
||||
* Is not created automatically, use `InvRef:set_size`
|
||||
* Is only used to enhance the empty hand's tool capabilities
|
||||
|
||||
Custom lists can be added and deleted with `InvRef:set_size(name, size)` like
|
||||
any other inventory.
|
||||
|
||||
ItemStack transaction order
|
||||
---------------------------
|
||||
|
@ -3833,6 +3820,8 @@ vectors are written like this: `(x, y, z)`:
|
|||
`vector.new(v)` does the same as `vector.copy(v)`
|
||||
* `vector.zero()`:
|
||||
* Returns a new vector `(0, 0, 0)`.
|
||||
* `vector.random_direction()`:
|
||||
* Returns a new vector of length 1, pointing into a direction chosen uniformly at random.
|
||||
* `vector.copy(v)`:
|
||||
* Returns a copy of the vector `v`.
|
||||
* `vector.from_string(s[, init])`:
|
||||
|
@ -4036,6 +4025,10 @@ Helper functions
|
|||
the value `val` in the table `list`. Non-numerical indices are ignored.
|
||||
If `val` could not be found, `-1` is returned. `list` must not have
|
||||
negative indices.
|
||||
* `table.keyof(table, val)`: returns the key containing
|
||||
the value `val` in the table `table`. If multiple keys contain `val`,
|
||||
it is unspecified which key will be returned.
|
||||
If `val` could not be found, `nil` is returned.
|
||||
* `table.insert_all(table, other_table)`:
|
||||
* Appends all values in `other_table` to `table` - uses `#table + 1` to
|
||||
find new indices.
|
||||
|
@ -4255,7 +4248,7 @@ Perlin noise
|
|||
============
|
||||
|
||||
Perlin noise creates a continuously-varying value depending on the input values.
|
||||
Usually in Minetest the input values are either 2D or 3D co-ordinates in nodes.
|
||||
Usually in Minetest the input values are either 2D or 3D coordinates in nodes.
|
||||
The result is used during map generation to create the terrain shape, vary heat
|
||||
and humidity to distribute biomes, vary the density of decorations or vary the
|
||||
structure of ores.
|
||||
|
@ -4518,7 +4511,7 @@ computationally expensive than any other ore.
|
|||
Creates a single undulating ore stratum that is continuous across mapchunk
|
||||
borders and horizontally spans the world.
|
||||
|
||||
The 2D perlin noise described by `noise_params` defines the Y co-ordinate of
|
||||
The 2D perlin noise described by `noise_params` defines the Y coordinate of
|
||||
the stratum midpoint. The 2D perlin noise described by `np_stratum_thickness`
|
||||
defines the stratum's vertical thickness (in units of nodes). Due to being
|
||||
continuous across mapchunk borders the stratum's vertical thickness is
|
||||
|
@ -5113,12 +5106,15 @@ Callbacks:
|
|||
to the object (not necessarily an actual rightclick)
|
||||
* `clicker`: an `ObjectRef` (may or may not be a player)
|
||||
* `on_attach_child(self, child)`
|
||||
* `child`: an `ObjectRef` of the child that attaches
|
||||
* Called after another object is attached to this object.
|
||||
* `child`: an `ObjectRef` of the child
|
||||
* `on_detach_child(self, child)`
|
||||
* `child`: an `ObjectRef` of the child that detaches
|
||||
* Called after another object has detached from this object.
|
||||
* `child`: an `ObjectRef` of the child
|
||||
* `on_detach(self, parent)`
|
||||
* `parent`: an `ObjectRef` (can be `nil`) from where it got detached
|
||||
* This happens before the parent object is removed from the world
|
||||
* Called after detaching from another object.
|
||||
* `parent`: an `ObjectRef` from where it got detached
|
||||
* Note: this is also called before removal from the world.
|
||||
* `get_staticdata(self)`
|
||||
* Should return a string that will be passed to `on_activate` when the
|
||||
object is instantiated the next time.
|
||||
|
@ -5451,14 +5447,14 @@ Utilities
|
|||
dynamic_add_media_filepath = true,
|
||||
-- L-system decoration type (5.9.0)
|
||||
lsystem_decoration_type = true,
|
||||
-- Overrideable pointing range using the itemstack meta key `"range"` (5.9.0)
|
||||
-- Overridable pointing range using the itemstack meta key `"range"` (5.9.0)
|
||||
item_meta_range = true,
|
||||
-- Allow passing an optional "actor" ObjectRef to the following functions:
|
||||
-- minetest.place_node, minetest.dig_node, minetest.punch_node (5.9.0)
|
||||
node_interaction_actor = true,
|
||||
-- "new_pos" field in entity moveresult (5.9.0)
|
||||
moveresult_new_pos = true,
|
||||
-- Allow removing definition fields in `minetest.override_item`
|
||||
-- Allow removing definition fields in `minetest.override_item` (5.9.0)
|
||||
override_item_remove_fields = true,
|
||||
}
|
||||
```
|
||||
|
@ -5753,7 +5749,7 @@ Call these functions only at load time!
|
|||
* `minetest.register_on_generated(function(minp, maxp, blockseed))`
|
||||
* Called after generating a piece of world between `minp` and `maxp`.
|
||||
* **Avoid using this** whenever possible. As with other callbacks this blocks
|
||||
the main thread and introduces noticable latency.
|
||||
the main thread and introduces noticeable latency.
|
||||
Consider [Mapgen environment] for an alternative.
|
||||
* `minetest.register_on_newplayer(function(ObjectRef))`
|
||||
* Called when a new player enters the world for the first time
|
||||
|
@ -6417,11 +6413,11 @@ Environment access
|
|||
* spread these updates to neighbors and can cause a cascade
|
||||
of nodes to fall.
|
||||
* `minetest.get_spawn_level(x, z)`
|
||||
* Returns a player spawn y co-ordinate for the provided (x, z)
|
||||
co-ordinates, or `nil` for an unsuitable spawn point.
|
||||
* Returns a player spawn y coordinate for the provided (x, z)
|
||||
coordinates, or `nil` for an unsuitable spawn point.
|
||||
* For most mapgens a 'suitable spawn point' is one with y between
|
||||
`water_level` and `water_level + 16`, and in mgv7 well away from rivers,
|
||||
so `nil` will be returned for many (x, z) co-ordinates.
|
||||
so `nil` will be returned for many (x, z) coordinates.
|
||||
* The spawn level returned is for a player spawn in unmodified terrain.
|
||||
* The spawn level is intentionally above terrain level to cope with
|
||||
full-node biome 'dust' nodes.
|
||||
|
@ -6731,7 +6727,7 @@ This allows you easy interoperability for delegating work to jobs.
|
|||
* Register a path to a Lua file to be imported when an async environment
|
||||
is initialized. You can use this to preload code which you can then call
|
||||
later using `minetest.handle_async()`.
|
||||
* `minetest.register_async_metatable(name, mt)`:
|
||||
* `minetest.register_portable_metatable(name, mt)`:
|
||||
* Register a metatable that should be preserved when data is transferred
|
||||
between the main thread and the async environment.
|
||||
* `name` is a string that identifies the metatable. It is recommended to
|
||||
|
@ -6771,7 +6767,7 @@ Functions:
|
|||
|
||||
* Standalone helpers such as logging, filesystem, encoding,
|
||||
hashing or compression APIs
|
||||
* `minetest.register_async_metatable` (see above)
|
||||
* `minetest.register_portable_metatable` (see above)
|
||||
|
||||
Variables:
|
||||
|
||||
|
@ -6901,7 +6897,7 @@ Server
|
|||
all players (optional)
|
||||
* `ephemeral`: boolean that marks the media as ephemeral,
|
||||
it will not be cached on the client (optional, default false)
|
||||
* Exactly one of the paramters marked [*] must be specified.
|
||||
* Exactly one of the parameters marked [*] must be specified.
|
||||
* `callback`: function with arguments `name`, which is a player name
|
||||
* Pushes the specified media file to client(s). (details below)
|
||||
The file must be a supported image, sound or model format.
|
||||
|
@ -7101,6 +7097,8 @@ Misc.
|
|||
* `minetest.is_player(obj)`: boolean, whether `obj` is a player
|
||||
* `minetest.player_exists(name)`: boolean, whether player exists
|
||||
(regardless of online status)
|
||||
* `minetest.is_valid_player_name(name)`: boolean, whether the given name
|
||||
could be used as a player name (regardless of whether said player exists).
|
||||
* `minetest.hud_replace_builtin(name, hud_definition)`
|
||||
* Replaces definition of a builtin hud element
|
||||
* `name`: `"breath"`, `"health"` or `"minimap"`
|
||||
|
@ -7509,6 +7507,8 @@ An `InvRef` is a reference to an inventory.
|
|||
* `is_empty(listname)`: return `true` if list is empty
|
||||
* `get_size(listname)`: get size of a list
|
||||
* `set_size(listname, size)`: set size of a list
|
||||
* If `listname` is not known, a new list will be created
|
||||
* Setting `size` to 0 deletes a list
|
||||
* returns `false` on error (e.g. invalid `listname` or `size`)
|
||||
* `get_width(listname)`: get width of a list
|
||||
* `set_width(listname, width)`: set width of list; currently used for crafting
|
||||
|
@ -7732,7 +7732,7 @@ metadata_table = {
|
|||
-- metadata fields (key/value store)
|
||||
fields = {
|
||||
infotext = "Container",
|
||||
anoter_key = "Another Value",
|
||||
another_key = "Another Value",
|
||||
},
|
||||
|
||||
-- inventory data (for nodes)
|
||||
|
@ -7988,6 +7988,29 @@ child will follow movement and rotation of that bone.
|
|||
* `get_bone_overrides()`: returns all bone overrides as table `{[bonename] = override, ...}`
|
||||
* `set_properties(object property table)`
|
||||
* `get_properties()`: returns a table of all object properties
|
||||
* `set_observers(observers)`: sets observers (players this object is sent to)
|
||||
* If `observers` is `nil`, the object's observers are "unmanaged":
|
||||
The object is sent to all players as governed by server settings. This is the default.
|
||||
* `observers` is a "set" of player names: `{name1 = true, name2 = true, ...}`
|
||||
* A set is a table where the keys are the elements of the set
|
||||
(in this case, *valid* player names) and the values are all `true`.
|
||||
* Attachments: The *effective observers* of an object are made up of
|
||||
all players who can observe the object *and* are also effective observers
|
||||
of its parent object (if there is one).
|
||||
* Players are automatically added to their own observer sets.
|
||||
Players **must** effectively observe themselves.
|
||||
* Object activation and deactivation are unaffected by observability.
|
||||
* Attached sounds do not work correctly and thus should not be used
|
||||
on objects with managed observers yet.
|
||||
* `get_observers()`:
|
||||
* throws an error if the object is invalid
|
||||
* returns `nil` if the observers are unmanaged
|
||||
* returns a table with all observer names as keys and `true` values (a "set") otherwise
|
||||
* `get_effective_observers()`:
|
||||
* Like `get_observers()`, but returns the "effective" observers, taking into account attachments
|
||||
* Time complexity: O(nm)
|
||||
* n: number of observers of the involved entities
|
||||
* m: number of ancestors along the attachment chain
|
||||
* `is_player()`: returns true for players, false otherwise
|
||||
* `get_nametag_attributes()`
|
||||
* returns a table with the attributes of the nametag of an object
|
||||
|
@ -8032,7 +8055,7 @@ child will follow movement and rotation of that bone.
|
|||
* `rot` is a vector (radians). X is pitch (elevation), Y is yaw (heading)
|
||||
and Z is roll (bank).
|
||||
* Does not reset rotation incurred through `automatic_rotate`.
|
||||
Remove & readd your objects to force a certain rotation.
|
||||
Remove & re-add your objects to force a certain rotation.
|
||||
* `get_rotation()`: returns the rotation, a vector (radians)
|
||||
* `set_yaw(yaw)`: sets the yaw in radians (heading).
|
||||
* `get_yaw()`: returns number in radians
|
||||
|
@ -8233,7 +8256,9 @@ child will follow movement and rotation of that bone.
|
|||
* See `hud_set_flags` for a list of flags that can be toggled.
|
||||
* `hud_set_hotbar_itemcount(count)`: sets number of items in builtin hotbar
|
||||
* `count`: number of items, must be between `1` and `32`
|
||||
* If `count` exceeds the `"main"` list size, the list size will be used instead.
|
||||
* `hud_get_hotbar_itemcount()`: returns number of visible items
|
||||
* This value is also clamped by the `"main"` list size.
|
||||
* `hud_set_hotbar_image(texturename)`
|
||||
* sets background image for hotbar
|
||||
* `hud_get_hotbar_image()`: returns texturename
|
||||
|
@ -8412,7 +8437,8 @@ child will follow movement and rotation of that bone.
|
|||
ColorSpec (alpha ignored, default `#000000`)
|
||||
* `height`: cloud height, i.e. y of cloud base (default per conf,
|
||||
usually `120`)
|
||||
* `thickness`: cloud thickness in nodes (default `16`)
|
||||
* `thickness`: cloud thickness in nodes (default `16`).
|
||||
if set to zero the clouds are rendered flat.
|
||||
* `speed`: 2D cloud speed + direction in nodes per second
|
||||
(default `{x=0, z=-2}`).
|
||||
* `get_clouds()`: returns a table with the current cloud parameters as in
|
||||
|
@ -8914,7 +8940,10 @@ Player properties need to be saved manually.
|
|||
Entity definition
|
||||
-----------------
|
||||
|
||||
Used by `minetest.register_entity`.
|
||||
Used by `minetest.register_entity`.
|
||||
The entity definition table becomes a metatable of a newly created per-entity
|
||||
luaentity table, meaning its fields (e.g. `initial_properties`) will be shared
|
||||
between all instances of an entity.
|
||||
|
||||
```lua
|
||||
{
|
||||
|
@ -8971,7 +9000,7 @@ Used by `minetest.register_abm`.
|
|||
-- Operation interval in seconds
|
||||
|
||||
chance = 50,
|
||||
-- Chance of triggering `action` per-node per-interval is 1.0 / chance
|
||||
-- Probability of triggering `action` per-node per-interval is 1.0 / chance (integers only)
|
||||
|
||||
min_y = -32768,
|
||||
max_y = 32767,
|
||||
|
@ -10361,7 +10390,7 @@ See [Decoration types]. Used by `minetest.register_decoration`.
|
|||
y_min = -31000,
|
||||
y_max = 31000,
|
||||
-- Lower and upper limits for decoration (inclusive).
|
||||
-- These parameters refer to the Y co-ordinate of the 'place_on' node.
|
||||
-- These parameters refer to the Y coordinate of the 'place_on' node.
|
||||
|
||||
spawn_by = "default:water",
|
||||
-- Node (or list of nodes) that the decoration only spawns next to.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Minetest Lua Mainmenu API Reference 5.9.0
|
||||
Minetest Lua Mainmenu API Reference 5.10.0
|
||||
=========================================
|
||||
|
||||
Introduction
|
||||
|
|
|
@ -151,8 +151,7 @@ are placeholders intended to be overwritten by the game.
|
|||
* `rangeview_btn.png`
|
||||
|
||||
* `debug_btn.png`
|
||||
* `gear_icon.png`
|
||||
* `rare_controls.png`
|
||||
* `overflow_btn.png`
|
||||
* `exit_btn.png`
|
||||
|
||||
Texture Overrides
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
dofile(minetest.get_modpath("testentities").."/visuals.lua")
|
||||
dofile(minetest.get_modpath("testentities").."/observers.lua")
|
||||
dofile(minetest.get_modpath("testentities").."/selectionbox.lua")
|
||||
dofile(minetest.get_modpath("testentities").."/armor.lua")
|
||||
dofile(minetest.get_modpath("testentities").."/pointable.lua")
|
||||
|
|
7
games/devtest/mods/testentities/models/LICENSE.txt
Normal file
7
games/devtest/mods/testentities/models/LICENSE.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
Original model by MirceaKitsune (CC BY-SA 3.0).
|
||||
Various alterations and fixes by kilbith, sofar, xunto, Rogier-5, TeTpaAka, Desour,
|
||||
stujones11, An0n3m0us (CC BY-SA 3.0):
|
||||
testentities_sam.b3d
|
||||
|
||||
Jordach (CC BY-SA 3.0):
|
||||
testentities_sam.png
|
BIN
games/devtest/mods/testentities/models/testentities_sam.b3d
Normal file
BIN
games/devtest/mods/testentities/models/testentities_sam.b3d
Normal file
Binary file not shown.
BIN
games/devtest/mods/testentities/models/testentities_sam.png
Normal file
BIN
games/devtest/mods/testentities/models/testentities_sam.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
37
games/devtest/mods/testentities/observers.lua
Normal file
37
games/devtest/mods/testentities/observers.lua
Normal file
|
@ -0,0 +1,37 @@
|
|||
local function player_names_excluding(exclude_player_name)
|
||||
local player_names = {}
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
player_names[player:get_player_name()] = true
|
||||
end
|
||||
player_names[exclude_player_name] = nil
|
||||
return player_names
|
||||
end
|
||||
|
||||
minetest.register_entity("testentities:observable", {
|
||||
initial_properties = {
|
||||
visual = "sprite",
|
||||
textures = { "testentities_sprite.png" },
|
||||
static_save = false,
|
||||
infotext = "Punch to set observers to anyone but you"
|
||||
},
|
||||
on_activate = function(self)
|
||||
self.object:set_armor_groups({punch_operable = 1})
|
||||
assert(self.object:get_observers() == nil)
|
||||
-- Using a value of `false` in the table should error.
|
||||
assert(not pcall(self.object, self.object.set_observers, self.object, {test = false}))
|
||||
end,
|
||||
on_punch = function(self, puncher)
|
||||
local puncher_name = puncher:get_player_name()
|
||||
local observers = player_names_excluding(puncher_name)
|
||||
self.object:set_observers(observers)
|
||||
local got_observers = self.object:get_observers()
|
||||
for name in pairs(observers) do
|
||||
assert(got_observers[name])
|
||||
end
|
||||
for name in pairs(got_observers) do
|
||||
assert(observers[name])
|
||||
end
|
||||
self.object:set_properties({infotext = "Excluding " .. puncher_name})
|
||||
return true
|
||||
end
|
||||
})
|
|
@ -66,6 +66,19 @@ minetest.register_entity("testentities:mesh_unshaded", {
|
|||
},
|
||||
})
|
||||
|
||||
minetest.register_entity("testentities:sam", {
|
||||
initial_properties = {
|
||||
visual = "mesh",
|
||||
mesh = "testentities_sam.b3d",
|
||||
textures = {
|
||||
"testentities_sam.png"
|
||||
},
|
||||
},
|
||||
on_activate = function(self)
|
||||
self.object:set_animation({x = 0, y = 219}, 30, 0, true)
|
||||
end,
|
||||
})
|
||||
|
||||
-- Advanced visual tests
|
||||
|
||||
-- An entity for testing animated and yaw-modulated sprites
|
||||
|
|
|
@ -89,10 +89,12 @@ for a=1,#alphas do
|
|||
end
|
||||
|
||||
minetest.register_node("testnodes:alpha_compositing", {
|
||||
description = S("Alpha Compositing Test Node") .. "\n" ..
|
||||
description = S("Texture Overlay Test Node") .. "\n" ..
|
||||
S("A regular grid should be visible where each cell contains two " ..
|
||||
"texels with the same colour.") .. "\n" ..
|
||||
S("Alpha compositing is gamma-incorrect for backwards compatibility."),
|
||||
"texels with the same color.") .. "\n" ..
|
||||
S("Texture overlay is gamma-incorrect, " ..
|
||||
"and in general it does not do alpha compositing, " ..
|
||||
"both for backwards compatibility."),
|
||||
drawtype = "glasslike",
|
||||
paramtype = "light",
|
||||
tiles = {"testnodes_alpha_compositing_bottom.png^" ..
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 265 B |
|
@ -167,18 +167,18 @@ local function test_userdata_passing2(cb, _, pos)
|
|||
end
|
||||
unittests.register("test_userdata_passing2", test_userdata_passing2, {map=true, async=true})
|
||||
|
||||
local function test_async_metatable_override()
|
||||
assert(pcall(core.register_async_metatable, "__builtin:vector", vector.metatable),
|
||||
local function test_portable_metatable_override()
|
||||
assert(pcall(core.register_portable_metatable, "__builtin:vector", vector.metatable),
|
||||
"Metatable name aliasing throws an error when it should be allowed")
|
||||
|
||||
assert(not pcall(core.register_async_metatable, "__builtin:vector", {}),
|
||||
assert(not pcall(core.register_portable_metatable, "__builtin:vector", {}),
|
||||
"Illegal metatable overriding allowed")
|
||||
end
|
||||
unittests.register("test_async_metatable_override", test_async_metatable_override)
|
||||
unittests.register("test_portable_metatable_override", test_portable_metatable_override)
|
||||
|
||||
local function test_async_metatable_registration(cb)
|
||||
local function test_portable_metatable_registration(cb)
|
||||
local custom_metatable = {}
|
||||
core.register_async_metatable("unittests:custom_metatable", custom_metatable)
|
||||
core.register_portable_metatable("unittests:custom_metatable", custom_metatable)
|
||||
|
||||
core.handle_async(function(x)
|
||||
-- unittests.custom_metatable is registered in inside_async_env.lua
|
||||
|
@ -193,7 +193,7 @@ local function test_async_metatable_registration(cb)
|
|||
cb()
|
||||
end, setmetatable({}, custom_metatable))
|
||||
end
|
||||
unittests.register("test_async_metatable_registration", test_async_metatable_registration, {async=true})
|
||||
unittests.register("test_portable_metatable_registration", test_portable_metatable_registration, {async=true})
|
||||
|
||||
local function test_vector_preserve(cb)
|
||||
local vec = vector.new(1, 2, 3)
|
||||
|
|
|
@ -40,12 +40,36 @@ core.register_entity("unittests:callbacks", {
|
|||
end,
|
||||
on_attach_child = function(self, child)
|
||||
insert_log("on_attach_child(%s)", objref_str(self, child))
|
||||
assert(child:get_attach() == self.object)
|
||||
local ok = false
|
||||
for _, obj in ipairs(self.object:get_children()) do
|
||||
if obj == child then
|
||||
ok = true
|
||||
end
|
||||
end
|
||||
assert(ok, "Child not found in get_children")
|
||||
end,
|
||||
on_detach_child = function(self, child)
|
||||
insert_log("on_detach_child(%s)", objref_str(self, child))
|
||||
assert(child:get_attach() == nil)
|
||||
local ok = true
|
||||
for _, obj in ipairs(self.object:get_children()) do
|
||||
if obj == child then
|
||||
ok = false
|
||||
end
|
||||
end
|
||||
assert(ok, "Former child found in get_children")
|
||||
end,
|
||||
on_detach = function(self, parent)
|
||||
insert_log("on_detach(%s)", objref_str(self, parent))
|
||||
assert(self.object:get_attach() == nil)
|
||||
local ok = true
|
||||
for _, obj in ipairs(parent:get_children()) do
|
||||
if obj == self.object then
|
||||
ok = false
|
||||
end
|
||||
end
|
||||
assert(ok, "Former child found in get_children")
|
||||
end,
|
||||
get_staticdata = function(self)
|
||||
assert(false)
|
||||
|
@ -118,19 +142,25 @@ local function test_entity_attach(player, pos)
|
|||
-- attach player to entity
|
||||
player:set_attach(obj)
|
||||
check_log({"on_attach_child(player)"})
|
||||
assert(player:get_attach() == obj)
|
||||
player:set_detach()
|
||||
check_log({"on_detach_child(player)"})
|
||||
assert(player:get_attach() == nil)
|
||||
|
||||
-- attach entity to player
|
||||
obj:set_attach(player)
|
||||
check_log({})
|
||||
assert(obj:get_attach() == player)
|
||||
obj:set_detach()
|
||||
check_log({"on_detach(player)"})
|
||||
assert(obj:get_attach() == nil)
|
||||
|
||||
obj:remove()
|
||||
end
|
||||
unittests.register("test_entity_attach", test_entity_attach, {player=true, map=true})
|
||||
|
||||
---------
|
||||
|
||||
core.register_entity("unittests:dummy", {
|
||||
initial_properties = {
|
||||
hp_max = 1,
|
||||
|
|
|
@ -3,7 +3,7 @@ unittests = {}
|
|||
core.log("info", "Hello World")
|
||||
|
||||
unittests.custom_metatable = {}
|
||||
core.register_async_metatable("unittests:custom_metatable", unittests.custom_metatable)
|
||||
core.register_portable_metatable("unittests:custom_metatable", unittests.custom_metatable)
|
||||
|
||||
local function do_tests()
|
||||
assert(core == minetest)
|
||||
|
|
|
@ -84,3 +84,25 @@ local function run_player_add_pos_tests(player)
|
|||
end
|
||||
unittests.register("test_player_add_pos", run_player_add_pos_tests, {player=true})
|
||||
|
||||
--
|
||||
-- Hotbar selection clamp
|
||||
--
|
||||
local function run_player_hotbar_clamp_tests(player)
|
||||
local inv = player:get_inventory()
|
||||
local old_inv_size = inv:get_size("main")
|
||||
local old_inv_list = inv:get_list("main") -- Avoid accidentally removing item
|
||||
local old_bar_size = player:hud_get_hotbar_itemcount()
|
||||
|
||||
inv:set_size("main", 5)
|
||||
|
||||
player:hud_set_hotbar_itemcount(2)
|
||||
assert(player:hud_get_hotbar_itemcount() == 2)
|
||||
|
||||
player:hud_set_hotbar_itemcount(6)
|
||||
assert(player:hud_get_hotbar_itemcount() == 5)
|
||||
|
||||
inv:set_size("main", old_inv_size)
|
||||
inv:set_list("main", old_inv_list)
|
||||
player:hud_set_hotbar_itemcount(old_bar_size)
|
||||
end
|
||||
unittests.register("test_player_hotbar_clamp", run_player_hotbar_clamp_tests, {player=true})
|
||||
|
|
|
@ -45,9 +45,12 @@
|
|||
#include <X11/Xcursor/Xcursor.h>
|
||||
#endif
|
||||
|
||||
#if defined(_IRR_COMPILE_WITH_X11_) || defined(_IRR_COMPILE_WITH_JOYSTICK_EVENTS_)
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#if defined _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <sys/joystick.h>
|
||||
|
|
|
@ -343,6 +343,12 @@ CIrrDeviceSDL::CIrrDeviceSDL(const SIrrlichtCreationParameters ¶m) :
|
|||
SDL_SetHint(SDL_HINT_APP_NAME, "Minetest");
|
||||
#endif
|
||||
|
||||
// Set IME hints
|
||||
SDL_SetHint(SDL_HINT_IME_INTERNAL_EDITING, "1");
|
||||
#if defined(SDL_HINT_IME_SHOW_UI)
|
||||
SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
|
||||
#endif
|
||||
|
||||
u32 flags = SDL_INIT_TIMER | SDL_INIT_EVENTS;
|
||||
if (CreationParams.DriverType != video::EDT_NULL)
|
||||
flags |= SDL_INIT_VIDEO;
|
||||
|
|
|
@ -3018,7 +3018,7 @@ IImage *COpenGLDriver::createScreenShot(video::ECOLOR_FORMAT format, video::E_RE
|
|||
if (newImage)
|
||||
pixels = static_cast<u8 *>(newImage->getData());
|
||||
if (pixels) {
|
||||
glReadBuffer(GL_FRONT);
|
||||
glReadBuffer(Params.Doublebuffer ? GL_BACK : GL_FRONT);
|
||||
glReadPixels(0, 0, ScreenSize.Width, ScreenSize.Height, fmt, type, pixels);
|
||||
testGLError(__LINE__);
|
||||
glReadBuffer(GL_BACK);
|
||||
|
|
|
@ -107,6 +107,7 @@ static const VertexType &getVertexTypeDescription(E_VERTEX_TYPE type)
|
|||
return vtTangents;
|
||||
default:
|
||||
assert(false);
|
||||
CODE_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
16
irr/src/os.h
16
irr/src/os.h
|
@ -10,6 +10,22 @@
|
|||
#include "ILogger.h"
|
||||
#include "ITimer.h"
|
||||
|
||||
// CODE_UNREACHABLE(): Invokes undefined behavior for unreachable code optimization
|
||||
#if defined(__cpp_lib_unreachable)
|
||||
#include <utility>
|
||||
#define CODE_UNREACHABLE() std::unreachable()
|
||||
#elif defined(__has_builtin)
|
||||
#if __has_builtin(__builtin_unreachable)
|
||||
#define CODE_UNREACHABLE() __builtin_unreachable()
|
||||
#endif
|
||||
#elif defined(_MSC_VER)
|
||||
#define CODE_UNREACHABLE() __assume(false)
|
||||
#endif
|
||||
|
||||
#ifndef CODE_UNREACHABLE
|
||||
#define CODE_UNREACHABLE() (void)0
|
||||
#endif
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@
|
|||
# type: bool
|
||||
# virtual_joystick_triggers_aux1 = false
|
||||
|
||||
# The gesture for for punching players/entities.
|
||||
# The gesture for punching players/entities.
|
||||
# This can be overridden by games and mods.
|
||||
#
|
||||
# * short_tap
|
||||
|
@ -707,6 +707,11 @@
|
|||
# type: string
|
||||
# contentdb_url = https://content.minetest.net
|
||||
|
||||
# If enabled and you have ContentDB packages installed, Minetest may contact ContentDB to
|
||||
# check for package updates when opening the mainmenu.
|
||||
# type: bool
|
||||
# contentdb_enable_updates_indicator = true
|
||||
|
||||
# Comma-separated list of flags to hide in the content repository.
|
||||
# "nonfree" can be used to hide packages which do not qualify as 'free software',
|
||||
# as defined by the Free Software Foundation.
|
||||
|
@ -740,7 +745,7 @@
|
|||
# type: bool
|
||||
# enable_split_login_register = true
|
||||
|
||||
# URL to JSON file which provides information about the newest Minetest release
|
||||
# URL to JSON file which provides information about the newest Minetest release.
|
||||
# If this is empty the engine will never check for updates.
|
||||
# type: string
|
||||
# update_information_url = https://www.minetest.net/release_info.json
|
||||
|
|
|
@ -149,6 +149,6 @@
|
|||
<update_contact>celeron55@gmail.com</update_contact>
|
||||
|
||||
<releases>
|
||||
<release date="2023-12-04" version="5.8.0"/>
|
||||
<release date="2024-08-11" version="5.9.0"/>
|
||||
</releases>
|
||||
</component>
|
||||
|
|
|
@ -3,16 +3,16 @@ msgstr ""
|
|||
"Project-Id-Version: Czech (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2023-06-19 10:48+0000\n"
|
||||
"Last-Translator: Robinson <simekm@yahoo.com>\n"
|
||||
"PO-Revision-Date: 2024-08-02 22:09+0000\n"
|
||||
"Last-Translator: Honzapkcz <honzapkc@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/minetest/minetest/"
|
||||
"cs/>\n"
|
||||
"Language: cs\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.18.1\n"
|
||||
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -187,7 +187,7 @@ msgstr "Stahuji..."
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "Chyba získávání závislostí balíčku"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -230,7 +230,7 @@ msgstr "Balíčky textur"
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "The package $1 was not found."
|
||||
msgstr ""
|
||||
msgstr "Balíček $1 nebyl nalezen."
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua
|
||||
msgid "Uninstall"
|
||||
|
@ -250,7 +250,7 @@ msgstr "Zobrazit více informací v prohlížeči"
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "You need to install a game before you can install a mod"
|
||||
msgstr ""
|
||||
msgstr "Musíš nainstalovat hru před tím než budeš moct instalovat mod"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
msgid "$1 and $2 dependencies will be installed."
|
||||
|
@ -465,7 +465,7 @@ msgstr "Dekorace"
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Desert temples"
|
||||
msgstr ""
|
||||
msgstr "Pouštní chrámy"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Development Test is meant for developers."
|
||||
|
@ -476,6 +476,8 @@ msgid ""
|
|||
"Different dungeon variant generated in desert biomes (only if dungeons "
|
||||
"enabled)"
|
||||
msgstr ""
|
||||
"Různé varianty žalářů generované v pouštních biomech (pouze když jsou žaláře "
|
||||
"povoleny)"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
|
@ -671,7 +673,7 @@ msgstr "Registrovat"
|
|||
|
||||
#: builtin/mainmenu/dlg_reinstall_mtg.lua
|
||||
msgid "Dismiss"
|
||||
msgstr ""
|
||||
msgstr "Odmítnout"
|
||||
|
||||
#: builtin/mainmenu/dlg_reinstall_mtg.lua
|
||||
msgid ""
|
||||
|
@ -679,16 +681,20 @@ msgid ""
|
|||
"\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default "
|
||||
"game."
|
||||
msgstr ""
|
||||
"Po dlouhou dobu, Minetest engine byl dodáván s výchozí hrou „Minetest hra“. "
|
||||
"Od verze 5.8.0 už Minetest s touto hrou dodáván není."
|
||||
|
||||
#: builtin/mainmenu/dlg_reinstall_mtg.lua
|
||||
msgid ""
|
||||
"If you want to continue playing in your Minetest Game worlds, you need to "
|
||||
"reinstall Minetest Game."
|
||||
msgstr ""
|
||||
"Pokud chceš pokračovat v hraní tvých světů Menetest Hry, tak si ji musíš "
|
||||
"přeinstalovat."
|
||||
|
||||
#: builtin/mainmenu/dlg_reinstall_mtg.lua
|
||||
msgid "Minetest Game is no longer installed by default"
|
||||
msgstr ""
|
||||
msgstr "Minetest Hra už není instalována jako výchozí"
|
||||
|
||||
#: builtin/mainmenu/dlg_reinstall_mtg.lua
|
||||
#, fuzzy
|
||||
|
@ -841,11 +847,11 @@ msgstr "vyhlazení"
|
|||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
msgid "(Use system language)"
|
||||
msgstr ""
|
||||
msgstr "(Použít jazyk systému)"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
msgid "Accessibility"
|
||||
msgstr ""
|
||||
msgstr "Přístupnost"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
msgid "Back"
|
||||
|
@ -881,7 +887,7 @@ msgstr "Obnovit výchozí"
|
|||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
msgid "Reset setting to default ($1)"
|
||||
msgstr ""
|
||||
msgstr "Vrátit nastavení do původního stavu ($1)"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua
|
||||
msgid "Search"
|
||||
|
@ -889,7 +895,7 @@ msgstr "Vyhledat"
|
|||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
msgid "Show advanced settings"
|
||||
msgstr ""
|
||||
msgstr "Zobrazit pokročilé nastavení"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
msgid "Show technical names"
|
||||
|
@ -909,11 +915,11 @@ msgstr "Obsah: mody"
|
|||
|
||||
#: builtin/mainmenu/settings/shadows_component.lua
|
||||
msgid "(The game will need to enable shadows as well)"
|
||||
msgstr ""
|
||||
msgstr "(Hra bude muset také povolit stíny)"
|
||||
|
||||
#: builtin/mainmenu/settings/shadows_component.lua
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
msgstr "Vlastní"
|
||||
|
||||
#: builtin/mainmenu/settings/shadows_component.lua
|
||||
msgid "Disabled"
|
||||
|
@ -966,7 +972,7 @@ msgstr "Hlavní členové týmu"
|
|||
|
||||
#: builtin/mainmenu/tab_about.lua
|
||||
msgid "Irrlicht device:"
|
||||
msgstr ""
|
||||
msgstr "Irrlicht zařízení:"
|
||||
|
||||
#: builtin/mainmenu/tab_about.lua
|
||||
msgid "Open User Data Directory"
|
||||
|
@ -1073,7 +1079,7 @@ msgstr "Instalovat hry z ContentDB"
|
|||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "Minetest doesn't come with a game by default."
|
||||
msgstr ""
|
||||
msgstr "Minetest není dodáván s výchozí hrou."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid ""
|
||||
|
@ -1115,7 +1121,7 @@ msgstr "Spuštění hry"
|
|||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr ""
|
||||
msgstr "Musíš si nainstalovat hru před tím než si můžeš vytvořit svět."
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1675,7 +1681,7 @@ msgstr "Vymazat"
|
|||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Down Arrow"
|
||||
msgstr ""
|
||||
msgstr "Šipka Dolů"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "End"
|
||||
|
@ -1911,7 +1917,7 @@ msgstr "Tabulátor"
|
|||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Up Arrow"
|
||||
msgstr ""
|
||||
msgstr "Šipka Nahoru"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 1"
|
||||
|
@ -1951,7 +1957,7 @@ msgstr "Nepodařilo se otevřít webovou stránku"
|
|||
|
||||
#: src/client/shader.cpp
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "Shadery jsou povoleny ale GLSL není podporovaný driverem."
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2147,11 +2153,11 @@ msgstr "stiskni klávesu"
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "Otevřít"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "Otevřít odkaz?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
|
@ -2279,7 +2285,7 @@ msgstr "2D šum, který umisťuje říční koryta a kanály."
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "3D"
|
||||
msgstr ""
|
||||
msgstr "3D"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "3D clouds"
|
||||
|
@ -2445,7 +2451,7 @@ msgstr "Pokročilé"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Allows liquids to be translucent."
|
||||
msgstr ""
|
||||
msgstr "Povolí průhledné kapaliny."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2866,6 +2872,9 @@ msgid ""
|
|||
"Comma-separated list of AL and ALC extensions that should not be used.\n"
|
||||
"Useful for testing. See al_extensions.[h,cpp] for details."
|
||||
msgstr ""
|
||||
"Čárkou oddělený seznam všech AL a ALC rozšíření které by něměly být použity."
|
||||
"\n"
|
||||
"Užitečné pro testování. Podívejte se do al_extensions.[h,cpp] pro detaily."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
|
|
@ -3,8 +3,8 @@ msgstr ""
|
|||
"Project-Id-Version: German (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2024-02-21 17:02+0000\n"
|
||||
"Last-Translator: sfan5 <sfan5@live.de>\n"
|
||||
"PO-Revision-Date: 2024-07-12 14:09+0000\n"
|
||||
"Last-Translator: Wuzzy <Wuzzy@disroot.org>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/minetest/minetest/"
|
||||
"de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -12,7 +12,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -71,9 +71,8 @@ msgid "Command not available: "
|
|||
msgstr "Befehl nicht verfügbar: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr "Hilfe für Befehle erhalten"
|
||||
msgstr "Hilfe für Befehle erhalten (-t: Ausgabe im Chat)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
|
@ -83,9 +82,8 @@ msgstr ""
|
|||
"all“ benutzen, um alles aufzulisten."
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[all | <Befehl>]"
|
||||
msgstr "[all | <Befehl>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -148,13 +146,12 @@ msgid "Failed to download $1"
|
|||
msgstr "Fehler beim Download von $1"
|
||||
|
||||
#: builtin/mainmenu/content/contentdb.lua
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Failed to extract \"$1\" (insufficient disk space, unsupported file type or "
|
||||
"broken archive)"
|
||||
msgstr ""
|
||||
"Fehler beim Extrahieren von „$1“ (nicht unterstützter Dateityp oder kaputtes "
|
||||
"Archiv)"
|
||||
"Fehler beim Extrahieren von „$1“ (unzureichender Speicherplatz, nicht "
|
||||
"unterstützter Dateityp oder kaputtes Archiv)"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid ""
|
||||
|
@ -187,7 +184,7 @@ msgstr "Herunterladen …"
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "Fehler beim Holen der Abhängigkeiten für Paket"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -467,7 +464,7 @@ msgstr "Dekorationen"
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Desert temples"
|
||||
msgstr ""
|
||||
msgstr "Wüstentempel"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Development Test is meant for developers."
|
||||
|
@ -478,6 +475,8 @@ msgid ""
|
|||
"Different dungeon variant generated in desert biomes (only if dungeons "
|
||||
"enabled)"
|
||||
msgstr ""
|
||||
"Andere Verliesvariante, die in Wüstenbiomen generiert wird (nur, wenn "
|
||||
"Verliese aktiviert sind)"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
|
@ -1075,15 +1074,16 @@ msgid "Install games from ContentDB"
|
|||
msgstr "Spiele aus ContentDB installieren"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "Minetest doesn't come with a game by default."
|
||||
msgstr "Minetest Game ist nicht länger standardmäßig installiert"
|
||||
msgstr "Minetest wird standardmäßig nicht mehr mit einem Spiel ausgeliefert."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid ""
|
||||
"Minetest is a game-creation platform that allows you to play many different "
|
||||
"games."
|
||||
msgstr ""
|
||||
"Minetest ist eine Spielerschaffungsplattform, welche es Ihnen ermöglicht, "
|
||||
"viele verschiedene Spiele zu spielen."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "New"
|
||||
|
@ -1118,10 +1118,9 @@ msgid "Start Game"
|
|||
msgstr "Spiel starten"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr ""
|
||||
"Sie müssen ein Spiel installieren, bevor Sie eine Mod installieren können"
|
||||
"Sie müssen ein Spiel installieren, bevor Sie eine Welt erstellen können."
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1336,7 +1335,6 @@ msgid "Continue"
|
|||
msgstr "Weiter"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Controls:\n"
|
||||
"No menu open:\n"
|
||||
|
@ -1354,8 +1352,8 @@ msgstr ""
|
|||
"Steuerung:\n"
|
||||
"Kein Menü sichtbar:\n"
|
||||
"- Finger wischen: Umsehen\n"
|
||||
"- Antippen: Platzieren/benutzen\n"
|
||||
"- Langes antippen: Graben/schlagen/benutzen\n"
|
||||
"- Antippen: Platzieren/schlagen/benutzen (Standard)\n"
|
||||
"- Langes antippen: Graben/benutzen (Standard)\n"
|
||||
"Menü/Inventar offen:\n"
|
||||
"- Doppelt antippen (außerhalb):\n"
|
||||
" --> schließen\n"
|
||||
|
@ -1435,9 +1433,8 @@ msgid "Fog enabled"
|
|||
msgstr "Nebel aktiviert"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Fog enabled by game or mod"
|
||||
msgstr "Zoom ist momentan von Spiel oder Mod deaktiviert"
|
||||
msgstr "Nebel von Spiel oder Mod aktiviert"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Game info:"
|
||||
|
@ -1940,13 +1937,13 @@ msgid "Minimap in texture mode"
|
|||
msgstr "Übersichtskarte im Texturmodus"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Failed to compile the \"%s\" shader."
|
||||
msgstr "Fehler beim Öffnen der Webseite"
|
||||
msgstr "Fehler beim Kompilieren des „%s“-Shaders."
|
||||
|
||||
#: src/client/shader.cpp
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "Shader sind aktiviert, aber GLSL wird vom Treiber nicht unterstützt."
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2143,16 +2140,15 @@ msgstr "Taste drücken"
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "Öffnen"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "URL öffnen?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
msgid "Unable to open URL"
|
||||
msgstr "Fehler beim Öffnen der Webseite"
|
||||
msgstr "URL konnte nicht geöffnet werden"
|
||||
|
||||
#: src/gui/guiPasswordChange.cpp
|
||||
msgid "Change"
|
||||
|
@ -2458,7 +2454,7 @@ msgstr "Erweitert"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Allows liquids to be translucent."
|
||||
msgstr ""
|
||||
msgstr "Erlaubt Flüssigkeiten, transluzent zu sein."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2530,6 +2526,14 @@ msgid ""
|
|||
"With OpenGL ES, dithering only works if the shader supports high\n"
|
||||
"floating-point precision and it may have a higher performance impact."
|
||||
msgstr ""
|
||||
"Dithering anwenden, um Artefakte beim Color-Banding zu reduzieren.\n"
|
||||
"Dithering erhöht die Größe der verlustfrei komprimierten Bildschirmfotos\n"
|
||||
"signifikant und es funktioniert nicht richtig, falls die Anzeige oder das\n"
|
||||
"Betriebssystem zusätzliches Dithering anwendet oder, falls die Farbkanäle\n"
|
||||
"nicht auf 8 Bits quantisiert sind.\n"
|
||||
"Mit OpenGL ES funktioniert Dithering nur, falls der Shader eine hohe\n"
|
||||
"Fließkommazahlenpräzision unterstützt, und das könnte zu höheren\n"
|
||||
"Einbußen bei der Performanz führen."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Arm inertia"
|
||||
|
@ -2548,7 +2552,6 @@ msgid "Ask to reconnect after crash"
|
|||
msgstr "Abfrage zum Neuverbinden nach Absturz"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"At this distance the server will aggressively optimize which blocks are sent "
|
||||
"to\n"
|
||||
|
@ -2564,15 +2567,14 @@ msgstr ""
|
|||
"aggressiv\n"
|
||||
"optimieren.\n"
|
||||
"Kleine Werte werden die Performanz möglicherweise stark erhöhen, auf\n"
|
||||
"Kosten von sichtbaren Renderfehlern (einige Blöcke werden nicht unter dem "
|
||||
"Wasser\n"
|
||||
"und in Höhlen gerendert, sowie manchmal auf dem Land).\n"
|
||||
"Kosten von sichtbaren Renderfehlern (einige Blöcke können eventuell in "
|
||||
"Höhlen\n"
|
||||
"nicht korrekt gerendert werden).\n"
|
||||
"Wird dieser Wert auf eine Zahl größer als max_block_send_distance gesetzt,\n"
|
||||
"wird diese Optimierung deaktiviert.\n"
|
||||
"In Kartenblöcken (16 Blöcke) angegeben."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"At this distance the server will perform a simpler and cheaper occlusion "
|
||||
"check.\n"
|
||||
|
@ -2582,15 +2584,11 @@ msgid ""
|
|||
"This is especially useful for very large viewing range (upwards of 500).\n"
|
||||
"Stated in MapBlocks (16 nodes)."
|
||||
msgstr ""
|
||||
"In dieser Distanz wird der Server die zu den Clients gesendeten Blöcke "
|
||||
"aggressiv\n"
|
||||
"optimieren.\n"
|
||||
"In dieser Distanz wird der Server einen einfacheren und günstigeren\n"
|
||||
"Occlusion-Check machen.\n"
|
||||
"Kleine Werte werden die Performanz möglicherweise stark erhöhen, auf\n"
|
||||
"Kosten von sichtbaren Renderfehlern (einige Blöcke werden nicht unter dem "
|
||||
"Wasser\n"
|
||||
"und in Höhlen gerendert, sowie manchmal auf dem Land).\n"
|
||||
"Wird dieser Wert auf eine Zahl größer als max_block_send_distance gesetzt,\n"
|
||||
"wird diese Optimierung deaktiviert.\n"
|
||||
"Kosten von sichtbaren Renderfehlern (fehlende Blöcke).\n"
|
||||
"Dies ist besonders nützlich für eine hohe Sichtweite (über 500).\n"
|
||||
"In Kartenblöcken (16 Blöcke) angegeben."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
|
@ -2654,9 +2652,8 @@ msgid "Biome noise"
|
|||
msgstr "Biomrauschen"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Block cull optimize distance"
|
||||
msgstr "Distanz für Sendeoptimierungen von Kartenblöcken"
|
||||
msgstr "Block-Cull-Optimierungsdistanz"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Block send optimize distance"
|
||||
|
@ -2879,6 +2876,9 @@ msgid ""
|
|||
"Comma-separated list of AL and ALC extensions that should not be used.\n"
|
||||
"Useful for testing. See al_extensions.[h,cpp] for details."
|
||||
msgstr ""
|
||||
"Kommagetrennte Liste von AL- und ALC-Erweiterungen, welche nicht\n"
|
||||
"benutzt werden sollen. Nützlich zum Testen. Siehe al_extensions.[h,cpp]\n"
|
||||
"für Details."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3106,7 +3106,6 @@ msgstr ""
|
|||
"aber dies verbraucht auch mehr Ressourcen."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Define the oldest clients allowed to connect.\n"
|
||||
"Older clients are compatible in the sense that they will not crash when "
|
||||
|
@ -3118,12 +3117,18 @@ msgid ""
|
|||
"Minetest still enforces its own internal minimum, and enabling\n"
|
||||
"strict_protocol_version_checking will effectively override this."
|
||||
msgstr ""
|
||||
"Aktivieren, um alten Clients die Verbindung zu verwehren.\n"
|
||||
"Hier festlegen, welches die ältesten Clients sind, die sich verbinden dürfen."
|
||||
"\n"
|
||||
"Ältere Clients sind kompatibel in der Hinsicht, dass sie beim Verbinden zu "
|
||||
"neuen\n"
|
||||
"Servern nicht abstürzen, aber sie könnten nicht alle neuen Funktionen, die "
|
||||
"Sie\n"
|
||||
"erwarten, unterstützen."
|
||||
"erwarten, unterstützen.\n"
|
||||
"Das ermöglicht eine genauere Kontrolle als strict_protocol_version_checking."
|
||||
"\n"
|
||||
"Minetest wird immer noch ein internes Minimum erzwingen, und die "
|
||||
"Aktivierung\n"
|
||||
"von strict_protocol_version_checking wird dies überschreiben."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines areas where trees have apples."
|
||||
|
@ -3335,9 +3340,8 @@ msgid "Enable Bloom Debug"
|
|||
msgstr "Bloom-Debug aktivieren"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Debanding"
|
||||
msgstr "Schaden einschalten"
|
||||
msgstr "Debanding aktivieren"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3366,9 +3370,8 @@ msgstr ""
|
|||
"erzeugen. Ansonsten wird die PCF-Filterung benutzt."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Post Processing"
|
||||
msgstr "Nachbearbeitung"
|
||||
msgstr "Nachbearbeitung aktivieren"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable Raytraced Culling"
|
||||
|
@ -3421,9 +3424,8 @@ msgstr ""
|
|||
"Mausradscrollen für die Gegenstandsauswahl in der Schnellleiste aktivieren."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable random mod loading (mainly used for testing)."
|
||||
msgstr "Schaltet zufällige Steuerung ein (nur zum Testen verwendet)."
|
||||
msgstr "Schaltet zufälliges Modladen ein (nur zum Testen verwendet)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable random user input (only used for testing)."
|
||||
|
@ -3457,9 +3459,8 @@ msgstr ""
|
|||
"erwarten, unterstützen."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable touchscreen"
|
||||
msgstr "Touchscreen"
|
||||
msgstr "Touchscreen aktivieren"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3518,16 +3519,18 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables debug and error-checking in the OpenGL driver."
|
||||
msgstr ""
|
||||
msgstr "Aktiviert Debug und Fehlerprüfungen im OpenGL-Treiber."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables the post processing pipeline."
|
||||
msgstr ""
|
||||
msgstr "Aktiviert die Nachbearbeitungspipeline."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Enables touchscreen mode, allowing you to play the game with a touchscreen."
|
||||
msgstr ""
|
||||
"Aktiviert den Touchscreenmodus. Damit können Sie das Spiel mit einem "
|
||||
"Touchscreen spielen."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4498,16 +4501,16 @@ msgstr ""
|
|||
"- Opaque: Transparenz deaktivieren"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Length of a server tick (the interval at which everything is generally "
|
||||
"updated),\n"
|
||||
"stated in seconds.\n"
|
||||
"Does not apply to sessions hosted from the client menu."
|
||||
msgstr ""
|
||||
"Länge eines Servertakts und dem Zeitintervall, in dem Objekte über das "
|
||||
"Netzwerk\n"
|
||||
"üblicherweise aktualisiert werden; in Sekunden angegeben."
|
||||
"Länge eines Servertakts (dem Intervall, wo grundsätzlich alles aktualisiert "
|
||||
"wird),\n"
|
||||
"in Sekunden.\n"
|
||||
"Wirkt sich nicht auf Sitzungen aus, die vom Clientmenü gestartet wurden."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Length of liquid waves."
|
||||
|
@ -4738,7 +4741,6 @@ msgid "Map generation attributes specific to Mapgen v5."
|
|||
msgstr "Kartengenerierungsattribute speziell für den Kartengenerator v5."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Map generation attributes specific to Mapgen v6.\n"
|
||||
"The 'snowbiomes' flag enables the new 5 biome system.\n"
|
||||
|
@ -4750,7 +4752,11 @@ msgstr ""
|
|||
"Kartengenerierungsattribute speziell für den Kartengenerator v6.\n"
|
||||
"Das Flag „snowbiomes“ aktiviert das neue 5-Biom-System.\n"
|
||||
"Falls das „snowbiomes“-Flag aktiviert ist, werden Dschungel automatisch "
|
||||
"aktiviert und das „jungles“-Flag wird ignoriert."
|
||||
"aktiviert und\n"
|
||||
"das „jungles“-Flag wird ignoriert.\n"
|
||||
"Das „temples“-Flag deaktiviert die Erzeugung von Wüstentempeln. Stattdessen "
|
||||
"werden\n"
|
||||
"normale Verliese auftauchen."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5070,9 +5076,8 @@ msgid "Minimap scan height"
|
|||
msgstr "Abtasthöhe der Übersichtskarte"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Minimum dig repetition interval"
|
||||
msgstr "Bauen-Wiederholungsrate"
|
||||
msgstr "Minimale Grabungswiederholungsrate"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Minimum limit of random number of large caves per mapchunk."
|
||||
|
@ -5143,9 +5148,8 @@ msgid "Mouse sensitivity multiplier."
|
|||
msgstr "Faktor für die Mausempfindlichkeit."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Movement threshold"
|
||||
msgstr "Hohlraumschwellwert"
|
||||
msgstr "Bewegungsschwellwert"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Mud noise"
|
||||
|
@ -5307,9 +5311,8 @@ msgstr ""
|
|||
"Wird nicht pausieren, wenn ein Formspec geöffnet ist."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "OpenGL debug"
|
||||
msgstr "Kartengenerator-Debugging"
|
||||
msgstr "OpenGL-Debug"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Optional override for chat weblink color."
|
||||
|
@ -5447,13 +5450,12 @@ msgid "Proportion of large caves that contain liquid."
|
|||
msgstr "Anteil der großen Höhlen, die eine Flüssigkeit enthalten."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Protocol version minimum"
|
||||
msgstr "Protokollversion stimmt nicht überein. "
|
||||
msgstr "Protokollversionsminimum"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Punch gesture"
|
||||
msgstr ""
|
||||
msgstr "Schlaggeste"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5475,7 +5477,7 @@ msgstr "Zufällige Steuerung"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Random mod load order"
|
||||
msgstr ""
|
||||
msgstr "Zufällige Modladereihenfolge"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Recent Chat Messages"
|
||||
|
@ -5689,7 +5691,6 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
|
|||
msgstr "Siehe https://www.sqlite.org/pragma.html#pragma_synchronous"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select the antialiasing method to apply.\n"
|
||||
"\n"
|
||||
|
@ -5715,9 +5716,10 @@ msgstr ""
|
|||
"* None – Keine Kantenglättung (Standard)\n"
|
||||
"\n"
|
||||
"* FSAA – Von der Hardware bereitgestellte Vollbildkantenglättung (nicht\n"
|
||||
"kompatibel mit Shadern), auch bekannt als Multi-Sample Antialiasing (MSAA).\n"
|
||||
"Glättet Blockkanten aus, beeinträchtigt aber nicht die Innenseiten der "
|
||||
"Texturen.\n"
|
||||
"kompatibel mit Nachbearbeitung und Unterabtastung), auch bekannt\n"
|
||||
"als Multi-Sample Antialiasing (MSAA). Glättet Blockkanten aus, "
|
||||
"beeinträchtigt\n"
|
||||
"aber nicht die Innenseiten der Texturen.\n"
|
||||
"Um diese Option zu ändern, ist ein Neustart erforderlich.\n"
|
||||
"\n"
|
||||
"* FXAA – Schnelle annähende Kantenglättung (benötigt Shader).\n"
|
||||
|
@ -5727,7 +5729,7 @@ msgstr ""
|
|||
"Bildqualität.\n"
|
||||
"\n"
|
||||
"* SSAA – Super-Sampling-Kantenglättung (benötigt Shader).\n"
|
||||
"Rendert ein hochauflösendes Bild der Szene, dann skaliert es nach unten, um\n"
|
||||
"Rendert ein hochauflösendes Bild der Szene, dann skaliert es herunter, um\n"
|
||||
"die Aliasing-Effekte zu reduzieren. Dies ist die langsamste und genaueste "
|
||||
"Methode."
|
||||
|
||||
|
@ -5858,12 +5860,11 @@ msgstr ""
|
|||
"Wertebereich: von -1 zu 1.0"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Set the language. By default, the system language is used.\n"
|
||||
"A restart is required after changing this."
|
||||
msgstr ""
|
||||
"Setzt die Sprache. Leer lassen, um Systemsprache zu verwenden.\n"
|
||||
"Setzt die Sprache. Standardmäßig wird die Systemsprache zu verwendet.\n"
|
||||
"Nach Änderung ist ein Neustart erforderlich."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
|
@ -5910,6 +5911,8 @@ msgstr ""
|
|||
#: src/settings_translation_file.cpp
|
||||
msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")."
|
||||
msgstr ""
|
||||
"Auf wahr setzen, um volumetrische Lichteffekte zu aktivieren (auch bekannt "
|
||||
"als „Gottesstrahlen“/„Godrays“)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Set to true to enable waving leaves."
|
||||
|
@ -5955,7 +5958,6 @@ msgid "Shaders"
|
|||
msgstr "Shader"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Shaders allow advanced visual effects and may increase performance on some "
|
||||
"video\n"
|
||||
|
@ -5963,8 +5965,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Shader ermöglichen fortgeschrittene visuelle Effekte und können die "
|
||||
"Performanz auf\n"
|
||||
"einigen Grafikkarten erhöhen.\n"
|
||||
"Das funktioniert nur mit dem OpenGL-Grafik-Backend."
|
||||
"einigen Grafikkarten erhöhen."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Shadow filter quality"
|
||||
|
@ -6085,13 +6086,12 @@ msgid "Smooth lighting"
|
|||
msgstr "Weiches Licht"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Smooths rotation of camera when in cinematic mode, 0 to disable. Enter "
|
||||
"cinematic mode by using the key set in Controls."
|
||||
msgstr ""
|
||||
"Glättet die Rotation der Kamera im Filmmodus. 0 zum Ausschalten.\n"
|
||||
"Der Filmmodus kann aktiviert werden, indem die entsprechende Taste in der "
|
||||
"Glättet die Rotation der Kamera im Filmmodus. 0 zum Ausschalten. Der "
|
||||
"Filmmodus kann aktiviert werden, indem die entsprechende Taste in der "
|
||||
"Tastenbelegung benutzt wird."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
|
@ -6119,9 +6119,8 @@ msgid "Sound"
|
|||
msgstr "Ton"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Sound Extensions Blacklist"
|
||||
msgstr "ContentDB: Schwarze Liste"
|
||||
msgstr "Schwarze Liste der Sounderweiterungen"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6336,6 +6335,8 @@ msgid ""
|
|||
"The delay in milliseconds after which a touch interaction is considered a "
|
||||
"long tap."
|
||||
msgstr ""
|
||||
"Die Verzögerung in Millisekunden, nachdem eine Berührungsinteraktion als "
|
||||
"langes Antippen zählt."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6355,18 +6356,27 @@ msgid ""
|
|||
"Known from the classic Minetest mobile controls.\n"
|
||||
"Combat is more or less impossible."
|
||||
msgstr ""
|
||||
"Die Geste für für das Schlagen von Spielern/Entitys.\n"
|
||||
"Dies kann von Spielen und Mods überschrieben werden.\n"
|
||||
"\n"
|
||||
"* short_tap\n"
|
||||
"Leicht zu benutzen und bekannt von anderen Spielen, die nicht genannt werden "
|
||||
"sollen.\n"
|
||||
"\n"
|
||||
"* long_tap\n"
|
||||
"Bekannt aus der klassischen Mineteststeuerung für mobile Endgeräte.\n"
|
||||
"Der Kampf ist mehr oder weniger unmöglich."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The identifier of the joystick to use"
|
||||
msgstr "Die Kennung des zu verwendeten Joysticks"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The length in pixels after which a touch interaction is considered movement."
|
||||
msgstr ""
|
||||
"Die Länge in Pixeln, die benötigt wird, damit die Touchscreen-Interaktion "
|
||||
"beginnt."
|
||||
"Die Länge in Pixeln, die benötigt wird, damit die Touch-Interaktion als "
|
||||
"Bewegung zählt."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6381,13 +6391,13 @@ msgstr ""
|
|||
"Standard ist 1.0 (1/2 Block)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The minimum time in seconds it takes between digging nodes when holding\n"
|
||||
"the dig button."
|
||||
msgstr ""
|
||||
"Die Zeit in Sekunden, in dem die Blockplatzierung wiederholt wird, wenn\n"
|
||||
"die Bautaste gedrückt gehalten wird."
|
||||
"Die minimale Zeit in Sekunden, die zwischen dem Graben von Blöcken benötigt "
|
||||
"wird,\n"
|
||||
"wenn die Grabetaste gedrückt gehalten wird."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The network interface that the server listens on."
|
||||
|
@ -6421,7 +6431,6 @@ msgstr ""
|
|||
"konfiguriert werden."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The rendering back-end.\n"
|
||||
"Note: A restart is required after changing this!\n"
|
||||
|
@ -6432,7 +6441,7 @@ msgstr ""
|
|||
"Anmerkung: Ein Neustart ist nach einer Änderung notwendig!\n"
|
||||
"Auf Desktopsystemen ist OpenGL die Standardeinstellung. Bei Android ist "
|
||||
"OGLES2 die Standardeinstellung.\n"
|
||||
"Shader werden unter OpenGL und OGLES2 (experimentell) unterstützt."
|
||||
"Shader werden von allem außer OGLES1 unterstützt."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6515,7 +6524,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Threshold for long taps"
|
||||
msgstr ""
|
||||
msgstr "Schwelle für langes Antippen"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6578,9 +6587,8 @@ msgid "Tradeoffs for performance"
|
|||
msgstr "Kompromisse für Performanz"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Translucent liquids"
|
||||
msgstr "Undurchsichtige Flüssigkeiten"
|
||||
msgstr "Transluzente Flüssigkeiten"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Transparency Sorting Distance"
|
||||
|
@ -6629,14 +6637,14 @@ msgstr ""
|
|||
"haben."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"URL to JSON file which provides information about the newest Minetest "
|
||||
"release\n"
|
||||
"If this is empty the engine will never check for updates."
|
||||
msgstr ""
|
||||
"URL zu einer JSON-Datei, welche Informationen über das neueste Minetest-"
|
||||
"Release enthält"
|
||||
"Release enthält\n"
|
||||
"Wenn dies leer ist, wird die Engine nie nach Updates suchen."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "URL to the server list displayed in the Multiplayer Tab."
|
||||
|
@ -6856,7 +6864,7 @@ msgstr "Tonlautstärke"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Volume multiplier when the window is unfocused."
|
||||
msgstr ""
|
||||
msgstr "Lautstärkenfaktor, wenn das Fenster nicht im Fokus steht."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6867,14 +6875,12 @@ msgstr ""
|
|||
"Dafür muss das Tonsystem aktiviert sein."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volume when unfocused"
|
||||
msgstr "Bildwiederholrate wenn Fenster im Hintergrund/Spiel pausiert"
|
||||
msgstr "Lautstärke außerhalb Fokus"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volumetric lighting"
|
||||
msgstr "Weiches Licht"
|
||||
msgstr "Volumetrisches Licht"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
|
|
@ -3,8 +3,8 @@ msgstr ""
|
|||
"Project-Id-Version: Spanish (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2024-06-09 15:09+0000\n"
|
||||
"Last-Translator: SergioFLS <sergioflsgd@hotmail.com>\n"
|
||||
"PO-Revision-Date: 2024-07-14 21:23+0000\n"
|
||||
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/minetest/"
|
||||
"minetest/es/>\n"
|
||||
"Language: es\n"
|
||||
|
@ -12,7 +12,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6-dev\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -71,9 +71,8 @@ msgid "Command not available: "
|
|||
msgstr "Comando no disponible: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr "Obtener ayuda para los comandos"
|
||||
msgstr "Obtener ayuda para los comandos (-t: salida en el chat)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
|
@ -83,9 +82,8 @@ msgstr ""
|
|||
"todo."
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[todo | <cmd>]"
|
||||
msgstr "[all | <cmd>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -148,12 +146,12 @@ msgid "Failed to download $1"
|
|||
msgstr "Fallo al descargar $1"
|
||||
|
||||
#: builtin/mainmenu/content/contentdb.lua
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Failed to extract \"$1\" (insufficient disk space, unsupported file type or "
|
||||
"broken archive)"
|
||||
msgstr ""
|
||||
"Fallo al extraer \"$1\" (Formato de archivo no soportado o archivo corrupto)"
|
||||
"No se pudo extraer \"$1\" (espacio en disco insuficiente, tipo de archivo no "
|
||||
"compatible o archivo dañado)"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid ""
|
||||
|
@ -186,7 +184,7 @@ msgstr "Descargando..."
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "Error obteniendo dependencias para el paquete"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -466,7 +464,7 @@ msgstr "Decoraciones"
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Desert temples"
|
||||
msgstr ""
|
||||
msgstr "Templos del desierto"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Development Test is meant for developers."
|
||||
|
@ -477,6 +475,8 @@ msgid ""
|
|||
"Different dungeon variant generated in desert biomes (only if dungeons "
|
||||
"enabled)"
|
||||
msgstr ""
|
||||
"Variante de mazmorras diferente generada en biomas de desierto (solo si las "
|
||||
"mazmorras están activadas)"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
|
@ -1073,15 +1073,16 @@ msgid "Install games from ContentDB"
|
|||
msgstr "Instalar juegos desde ContentDB"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "Minetest doesn't come with a game by default."
|
||||
msgstr "Minetest Game ya no es instalado por predeterminado"
|
||||
msgstr "Minetest Game ya no es instalado por predeterminado."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid ""
|
||||
"Minetest is a game-creation platform that allows you to play many different "
|
||||
"games."
|
||||
msgstr ""
|
||||
"Minetest es una plataforma de creación de juegos que te permite jugar a "
|
||||
"muchos juegos diferentes."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "New"
|
||||
|
@ -1116,9 +1117,8 @@ msgid "Start Game"
|
|||
msgstr "Empezar juego"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr "Necesitas instalar un juego antes de que puedas instalar un mod"
|
||||
msgstr "Necesitas instalar un juego antes de poder crear un mundo."
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1941,13 +1941,13 @@ msgid "Minimap in texture mode"
|
|||
msgstr "Minimapa en modo textura"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Failed to compile the \"%s\" shader."
|
||||
msgstr "Fallo al abrir la página web"
|
||||
msgstr "Fallo al compilar el shader \"%s\"."
|
||||
|
||||
#: src/client/shader.cpp
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "Los shaders están activados pero el driver no soporta GLSL."
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2148,7 +2148,7 @@ msgstr ""
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "Abrir URL?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
|
@ -2455,7 +2455,7 @@ msgstr "Avanzado"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Allows liquids to be translucent."
|
||||
msgstr ""
|
||||
msgstr "Permite que los líquidos sean traslúcidos."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3510,7 +3510,7 @@ msgstr "Habilitar cacheado de mallas giradas."
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables debug and error-checking in the OpenGL driver."
|
||||
msgstr ""
|
||||
msgstr "Activa depuración y comprobación de errores en el driver OpenGL."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables the post processing pipeline."
|
||||
|
@ -3520,6 +3520,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"Enables touchscreen mode, allowing you to play the game with a touchscreen."
|
||||
msgstr ""
|
||||
"Activa el modo de pantalla táctil, permitiendote jugar con pantalla táctil."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4474,16 +4475,15 @@ msgstr ""
|
|||
"- Opaco: Transparencia desactivada"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Length of a server tick (the interval at which everything is generally "
|
||||
"updated),\n"
|
||||
"stated in seconds.\n"
|
||||
"Does not apply to sessions hosted from the client menu."
|
||||
msgstr ""
|
||||
"Duración de un tick del servidor y el intervalo en el que los objetos se "
|
||||
"actualizan generalmente sobre la\n"
|
||||
"red, expresada en segundos."
|
||||
"Duración de un tick del servidor y el intervalo en\n"
|
||||
"el que los objetos se actualizan generalmente\n"
|
||||
"sobre la red, expresada en segundos."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Length of liquid waves."
|
||||
|
@ -5423,13 +5423,12 @@ msgid "Proportion of large caves that contain liquid."
|
|||
msgstr "Proporción de cuevas grandes que contienen líquido."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Protocol version minimum"
|
||||
msgstr "La versión del protocolo no coincide. "
|
||||
msgstr "La versión del protocolo no coincide"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Punch gesture"
|
||||
msgstr ""
|
||||
msgstr "Gesto para golpear"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5451,7 +5450,7 @@ msgstr "Entrada aleatoria"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Random mod load order"
|
||||
msgstr ""
|
||||
msgstr "Orden aleatorio de carga de mods"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Recent Chat Messages"
|
||||
|
@ -5942,16 +5941,15 @@ msgid "Shaders"
|
|||
msgstr "Shaders (Sombreador)"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Shaders allow advanced visual effects and may increase performance on some "
|
||||
"video\n"
|
||||
"cards."
|
||||
msgstr ""
|
||||
"Los sombreadores permiten efectos visuales avanzados y pueden aumentar el "
|
||||
"rendimiento en algunas tarjetas de\n"
|
||||
"vídeo.\n"
|
||||
"Esto solo funciona con el motor de vídeo OpenGL."
|
||||
"rendimiento\n"
|
||||
"en algunas tarjetas de vídeo. Esto solo funciona con el motor de vídeo "
|
||||
"OpenGL."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Shadow filter quality"
|
||||
|
@ -6037,7 +6035,7 @@ msgstr ""
|
|||
"aumentar este valor por encima de 5.\n"
|
||||
"Reducir este valor aumenta la densidad de cuevas y mazmorras.\n"
|
||||
"Alterar este valor es para uso especial, dejarlo sin cambios es\n"
|
||||
"recomendable"
|
||||
"recomendable."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Sky Body Orbit Tilt"
|
||||
|
@ -6068,6 +6066,7 @@ msgstr ""
|
|||
#: src/settings_translation_file.cpp
|
||||
msgid "Small-scale temperature variation for blending biomes on borders."
|
||||
msgstr ""
|
||||
"Variación de temperatura a pequeña escala para mezclar biomas en bordes."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Smooth lighting"
|
||||
|
@ -6282,17 +6281,23 @@ msgid ""
|
|||
"The default format in which profiles are being saved,\n"
|
||||
"when calling `/profiler save [format]` without format."
|
||||
msgstr ""
|
||||
"El formato predefinido en que se guardan los perfiles\n"
|
||||
"al llamar `/profiler save [format]` sin especificar formato."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"The delay in milliseconds after which a touch interaction is considered a "
|
||||
"long tap."
|
||||
msgstr ""
|
||||
"El retraso en milisegundos a partir del cual una interacción táctil es "
|
||||
"considerada un toque prolongado."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"The file path relative to your world path in which profiles will be saved to."
|
||||
msgstr ""
|
||||
"La ruta de archivos relativa a la ruta de los mundos en la que se guardarán "
|
||||
"los perfiles."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6306,15 +6311,26 @@ msgid ""
|
|||
"Known from the classic Minetest mobile controls.\n"
|
||||
"Combat is more or less impossible."
|
||||
msgstr ""
|
||||
"El gesto para golpear jugadores/entidades.\n"
|
||||
"Los juegos y mods pueden ignorar esto.\n"
|
||||
"\n"
|
||||
"* sort_tap\n"
|
||||
"Fácil de usar y muy conocido por otros juegos que no se mencionarán.\n"
|
||||
"\n"
|
||||
"* long_tap\n"
|
||||
"Conocido por los controles clásicos para móviles de Minetest.\n"
|
||||
"El combate es más o menos imposible."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The identifier of the joystick to use"
|
||||
msgstr ""
|
||||
msgstr "El identificador del joystick a usar"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"The length in pixels after which a touch interaction is considered movement."
|
||||
msgstr ""
|
||||
"La longitud en píxeles a partir de la cual una interacción táctil es "
|
||||
"considerada movimiento."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6342,6 +6358,9 @@ msgid ""
|
|||
"The privileges that new users automatically get.\n"
|
||||
"See /privs in game for a full list on your server and mod configuration."
|
||||
msgstr ""
|
||||
"Los privilegios que reciben los usuarios nuevos automaticamente.\n"
|
||||
"Véase /privs en el juego para una lista completa en tu servidor y "
|
||||
"configuración de mods."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6361,6 +6380,10 @@ msgid ""
|
|||
"OpenGL is the default for desktop, and OGLES2 for Android.\n"
|
||||
"Shaders are supported by everything but OGLES1."
|
||||
msgstr ""
|
||||
"El back-end de renderizado.\n"
|
||||
"Nota: ¡se requiere reinicio después de cambiar esto!\n"
|
||||
"OpenGL es el predeterminado para PC, y OGLES2 para Android.\n"
|
||||
"Los shaders son soportados por todo excepto OGLES1."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6394,6 +6417,8 @@ msgid ""
|
|||
"The time in seconds it takes between repeated events\n"
|
||||
"when holding down a joystick button combination."
|
||||
msgstr ""
|
||||
"El tiempo en segundos entre eventos repetidos al mantener\n"
|
||||
"presionada una combinación de botones del joystick."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6413,6 +6438,10 @@ msgid ""
|
|||
"enabled. Also, the vertical distance over which humidity drops by 10 if\n"
|
||||
"'altitude_dry' is enabled."
|
||||
msgstr ""
|
||||
"La distancia vertical sobre la cuál el calor decae a 20 si 'altitude_chill' "
|
||||
"está activo.\n"
|
||||
"También, la distancia vertical sobre la cual la humedad decae a 10 si\n"
|
||||
"'altitude_dry' está activo."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Third of 4 2D noises that together define hill/mountain range height."
|
||||
|
@ -6422,13 +6451,15 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Threshold for long taps"
|
||||
msgstr ""
|
||||
msgstr "Umbral para toques prolongados"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Time in seconds for item entity (dropped items) to live.\n"
|
||||
"Setting it to -1 disables the feature."
|
||||
msgstr ""
|
||||
"Tiempo, en segundos, de vida de las entidades objeto (objetos soltados).\n"
|
||||
"Establecerla a -1 desactiva esta característica."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Time of day when a new world is started, in millihours (0-23999)."
|
||||
|
@ -6547,15 +6578,15 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Unload unused server data"
|
||||
msgstr ""
|
||||
msgstr "Liberar datos no usados del servidor"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Update information URL"
|
||||
msgstr ""
|
||||
msgstr "Actualizar información de URLs"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Upper Y limit of dungeons."
|
||||
msgstr ""
|
||||
msgstr "Límite Y superior de las mazmorras."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Upper Y limit of floatlands."
|
||||
|
@ -6581,13 +6612,15 @@ msgstr "Usar filtrado bilinear al escalar texturas."
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Use crosshair for touch screen"
|
||||
msgstr ""
|
||||
msgstr "Usar retícula en pantalla táctil"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Use crosshair to select object instead of whole screen.\n"
|
||||
"If enabled, a crosshair will be shown and will be used for selecting object."
|
||||
msgstr ""
|
||||
"Usar la retícula para seleccionar objetos en lugar de usar la pantalla.\n"
|
||||
"Si está activo, una retícula se mostrará y se usará para seleccionar objetos."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6609,6 +6642,9 @@ msgid ""
|
|||
"If both bilinear and trilinear filtering are enabled, trilinear filtering\n"
|
||||
"is applied."
|
||||
msgstr ""
|
||||
"Usar filtro trilinear al escalar texturas.\n"
|
||||
"Si tanto los filtros bilinear y trilinear están activos, se aplica\n"
|
||||
"el filtro trilinear."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
|
@ -6655,17 +6691,19 @@ msgstr "Variación de la altura maxima de las montañas (En nodos)."
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Variation of number of caves."
|
||||
msgstr ""
|
||||
msgstr "Variación en el número de cuevas."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Variation of terrain vertical scale.\n"
|
||||
"When noise is < -0.55 terrain is near-flat."
|
||||
msgstr ""
|
||||
"Variación de la escala vertical.\n"
|
||||
"Cuando el ruido es < -0.55 el terreno es casi plano."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Varies depth of biome surface nodes."
|
||||
msgstr ""
|
||||
msgstr "Varía la profundidad de los nodos de la superficie de los biomas."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6686,10 +6724,12 @@ msgid ""
|
|||
"Vertical screen synchronization. Your system may still force VSync on even "
|
||||
"if this is disabled."
|
||||
msgstr ""
|
||||
"Sincronización vertical de la pantalla. Tu sistema aún podría forzar la "
|
||||
"sincronización vertical incluso si está desactivada."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Video driver"
|
||||
msgstr ""
|
||||
msgstr "Driver de video"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "View bobbing factor"
|
||||
|
@ -6713,7 +6753,7 @@ msgstr "Volumen"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Volume multiplier when the window is unfocused."
|
||||
msgstr ""
|
||||
msgstr "Multiplicador de volúmen cuando la ventana está desenfocada."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
|
@ -6754,6 +6794,7 @@ msgstr "Velocidad del caminar"
|
|||
#: src/settings_translation_file.cpp
|
||||
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
|
||||
msgstr ""
|
||||
"Velocidad al caminar, volar y escalar en modo rápido, en nodos por segundo."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Water level"
|
||||
|
@ -6761,7 +6802,7 @@ msgstr "Nivel del agua"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Water surface level of the world."
|
||||
msgstr ""
|
||||
msgstr "Nivel de superficie de agua del mundo."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Waving Nodes"
|
||||
|
@ -6794,7 +6835,7 @@ msgstr "Movimiento de plantas"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Weblink color"
|
||||
msgstr ""
|
||||
msgstr "Color de los enlaces web"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6875,11 +6916,11 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Width of the selection box lines around nodes."
|
||||
msgstr ""
|
||||
msgstr "Ancho de las líneas de la caja de selección alrededor de los nodos."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Window maximized"
|
||||
msgstr ""
|
||||
msgstr "Ventana maximizada"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6932,6 +6973,7 @@ msgstr "\"Y\" del límite superior de las grandes cuevas."
|
|||
#: src/settings_translation_file.cpp
|
||||
msgid "Y-distance over which caverns expand to full size."
|
||||
msgstr ""
|
||||
"Distancia en Y sobre la cual las cavernas se expanden a su tamaño completo."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6943,7 +6985,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Y-level of average terrain surface."
|
||||
msgstr ""
|
||||
msgstr "Nivel Y de superficie de terreno promedio."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Y-level of cavern upper limit."
|
||||
|
@ -6951,7 +6993,7 @@ msgstr "Nivel Y del límite superior de las cavernas."
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Y-level of higher terrain that creates cliffs."
|
||||
msgstr ""
|
||||
msgstr "Nivel Y de terreno más elevado que crea acantilados."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Y-level of lower terrain and seabed."
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -3,8 +3,8 @@ msgstr ""
|
|||
"Project-Id-Version: Japanese (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2023-12-16 10:05+0000\n"
|
||||
"Last-Translator: Jun Nogata <nogajun@gmail.com>\n"
|
||||
"PO-Revision-Date: 2024-08-08 13:09+0000\n"
|
||||
"Last-Translator: BreadW <toshiharu.uno@gmail.com>\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/minetest/"
|
||||
"minetest/ja/>\n"
|
||||
"Language: ja\n"
|
||||
|
@ -12,7 +12,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.3\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -71,9 +71,8 @@ msgid "Command not available: "
|
|||
msgstr "コマンドは使用できません: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr "コマンドのヘルプを表示する"
|
||||
msgstr "コマンドのヘルプを表示 (-t: チャットで出力)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
|
@ -83,9 +82,8 @@ msgstr ""
|
|||
"べてを一覧表示します。"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[all | <cmd>]"
|
||||
msgstr "[all | <cmd>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -148,12 +146,11 @@ msgid "Failed to download $1"
|
|||
msgstr "$1のダウンロードに失敗"
|
||||
|
||||
#: builtin/mainmenu/content/contentdb.lua
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Failed to extract \"$1\" (insufficient disk space, unsupported file type or "
|
||||
"broken archive)"
|
||||
msgstr ""
|
||||
"「$1」の展開に失敗 (サポートされていないファイル形式または壊れたアーカイブ)"
|
||||
msgstr "「$1」の展開に失敗 (ディスク容量の不足、サポートされていないファイルタイプま"
|
||||
"たは壊れたアーカイブ)"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid ""
|
||||
|
@ -185,7 +182,7 @@ msgstr "ダウンロード中..."
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "パッケージの依存関係を取得するエラー"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -463,7 +460,7 @@ msgstr "デコレーション"
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Desert temples"
|
||||
msgstr ""
|
||||
msgstr "砂漠の寺院"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Development Test is meant for developers."
|
||||
|
@ -473,7 +470,8 @@ msgstr "Development Testは開発者用です。"
|
|||
msgid ""
|
||||
"Different dungeon variant generated in desert biomes (only if dungeons "
|
||||
"enabled)"
|
||||
msgstr ""
|
||||
msgstr "砂漠のバイオームで生成された異なるダンジョンのバリエーション(ダンジョンが有効"
|
||||
"になっている場合のみ)"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
|
@ -860,7 +858,7 @@ msgstr "Clear"
|
|||
#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Controls"
|
||||
msgstr "操作"
|
||||
msgstr "キー割り当て"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp
|
||||
msgid "General"
|
||||
|
@ -1064,15 +1062,15 @@ msgid "Install games from ContentDB"
|
|||
msgstr "コンテンツDBからゲームをインストール"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "Minetest doesn't come with a game by default."
|
||||
msgstr "Minetest Game は初期状態ではインストールされていない"
|
||||
msgstr "Minetest は初期状態でゲームが付属していません。"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid ""
|
||||
"Minetest is a game-creation platform that allows you to play many different "
|
||||
"games."
|
||||
msgstr ""
|
||||
msgstr "Minetestは、さまざまなゲームで遊ぶことを可能にするゲーム制作プラットフォーム"
|
||||
"です."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "New"
|
||||
|
@ -1107,9 +1105,8 @@ msgid "Start Game"
|
|||
msgstr "ゲームスタート"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr "MODをインストールする前に、ゲームをインストールする必要があります"
|
||||
msgstr "ワールドを作る前に、ゲームをインストールする必要があります。"
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1292,11 +1289,11 @@ msgstr "パスワード変更"
|
|||
|
||||
#: src/client/game.cpp
|
||||
msgid "Cinematic mode disabled"
|
||||
msgstr "映画風モード 無効"
|
||||
msgstr "シネマティックモード 無効"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Cinematic mode enabled"
|
||||
msgstr "映画風モード 有効"
|
||||
msgstr "シネマティックモード 有効"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Client disconnected"
|
||||
|
@ -1323,7 +1320,6 @@ msgid "Continue"
|
|||
msgstr "再開"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Controls:\n"
|
||||
"No menu open:\n"
|
||||
|
@ -1341,15 +1337,15 @@ msgstr ""
|
|||
"操作方法:\n"
|
||||
"メニューなし:\n"
|
||||
"- スライド: 見回す\n"
|
||||
"- タップ: 置く/使う\n"
|
||||
"- ロングタップ: 掘る/パンチ/使う ブロックの破壊- ダブルタップ: 設置/使用\n"
|
||||
"メニュー/インベントリの操作:\n"
|
||||
"- タップ: 置く/パンチ/使う(基本)\n"
|
||||
"- ロングタップ: 掘る/使う(基本)\n"
|
||||
"メニュー/インベントリを開く:\n"
|
||||
"- ダブルタップ (メニューの外):\n"
|
||||
" --> 閉じる\n"
|
||||
"- アイテムをタッチし、スロットをタッチ:\n"
|
||||
" --> アイテムを移動\n"
|
||||
"- タッチしてドラッグし、二本目の指でタップ:\n"
|
||||
" --> アイテムを1つスロットに置く\n"
|
||||
" --> スロットにアイテムを1つ置く\n"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, c-format
|
||||
|
@ -1422,9 +1418,8 @@ msgid "Fog enabled"
|
|||
msgstr "霧 有効"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Fog enabled by game or mod"
|
||||
msgstr "ズームはゲームやMODによって無効化されている"
|
||||
msgstr "霧はゲームやMODによって有効化されている"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Game info:"
|
||||
|
@ -1922,13 +1917,13 @@ msgid "Minimap in texture mode"
|
|||
msgstr "ミニマップ テクスチャモード"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Failed to compile the \"%s\" shader."
|
||||
msgstr "ウェブページを開けませんでした"
|
||||
msgstr "「%s」シェーダーをコンパイルできませんでした。"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "シェーダーは有効ですが、このドライバはGLSLをサポートしていません。"
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2045,7 +2040,7 @@ msgstr "キーが重複しています"
|
|||
|
||||
#: src/gui/guiKeyChangeMenu.cpp
|
||||
msgid "Keybindings."
|
||||
msgstr "キーに対する機能の割り当て。"
|
||||
msgstr "キーに対する機能の割り当てです。"
|
||||
|
||||
#: src/gui/guiKeyChangeMenu.cpp
|
||||
msgid "Left"
|
||||
|
@ -2125,16 +2120,15 @@ msgstr "キー入力待ち"
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "開く"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "URLを開く?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
msgid "Unable to open URL"
|
||||
msgstr "ウェブページを開けませんでした"
|
||||
msgstr "URLを開くことができない"
|
||||
|
||||
#: src/gui/guiPasswordChange.cpp
|
||||
msgid "Change"
|
||||
|
@ -2418,7 +2412,7 @@ msgstr "詳細"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Allows liquids to be translucent."
|
||||
msgstr ""
|
||||
msgstr "液体が半透明になることを可能にします。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2488,6 +2482,17 @@ msgid ""
|
|||
"With OpenGL ES, dithering only works if the shader supports high\n"
|
||||
"floating-point precision and it may have a higher performance impact."
|
||||
msgstr ""
|
||||
"色帯状のアーティファクトを減らすためにディザリングを適用します。\n"
|
||||
"ディザリングにより、可逆圧縮されたスクリーンショットのサイズが大幅に増加しま"
|
||||
"す。\n"
|
||||
"また、ディスプレイまたはオペレーティング "
|
||||
"システムが追加のディザリングを実行する場合、\n"
|
||||
"またはカラー チャネルが 8 ビットに量子化されていない場合、"
|
||||
"ディザリングは正しく動作\n"
|
||||
"しません。\n"
|
||||
"OpenGL ES では、"
|
||||
"ディザリングはシェーダーが高い浮動小数点精度をサポートしている場合に\n"
|
||||
"のみ機能し、パフォーマンスに大きな影響を与える可能性があります。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Arm inertia"
|
||||
|
@ -2506,7 +2511,6 @@ msgid "Ask to reconnect after crash"
|
|||
msgstr "クラッシュ後に再接続を促す"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"At this distance the server will aggressively optimize which blocks are sent "
|
||||
"to\n"
|
||||
|
@ -2522,13 +2526,12 @@ msgstr ""
|
|||
"最適化します。\n"
|
||||
"小さい値に設定すると、描画の視覚的な不具合を犠牲にして、\n"
|
||||
"パフォーマンスが大幅に向上する可能性があります(いくつかのブロックは\n"
|
||||
"水中や洞窟、時には陸の上でも描画されません)。\n"
|
||||
"洞窟で正しく描画されません)。\n"
|
||||
"max_block_send_distance より大きい値に設定すると、この最適化は\n"
|
||||
"無効になります。 \n"
|
||||
"マップブロック(16ノード)で表記。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"At this distance the server will perform a simpler and cheaper occlusion "
|
||||
"check.\n"
|
||||
|
@ -2538,13 +2541,10 @@ msgid ""
|
|||
"This is especially useful for very large viewing range (upwards of 500).\n"
|
||||
"Stated in MapBlocks (16 nodes)."
|
||||
msgstr ""
|
||||
"この距離でサーバーはどのブロックをクライアントへ送信するかを積極的に\n"
|
||||
"最適化します。\n"
|
||||
"小さい値に設定すると、描画の視覚的な不具合を犠牲にして、\n"
|
||||
"パフォーマンスが大幅に向上する可能性があります(いくつかのブロックは\n"
|
||||
"水中や洞窟、時には陸の上でも描画されません)。\n"
|
||||
"max_block_send_distance より大きい値に設定すると、この最適化は\n"
|
||||
"無効になります。 \n"
|
||||
"この距離でサーバーはよりシンプルで安価なオクルージョンチェックを行います。\n"
|
||||
"小さい値に設定すると、描画の視覚的な不具合(不足するブロック)を一時的に\n"
|
||||
"犠牲にして、パフォーマンスが向上する可能性があります。\n"
|
||||
"これは特に非常に広い視野(500以上)に有用です。\n"
|
||||
"マップブロック(16ノード)で表記。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
|
@ -2608,9 +2608,8 @@ msgid "Biome noise"
|
|||
msgstr "バイオームノイズ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Block cull optimize distance"
|
||||
msgstr "ブロック送信最適化距離"
|
||||
msgstr "ブロックカリングの最適化距離"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Block send optimize distance"
|
||||
|
@ -2670,7 +2669,7 @@ msgstr "カメラの滑らかさ"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Camera smoothing in cinematic mode"
|
||||
msgstr "映画風モードでのカメラの滑らかさ"
|
||||
msgstr "シネマティックモードでのカメラの滑らかさ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise"
|
||||
|
@ -2833,6 +2832,8 @@ msgid ""
|
|||
"Comma-separated list of AL and ALC extensions that should not be used.\n"
|
||||
"Useful for testing. See al_extensions.[h,cpp] for details."
|
||||
msgstr ""
|
||||
"使用されるべきでない拡張子ALおよびALCのカンマ区切りリストです。\n"
|
||||
"テストのために有用です。 詳細は al_extensions.[h,cpp] を参照してください。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3053,7 +3054,6 @@ msgstr ""
|
|||
"しかし、より多くのリソースを消費します。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Define the oldest clients allowed to connect.\n"
|
||||
"Older clients are compatible in the sense that they will not crash when "
|
||||
|
@ -3065,10 +3065,14 @@ msgid ""
|
|||
"Minetest still enforces its own internal minimum, and enabling\n"
|
||||
"strict_protocol_version_checking will effectively override this."
|
||||
msgstr ""
|
||||
"古いクライアントが接続できないようにします。\n"
|
||||
"古いクライアントは新しいサーバーに接続してもクラッシュしないという\n"
|
||||
"意味で互換性がありますが、期待しているすべての新機能をサポート\n"
|
||||
"しているわけではありません。"
|
||||
"接続を許可する最も古いクライアントを定義します。\n"
|
||||
"古いクライアントは、"
|
||||
"新しいサーバーに接続するときにクラッシュしないという意味では\n"
|
||||
"互換性がありますが、期待されるすべての新機能をサポートしているわけではない可"
|
||||
"能性があります。\n"
|
||||
"これにより、strict_protocol_version_checking よりも細かい管理ができます。\n"
|
||||
"Minetest は依然として独自の内部最小値を強制しており、\n"
|
||||
"strict_protocol_version_checking はこれをが効果的に上書きします。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines areas where trees have apples."
|
||||
|
@ -3269,9 +3273,8 @@ msgid "Enable Bloom Debug"
|
|||
msgstr "ブルームデバッグを有効化"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Debanding"
|
||||
msgstr "ダメージ有効"
|
||||
msgstr "バンディング除去有効"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3300,9 +3303,8 @@ msgstr ""
|
|||
"ときはPCFフィルタリングを使用します。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Post Processing"
|
||||
msgstr "後処理"
|
||||
msgstr "後処理有効"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable Raytraced Culling"
|
||||
|
@ -3352,9 +3354,8 @@ msgid "Enable mouse wheel (scroll) for item selection in hotbar."
|
|||
msgstr "ホットバーの項目選択のためのマウスホイール(スクロール)を有効にします。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable random mod loading (mainly used for testing)."
|
||||
msgstr "ランダムなユーザー入力を有効にします (テストにのみ使用)。"
|
||||
msgstr "ランダムなMODの読み込みを有効にします(主にテストに使用されます)。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable random user input (only used for testing)."
|
||||
|
@ -3386,9 +3387,8 @@ msgstr ""
|
|||
"しているわけではありません。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable touchscreen"
|
||||
msgstr "タッチスクリーン"
|
||||
msgstr "タッチスクリーン有効"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3442,16 +3442,17 @@ msgstr "facedir回転メッシュのキャッシングを有効にします。"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables debug and error-checking in the OpenGL driver."
|
||||
msgstr ""
|
||||
msgstr "OpenGL ドライバでデバッグとエラーチェックを有効にします。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables the post processing pipeline."
|
||||
msgstr ""
|
||||
msgstr "後処理パイプラインを有効にします。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Enables touchscreen mode, allowing you to play the game with a touchscreen."
|
||||
msgstr ""
|
||||
msgstr "タッチスクリーンモードを有効にし、タッチスクリーンでゲームを遊ぶことができま"
|
||||
"す。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4374,15 +4375,14 @@ msgstr ""
|
|||
"- Opaque: 透明性を無効化"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Length of a server tick (the interval at which everything is generally "
|
||||
"updated),\n"
|
||||
"stated in seconds.\n"
|
||||
"Does not apply to sessions hosted from the client menu."
|
||||
msgstr ""
|
||||
"サーバーが時を刻む間隔とオブジェクトが通常ネットワーク上で更新される間隔を\n"
|
||||
"秒単位で定めます。"
|
||||
"サーバーが時を刻む長さ (通常、すべてが更新される間隔) を秒単位で定めます。\n"
|
||||
"クライアント メニューからホストされるセッションには適用されません。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Length of liquid waves."
|
||||
|
@ -4607,7 +4607,6 @@ msgid "Map generation attributes specific to Mapgen v5."
|
|||
msgstr "マップジェネレータ v5 に固有のマップ生成属性。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Map generation attributes specific to Mapgen v6.\n"
|
||||
"The 'snowbiomes' flag enables the new 5 biome system.\n"
|
||||
|
@ -4619,7 +4618,9 @@ msgstr ""
|
|||
"マップジェネレータ v6 に固有のマップ生成属性。\n"
|
||||
"'snowbiomes' フラグは新しい5つのバイオームシステムを有効にします。\n"
|
||||
"'snowbiomes' フラグを有効にすると、ジャングルが自動的に有効になり、\n"
|
||||
"'jungles' フラグは無視されます。"
|
||||
"'jungles' フラグは無視されます。\n"
|
||||
"'temples' フラグは砂漠の寺院の生成を無効にします。代わりに通常のダンジョンが"
|
||||
"生成されます。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4924,9 +4925,8 @@ msgid "Minimap scan height"
|
|||
msgstr "ミニマップのスキャン高さ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Minimum dig repetition interval"
|
||||
msgstr "設置の繰り返し間隔"
|
||||
msgstr "繰り返し掘る最小間隔"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Minimum limit of random number of large caves per mapchunk."
|
||||
|
@ -4997,9 +4997,8 @@ msgid "Mouse sensitivity multiplier."
|
|||
msgstr "マウス感度の倍率。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Movement threshold"
|
||||
msgstr "大きな洞窟のしきい値"
|
||||
msgstr "動きのしきい値"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Mud noise"
|
||||
|
@ -5152,9 +5151,8 @@ msgstr ""
|
|||
"フォームスペックが開かれているときはポーズメニューを開きません。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "OpenGL debug"
|
||||
msgstr "マップジェネレータのデバッグ"
|
||||
msgstr "OpenGLのデバッグ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Optional override for chat weblink color."
|
||||
|
@ -5287,13 +5285,12 @@ msgid "Proportion of large caves that contain liquid."
|
|||
msgstr "大きな洞窟の液体を含む割合です。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Protocol version minimum"
|
||||
msgstr "プロトコルのバージョンが一致していません。 "
|
||||
msgstr "プロトコルバージョンの最小限"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Punch gesture"
|
||||
msgstr ""
|
||||
msgstr "パンチのジェスチャー"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5314,7 +5311,7 @@ msgstr "ランダム入力"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Random mod load order"
|
||||
msgstr ""
|
||||
msgstr "MODのランダム読み込み"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Recent Chat Messages"
|
||||
|
@ -5523,7 +5520,6 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
|
|||
msgstr "参照 https://www.sqlite.org/pragma.html#pragma_synchronous"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select the antialiasing method to apply.\n"
|
||||
"\n"
|
||||
|
@ -5548,8 +5544,8 @@ msgstr ""
|
|||
"\n"
|
||||
"* 必須なし - アンチエイリアシングなし (既定)\n"
|
||||
"\n"
|
||||
"* FSAA - ハードウェア認証フルスクリーンアンチエイリアシング(シェーダーと互換"
|
||||
"性なし)\n"
|
||||
"* FSAA - ハードウェアによるフルスクリーンアンチエイリアシング\n"
|
||||
"(後処理およびアンダーサンプリングと互換性なし)\n"
|
||||
"別名 マルチサンプルアンチエイリアシング(MSAA)\n"
|
||||
"ブロックの縁を滑らかにしますが、テクスチャの内部には影響しません。\n"
|
||||
"このオプションを変更するには再起動が必要です。\n"
|
||||
|
@ -5560,8 +5556,8 @@ msgstr ""
|
|||
"処理速度と画質のバランスをとります。\n"
|
||||
"\n"
|
||||
"* SSAA - スーパーサンプリングアンチエイリアシング(シェーダーが必要)\n"
|
||||
"シーンの高解像度画像をレンダリングした後、スケールダウンしてエイリアシング効"
|
||||
"果を\n"
|
||||
"シーンの高解像度画像をレンダリングした後、"
|
||||
"スケールダウンしてエイリアシング効果を\n"
|
||||
"軽減します。これは最も遅く、最も正確な方式です。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
|
@ -5691,13 +5687,12 @@ msgstr ""
|
|||
"範囲: -1 から 1.0 まで"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Set the language. By default, the system language is used.\n"
|
||||
"A restart is required after changing this."
|
||||
msgstr ""
|
||||
"言語を設定してください。システム言語を使用するには空のままにします。\n"
|
||||
"変更後は再起動が必要です。"
|
||||
"言語を設定してください。初期状態ではシステム言語が使用されます。\n"
|
||||
"変更後の再起動が必要です。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5739,7 +5734,8 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")."
|
||||
msgstr ""
|
||||
msgstr "true "
|
||||
"に設定すると、ボリュームライティング効果(別名「Godrays」)が有効になります。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Set to true to enable waving leaves."
|
||||
|
@ -5784,15 +5780,13 @@ msgid "Shaders"
|
|||
msgstr "シェーダー"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Shaders allow advanced visual effects and may increase performance on some "
|
||||
"video\n"
|
||||
"cards."
|
||||
msgstr ""
|
||||
"シェーダーは高度な視覚効果を可能にし、ビデオカードによっては\n"
|
||||
"パフォーマンスが向上する可能性があります。\n"
|
||||
"これはOpenGLビデオバックエンドでのみ機能します。"
|
||||
"シェーダーにより高度な視覚効果が可能になり、一部のビデオ カードの\n"
|
||||
"パフォーマンスが向上する場合があります。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Shadow filter quality"
|
||||
|
@ -5909,13 +5903,12 @@ msgid "Smooth lighting"
|
|||
msgstr "滑らかな照明"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Smooths rotation of camera when in cinematic mode, 0 to disable. Enter "
|
||||
"cinematic mode by using the key set in Controls."
|
||||
msgstr ""
|
||||
"映画風モードでのカメラの旋回を滑らかにします。無効にするには 0。キー変更で設"
|
||||
"定されたキーを使用して映画風モードに切替えます。"
|
||||
"シネマティックモードでのカメラの旋回を滑らかにし、0 で無効にします。\n"
|
||||
"キー割り当てで設定されたキーを使用してシネマティックモードに切替えます。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5942,9 +5935,8 @@ msgid "Sound"
|
|||
msgstr "サウンド"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Sound Extensions Blacklist"
|
||||
msgstr "コンテンツDBフラグのブラックリスト"
|
||||
msgstr "音声拡張子のブラックリスト"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6151,7 +6143,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"The delay in milliseconds after which a touch interaction is considered a "
|
||||
"long tap."
|
||||
msgstr ""
|
||||
msgstr "タッチ操作がロングタップとみなされるまでのミリ秒単位の遅延。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6170,16 +6162,24 @@ msgid ""
|
|||
"Known from the classic Minetest mobile controls.\n"
|
||||
"Combat is more or less impossible."
|
||||
msgstr ""
|
||||
"プレイヤー/エンティティをパンチするためのジェスチャーです。\n"
|
||||
"これはゲームやMODによって上書きされる可能性があります。\n"
|
||||
"\n"
|
||||
"* ショートタップ\n"
|
||||
"使いやすく、名前は挙げませんが他のゲームでもよく知られています。\n"
|
||||
"\n"
|
||||
"* ロングタップ\n"
|
||||
"古典的な Minetest のモバイル版操作として知られています。\n"
|
||||
"戦闘はほぼ不可能です。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The identifier of the joystick to use"
|
||||
msgstr "使用するジョイスティックの識別子"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The length in pixels after which a touch interaction is considered movement."
|
||||
msgstr "タッチスクリーン操作が開始されるまでにかかるピクセル単位の長さ。"
|
||||
msgstr "タッチ操作が動きと見なされるまでのピクセル単位の長さです。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6194,11 +6194,12 @@ msgstr ""
|
|||
"既定は 1.0 (1/2 ノード) です。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The minimum time in seconds it takes between digging nodes when holding\n"
|
||||
"the dig button."
|
||||
msgstr "設置ボタンを押したままノードの設置を繰り返す秒単位の間隔。"
|
||||
msgstr ""
|
||||
"掘削ボタンを押したときにノードを掘る間にかかる秒単位の\n"
|
||||
"最小時間です。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The network interface that the server listens on."
|
||||
|
@ -6230,7 +6231,6 @@ msgstr ""
|
|||
"これは active_object_send_range_blocks と一緒に設定する必要があります。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The rendering back-end.\n"
|
||||
"Note: A restart is required after changing this!\n"
|
||||
|
@ -6238,9 +6238,9 @@ msgid ""
|
|||
"Shaders are supported by everything but OGLES1."
|
||||
msgstr ""
|
||||
"レンダリングのバックエンドです。\n"
|
||||
"注:これを変更した後は再起動が必要です。\n"
|
||||
"注:これを変更した後は再起動が必要です!\n"
|
||||
"デスクトップでは OpenGL が、Android では OGLES2 が規定です。\n"
|
||||
"シェーダーは OpenGL と OGLES2 (実験的) でサポートされています。"
|
||||
"シェーダーは OGLES1 以外のすべてでサポートされています。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6310,7 +6310,7 @@ msgstr "一緒に丘陵/山岳地帯の高さを定義する2Dノイズ4つの
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Threshold for long taps"
|
||||
msgstr ""
|
||||
msgstr "ロングタップのしきい値"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6370,9 +6370,8 @@ msgid "Tradeoffs for performance"
|
|||
msgstr "パフォーマンスのためのトレードオフ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Translucent liquids"
|
||||
msgstr "不透明な液体"
|
||||
msgstr "半透明な液体"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Transparency Sorting Distance"
|
||||
|
@ -6417,12 +6416,13 @@ msgstr ""
|
|||
"パフォーマンスの問題がある場合のみ、この設定を変更する必要があります。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"URL to JSON file which provides information about the newest Minetest "
|
||||
"release\n"
|
||||
"If this is empty the engine will never check for updates."
|
||||
msgstr "最新のMinetestリリースに関する情報を提供するJSONファイルへのURL"
|
||||
msgstr ""
|
||||
"最新の Minetest リリースに関する情報を提供する JSON ファイルへの URL\n"
|
||||
"これが空の場合、エンジンは更新をチェックしません。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "URL to the server list displayed in the Multiplayer Tab."
|
||||
|
@ -6631,7 +6631,7 @@ msgstr "音量"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Volume multiplier when the window is unfocused."
|
||||
msgstr ""
|
||||
msgstr "ウィンドウがフォーカスされていないときの音量乗数です。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6642,14 +6642,12 @@ msgstr ""
|
|||
"サウンド システムを有効にする必要があります。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volume when unfocused"
|
||||
msgstr "非アクティブまたはポーズメニュー表示中のFPS"
|
||||
msgstr "フォーカスされていないときの音量"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volumetric lighting"
|
||||
msgstr "滑らかな照明"
|
||||
msgstr "ボリュームライティング"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
|
|
@ -8,7 +8,7 @@ msgstr ""
|
|||
"Project-Id-Version: minetest\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2024-05-27 12:33+0000\n"
|
||||
"PO-Revision-Date: 2024-08-06 19:09+0000\n"
|
||||
"Last-Translator: Mićadźoridź <otto.grotovel@gmail.com>\n"
|
||||
"Language-Team: Komi <https://hosted.weblate.org/projects/minetest/minetest/"
|
||||
"kv/>\n"
|
||||
|
@ -17,7 +17,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6-dev\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -76,9 +76,8 @@ msgid "Command not available: "
|
|||
msgstr "Командаыс сиптӧма: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr "Командаяс йылысь юӧр босьтны"
|
||||
msgstr "Командаяс йылысь юӧр босьтны (-t: чатӧ гижӧм)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
|
@ -86,9 +85,8 @@ msgid ""
|
|||
msgstr "Гиж «.help <cmd>» содтӧд юӧрла али «.help all» — тыр лыддьӧгла."
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[all | <команда>]"
|
||||
msgstr "[all | <команда>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -151,11 +149,12 @@ msgid "Failed to download $1"
|
|||
msgstr "$1 бӧсьтӧм эз артмы"
|
||||
|
||||
#: builtin/mainmenu/content/contentdb.lua
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Failed to extract \"$1\" (insufficient disk space, unsupported file type or "
|
||||
"broken archive)"
|
||||
msgstr "«$1» перйыны эз артмы (уджавтӧм файл сикас али жугалӧм топӧдӧм файл)"
|
||||
msgstr ""
|
||||
"«$1» перйыны эз артмы (дискын пуктанін этша, уджавтӧм файл сикас али жугалӧм "
|
||||
"топӧдӧм файл)"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid ""
|
||||
|
@ -273,7 +272,6 @@ msgid "Already installed"
|
|||
msgstr "Нин пуктӧма"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
#, fuzzy
|
||||
msgid "Base Game:"
|
||||
msgstr "Медшӧр ворсӧм:"
|
||||
|
||||
|
@ -572,7 +570,6 @@ msgid "Seed"
|
|||
msgstr "Сид"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
#, fuzzy
|
||||
msgid "Smooth transition between biomes"
|
||||
msgstr "Биомъяс костын лайкыд вуджӧм"
|
||||
|
||||
|
@ -588,15 +585,15 @@ msgstr ""
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Temperate, Desert"
|
||||
msgstr "Шӧр климат, Пустыня"
|
||||
msgstr "Шӧр климата ин, Лыааин"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Temperate, Desert, Jungle"
|
||||
msgstr "Шӧр климат, Пустыня, Джунгли"
|
||||
msgstr "Шӧр климата ин, Лыааин, Джунгли"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
|
||||
msgstr "Шӧр климат, Пустыня, Джунгли, Тундра, Парма"
|
||||
msgstr "Шӧр климата ин, Лыааин, Джунгли, Тундра, Парма"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Terrain surface erosion"
|
||||
|
@ -692,7 +689,7 @@ msgstr ""
|
|||
|
||||
#: builtin/mainmenu/dlg_reinstall_mtg.lua
|
||||
msgid "Reinstall Minetest Game"
|
||||
msgstr "Minetest Game вылысь пуктыны"
|
||||
msgstr "Minetest Game выльысь пуктыны"
|
||||
|
||||
#: builtin/mainmenu/dlg_rename_modpack.lua
|
||||
msgid "Accept"
|
||||
|
@ -713,7 +710,6 @@ msgid "A new $1 version is available"
|
|||
msgstr "Выль $1 версия восьтӧма"
|
||||
|
||||
#: builtin/mainmenu/dlg_version_info.lua
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Installed version: $1\n"
|
||||
"New version: $2\n"
|
||||
|
@ -722,8 +718,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Пуктӧм версия: $1\n"
|
||||
"Выль версия: $2\n"
|
||||
"$3-ӧ пырӧй медвыль версия босьтӧмла да выль функцияяс да веськӧдӧмъяс йылысь "
|
||||
"тӧдмалӧмла."
|
||||
"Медвыль версия босьтӧм да выль функцияяс али лӧсьӧдӧмъяс йылысь тӧдмалӧм "
|
||||
"могысь пырӧй $3-ӧ."
|
||||
|
||||
#: builtin/mainmenu/dlg_version_info.lua
|
||||
msgid "Later"
|
||||
|
@ -743,7 +739,7 @@ msgstr "Лӧсьӧданін"
|
|||
|
||||
#: builtin/mainmenu/serverlistmgr.lua
|
||||
msgid "Public server list is disabled"
|
||||
msgstr "Восьса серверъяслӧн лыддьӧг кусӧдӧма"
|
||||
msgstr "Восьса серверъяслӧн лыддьӧгныс кусӧдӧма"
|
||||
|
||||
#: builtin/mainmenu/serverlistmgr.lua
|
||||
msgid "Try reenabling public serverlist and check your internet connection."
|
||||
|
@ -789,7 +785,6 @@ msgstr "Октавъяс"
|
|||
|
||||
#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Offset"
|
||||
msgstr "Вештӧм"
|
||||
|
||||
|
@ -803,14 +798,12 @@ msgid "Scale"
|
|||
msgstr "Бердӧг"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua
|
||||
#, fuzzy
|
||||
msgid "X spread"
|
||||
msgstr "X паськалӧм"
|
||||
msgstr "X кузя разалӧм"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua
|
||||
#, fuzzy
|
||||
msgid "Y spread"
|
||||
msgstr "Y паськалӧм"
|
||||
msgstr "Y кузя разалӧм"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua
|
||||
msgid "Z spread"
|
||||
|
@ -870,9 +863,8 @@ msgid "General"
|
|||
msgstr "Медшӧр"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
#, fuzzy
|
||||
msgid "Movement"
|
||||
msgstr "Вештӧм"
|
||||
msgstr "Вуджӧм"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
msgid "Reset setting to default"
|
||||
|
@ -956,12 +948,10 @@ msgid "Active renderer:"
|
|||
msgstr ""
|
||||
|
||||
#: builtin/mainmenu/tab_about.lua
|
||||
#, fuzzy
|
||||
msgid "Core Developers"
|
||||
msgstr "Медшӧр артмӧдысь"
|
||||
msgstr "Медшӧр артмӧдысьяс"
|
||||
|
||||
#: builtin/mainmenu/tab_about.lua
|
||||
#, fuzzy
|
||||
msgid "Core Team"
|
||||
msgstr "Медшӧр котыр"
|
||||
|
||||
|
@ -1112,9 +1102,8 @@ msgid "Start Game"
|
|||
msgstr "Ворсны кутны"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr "Мод пуктытӧдз тіянлы колӧ ворсӧм пуктыны"
|
||||
msgstr "Енкӧла вӧчтӧдз тіянлы колӧ пуктыны ворсӧм."
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1126,9 +1115,8 @@ msgstr ""
|
|||
|
||||
#. ~ PvP = Player versus Player
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
#, fuzzy
|
||||
msgid "Damage / PvP"
|
||||
msgstr "Воштӧм / PvP"
|
||||
msgstr "Доймӧм / PvP"
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Favorites"
|
||||
|
@ -1212,7 +1200,7 @@ msgstr "Ворсысьлӧн нимыс вывті кузь."
|
|||
|
||||
#: src/client/clientlauncher.cpp
|
||||
msgid "Please choose a name!"
|
||||
msgstr "Ен могысь, ним бӧрйы!"
|
||||
msgstr "Ен могысь, ним бӧрйӧй!"
|
||||
|
||||
#: src/client/clientlauncher.cpp
|
||||
msgid "Provided password file failed to open: "
|
||||
|
@ -1247,7 +1235,7 @@ msgstr "- РvP: "
|
|||
|
||||
#: src/client/game.cpp
|
||||
msgid "- Server Name: "
|
||||
msgstr "- Серверлӧн нимыс: "
|
||||
msgstr "- Серверлӧн ним: "
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "A serialization error occurred:"
|
||||
|
@ -1662,9 +1650,8 @@ msgid "Erase EOF"
|
|||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Execute"
|
||||
msgstr "Лэдзны"
|
||||
msgstr "Вӧчны"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
|
@ -1963,9 +1950,8 @@ msgid "Autoforward"
|
|||
msgstr ""
|
||||
|
||||
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Automatic jumping"
|
||||
msgstr "Автоматика чеччалӧм"
|
||||
msgstr "Автоматӧн чеччыштӧм"
|
||||
|
||||
#: src/gui/guiKeyChangeMenu.cpp
|
||||
msgid "Aux1"
|
||||
|
@ -1976,9 +1962,8 @@ msgid "Backward"
|
|||
msgstr "Бӧрӧ"
|
||||
|
||||
#: src/gui/guiKeyChangeMenu.cpp
|
||||
#, fuzzy
|
||||
msgid "Block bounds"
|
||||
msgstr "Блок доръяс"
|
||||
msgstr "Мапблоклӧн доръяс"
|
||||
|
||||
#: src/gui/guiKeyChangeMenu.cpp
|
||||
msgid "Change camera"
|
||||
|
@ -2057,9 +2042,8 @@ msgid "Prev. item"
|
|||
msgstr ""
|
||||
|
||||
#: src/gui/guiKeyChangeMenu.cpp
|
||||
#, fuzzy
|
||||
msgid "Range select"
|
||||
msgstr "Тыдалан шымыртӧм"
|
||||
msgstr "Тыдалан диапазон"
|
||||
|
||||
#: src/gui/guiKeyChangeMenu.cpp
|
||||
msgid "Right"
|
||||
|
@ -2360,7 +2344,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Admin name"
|
||||
msgstr "Веськӧдлысьлӧн нимыс"
|
||||
msgstr "Веськӧдлысьлӧн ним"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Advanced"
|
||||
|
@ -2435,9 +2419,8 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Arm inertia"
|
||||
msgstr "Лайкъялӧм ки"
|
||||
msgstr "Довкъялысь ки"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2527,7 +2510,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Biome API"
|
||||
msgstr "Биомлӧн API'ыс"
|
||||
msgstr "Биомлӧн API"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Biome noise"
|
||||
|
@ -2603,11 +2586,11 @@ msgstr "Рудӧглӧн шувгӧм"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise #1"
|
||||
msgstr "Рудӧглӧн шувгӧмыс #1"
|
||||
msgstr "Рудӧглӧн шувгӧм #1"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise #2"
|
||||
msgstr "Рудӧглӧн шувгӧмыс #2"
|
||||
msgstr "Рудӧглӧн шувгӧм #2"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave width"
|
||||
|
@ -2657,7 +2640,7 @@ msgstr "Чатлӧн командаяс"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Chat font size"
|
||||
msgstr "Чатса шрифтлӧн ыдждаыс"
|
||||
msgstr "Чатса шрифтлӧн ыджда"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Chat log level"
|
||||
|
@ -2743,7 +2726,7 @@ msgstr "Менюын кымӧръяс"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Colored fog"
|
||||
msgstr "Рӧма ру"
|
||||
msgstr "Рӧма руалӧм"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Colored shadows"
|
||||
|
@ -2808,15 +2791,15 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Console alpha"
|
||||
msgstr "Консольлӧн сӧдзлуныс"
|
||||
msgstr "Консольлӧн сӧдзлун"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Console color"
|
||||
msgstr "Консольлӧн рӧмыс"
|
||||
msgstr "Консольлӧн рӧм"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Console height"
|
||||
msgstr "Консольлӧн сутдас"
|
||||
msgstr "Консольлӧн судта"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Content Repository"
|
||||
|
@ -2832,7 +2815,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "ContentDB URL"
|
||||
msgstr "ContentDB-лӧн инпасыс"
|
||||
msgstr "ContentDB-лӧн инпас"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2878,7 +2861,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Crosshair color"
|
||||
msgstr "Витанторлӧн рӧмыс"
|
||||
msgstr "Витанторлӧн рӧм"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2895,9 +2878,8 @@ msgid "Debug log level"
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Debugging"
|
||||
msgstr "Ладвыв пуктӧм"
|
||||
msgstr "Лӧсьӧдӧм"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Dedicated server step"
|
||||
|
@ -3134,9 +3116,8 @@ msgid "Enable Bloom Debug"
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Debanding"
|
||||
msgstr "Ставсӧ ӧзтыны"
|
||||
msgstr "Лӧсьӧдӧм ӧзтыны"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3158,9 +3139,8 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Post Processing"
|
||||
msgstr "Контроллерсӧ ӧзтыны"
|
||||
msgstr "Содтӧд эффектъяслысь вӧччӧм ӧзтыны"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable Raytraced Culling"
|
||||
|
@ -3431,9 +3411,8 @@ msgid "Fog"
|
|||
msgstr "Ру"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Fog start"
|
||||
msgstr "Руалӧм суйӧр"
|
||||
msgstr "Руалӧмлӧн доръяс"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Font"
|
||||
|
@ -3457,7 +3436,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Font size"
|
||||
msgstr "Шрифтлӧн ыдждаыс"
|
||||
msgstr "Шрифтлӧн ыджда"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Font size divisible by"
|
||||
|
@ -4222,7 +4201,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Main menu script"
|
||||
msgstr "Медшӧр менюлӧн скриптыс"
|
||||
msgstr "Медшӧр менюлӧн скрипт"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4628,9 +4607,8 @@ msgid "Mouse sensitivity multiplier."
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Movement threshold"
|
||||
msgstr "Вештӧм"
|
||||
msgstr "Вуджан тагӧс"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Mud noise"
|
||||
|
@ -4816,9 +4794,8 @@ msgid "Player transfer distance"
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Poisson filtering"
|
||||
msgstr "Пуассонлӧн юклӧм"
|
||||
msgstr "Пуассон серти разӧдӧм"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Post Processing"
|
||||
|
@ -4867,9 +4844,8 @@ msgid "Proportion of large caves that contain liquid."
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Protocol version minimum"
|
||||
msgstr "Протоколлӧн версияыс оз лӧсяв. "
|
||||
msgstr "Протоколлӧн медічӧт версия"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Punch gesture"
|
||||
|
@ -5146,11 +5122,11 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Server URL"
|
||||
msgstr "Серверлӧн инпасыс"
|
||||
msgstr "Серверлӧн инпас"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Server address"
|
||||
msgstr "Серверлӧн доменыс"
|
||||
msgstr "Серверлӧн домен"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Server description"
|
||||
|
@ -5158,7 +5134,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Server name"
|
||||
msgstr "Серверлӧн нимыс"
|
||||
msgstr "Серверлӧн ним"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Server port"
|
||||
|
@ -5303,7 +5279,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Shadow strength gamma"
|
||||
msgstr "Вуджӧрлӧн гаммаыс"
|
||||
msgstr "Вуджӧрлӧн гамма"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Show debug info"
|
||||
|
@ -5751,9 +5727,8 @@ msgid "Tradeoffs for performance"
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Translucent liquids"
|
||||
msgstr "Сӧдзтӧм кизьӧрторъяс"
|
||||
msgstr "Сӧдзов кизьӧрторъяс"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Transparency Sorting Distance"
|
||||
|
@ -5800,7 +5775,6 @@ msgid "URL to the server list displayed in the Multiplayer Tab."
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Undersampling"
|
||||
msgstr "Субдискретизация"
|
||||
|
||||
|
@ -5888,7 +5862,6 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "User Interfaces"
|
||||
msgstr "Интерфейсъяс"
|
||||
|
||||
|
@ -6057,7 +6030,7 @@ msgstr "Лайкъялысь быдмӧгъяс"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Weblink color"
|
||||
msgstr "Ыстӧглӧн рӧмыс"
|
||||
msgstr "Ыстӧглӧн рӧм"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6220,7 +6193,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "cURL"
|
||||
msgstr "cURL"
|
||||
msgstr "URL"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "cURL file download timeout"
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3,8 +3,8 @@ msgstr ""
|
|||
"Project-Id-Version: Romanian (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2024-03-04 07:35+0000\n"
|
||||
"Last-Translator: Lars Müller <appgurulars@gmx.de>\n"
|
||||
"PO-Revision-Date: 2024-07-27 04:09+0000\n"
|
||||
"Last-Translator: AlexTECPlayz <alextec70@outlook.com>\n"
|
||||
"Language-Team: Romanian <https://hosted.weblate.org/projects/minetest/"
|
||||
"minetest/ro/>\n"
|
||||
"Language: ro\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -72,9 +72,8 @@ msgid "Command not available: "
|
|||
msgstr "Comandă indisponibilă: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr "Obține ajutor pentru comenzi"
|
||||
msgstr "Obțineți ajutor pentru comenzi (-t: răspuns în chat)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
|
@ -84,9 +83,8 @@ msgstr ""
|
|||
"complete."
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[all | <cmd>]"
|
||||
msgstr "[all | <cmd>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -121,7 +119,6 @@ msgid "Protocol version mismatch. "
|
|||
msgstr "Nepotrivire versiune protocol. "
|
||||
|
||||
#: builtin/mainmenu/common.lua
|
||||
#, fuzzy
|
||||
msgid "Server enforces protocol version $1. "
|
||||
msgstr "Serverul forțează versiunea protocolului $1. "
|
||||
|
||||
|
@ -150,11 +147,10 @@ msgid "Failed to download $1"
|
|||
msgstr "Nu s-a putut descărca $1"
|
||||
|
||||
#: builtin/mainmenu/content/contentdb.lua
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Failed to extract \"$1\" (insufficient disk space, unsupported file type or "
|
||||
"broken archive)"
|
||||
msgstr "Eroare la despachetarea „$1” (fișier incompatibil sau arhivă defectă)"
|
||||
msgstr "Eroare în extragerea „$1” (fișier incompatibil sau arhivă coruptă)"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid ""
|
||||
|
@ -186,7 +182,7 @@ msgstr "Descărcare..."
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "Eroare la obținerea dependențelor pentru pachet"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -464,7 +460,7 @@ msgstr "Decorațiuni"
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Desert temples"
|
||||
msgstr ""
|
||||
msgstr "Temple în deșert"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Development Test is meant for developers."
|
||||
|
@ -474,7 +470,7 @@ msgstr "„Development Test” este destinat dezvoltatorilor."
|
|||
msgid ""
|
||||
"Different dungeon variant generated in desert biomes (only if dungeons "
|
||||
"enabled)"
|
||||
msgstr ""
|
||||
msgstr "Variantă diferită de temniță generată în ecosisteme deșertice"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
|
@ -695,9 +691,8 @@ msgid "Minetest Game is no longer installed by default"
|
|||
msgstr "Minetest Game nu mai este instalat în mod implicit"
|
||||
|
||||
#: builtin/mainmenu/dlg_reinstall_mtg.lua
|
||||
#, fuzzy
|
||||
msgid "Reinstall Minetest Game"
|
||||
msgstr "Instalează un alt joc"
|
||||
msgstr "Reinstalați jocul Minetest"
|
||||
|
||||
#: builtin/mainmenu/dlg_rename_modpack.lua
|
||||
msgid "Accept"
|
||||
|
@ -774,9 +769,8 @@ msgid "Select file"
|
|||
msgstr "Selectează fila"
|
||||
|
||||
#: builtin/mainmenu/settings/components.lua
|
||||
#, fuzzy
|
||||
msgid "Set"
|
||||
msgstr "Selectează"
|
||||
msgstr "Selectați"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua
|
||||
msgid "(No description of setting given)"
|
||||
|
@ -878,9 +872,8 @@ msgid "Movement"
|
|||
msgstr "Mișscare"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
#, fuzzy
|
||||
msgid "Reset setting to default"
|
||||
msgstr "Restabilește valori implicite"
|
||||
msgstr "Restabiliți la valorile implicite"
|
||||
|
||||
#: builtin/mainmenu/settings/dlg_settings.lua
|
||||
msgid "Reset setting to default ($1)"
|
||||
|
@ -1000,18 +993,16 @@ msgid "Browse online content"
|
|||
msgstr "Căutați conținut online"
|
||||
|
||||
#: builtin/mainmenu/tab_content.lua
|
||||
#, fuzzy
|
||||
msgid "Browse online content [$1]"
|
||||
msgstr "Căutați conținut online"
|
||||
msgstr "Explorați conținut online [$1]"
|
||||
|
||||
#: builtin/mainmenu/tab_content.lua
|
||||
msgid "Content"
|
||||
msgstr "Conţinut"
|
||||
|
||||
#: builtin/mainmenu/tab_content.lua
|
||||
#, fuzzy
|
||||
msgid "Content [$1]"
|
||||
msgstr "Conţinut"
|
||||
msgstr "Conţinut [$1]"
|
||||
|
||||
#: builtin/mainmenu/tab_content.lua
|
||||
msgid "Disable Texture Pack"
|
||||
|
@ -1034,9 +1025,8 @@ msgid "Rename"
|
|||
msgstr "Redenumiți"
|
||||
|
||||
#: builtin/mainmenu/tab_content.lua
|
||||
#, fuzzy
|
||||
msgid "Update available?"
|
||||
msgstr "<indisponibilă>"
|
||||
msgstr "Actualizare disponibilă?"
|
||||
|
||||
#: builtin/mainmenu/tab_content.lua
|
||||
msgid "Use Texture Pack"
|
||||
|
@ -1075,15 +1065,16 @@ msgid "Install games from ContentDB"
|
|||
msgstr "Instalarea jocurilor din ContentDB"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "Minetest doesn't come with a game by default."
|
||||
msgstr "Minetest Game nu mai este instalat în mod implicit"
|
||||
msgstr "Minetest nu vine cu un joc preinstalat."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid ""
|
||||
"Minetest is a game-creation platform that allows you to play many different "
|
||||
"games."
|
||||
msgstr ""
|
||||
"Minetest este o platformă de creare de jocuri care vă permite să jucați "
|
||||
"multe jocuri diferite."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "New"
|
||||
|
@ -1118,9 +1109,8 @@ msgid "Start Game"
|
|||
msgstr "Începe Jocul"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr "Trebuie să instalezi un joc înainte să poți instala un mod"
|
||||
msgstr "Trebuie să instalați un joc înainte să puteți crea o lume."
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1294,10 +1284,8 @@ msgid "Camera update enabled"
|
|||
msgstr "Actualizarea camerei este activată"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Can't show block bounds (disabled by game or mod)"
|
||||
msgstr ""
|
||||
"Nu se pot afișa limitele blocurilor (dezactivate de modificare sau joc)"
|
||||
msgstr "Nu se pot afișa limitele blocurilor (dezactivate de mod sau joc)"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Change Password"
|
||||
|
@ -1336,7 +1324,6 @@ msgid "Continue"
|
|||
msgstr "Continuă"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Controls:\n"
|
||||
"No menu open:\n"
|
||||
|
@ -1351,18 +1338,18 @@ msgid ""
|
|||
"- touch&drag, tap 2nd finger\n"
|
||||
" --> place single item to slot\n"
|
||||
msgstr ""
|
||||
"Controale implicite:\n"
|
||||
"Niciun meniu vizibil:\n"
|
||||
"- apăsare unică: activare buton\n"
|
||||
"- apăsare dublă: plasare / utilizare\n"
|
||||
"- deget glisant: privește în jur\n"
|
||||
"Meniu / Inventar vizibil:\n"
|
||||
"- apăsare dublă (exterior):\n"
|
||||
" -> close\n"
|
||||
"- touch stack, slot pentru atingere:\n"
|
||||
" -> mută stiva\n"
|
||||
"- atingeți și trageți, atingeți al doilea deget\n"
|
||||
" -> plasați un singur element în slot\n"
|
||||
"Controale:\n"
|
||||
"Niciun meniu deschis:\n"
|
||||
"- glisați degetul: priviți în jur\n"
|
||||
"- apăsați: plasați/perforați/utilizați (implicit)\n"
|
||||
"- apăsați lung: săpați/utilizați (implicit)\n"
|
||||
"Meniu/inventar deschis:\n"
|
||||
"- dublă apăsare (în exterior):\n"
|
||||
" --> închideți\n"
|
||||
"- atingeți grămada, atingeți slotul:\n"
|
||||
" --> mutați grămada\n"
|
||||
"- atingeți și trageți, apăsați cu un al doilea deget\n"
|
||||
" --> plasați un singur articol în slot\n"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, c-format
|
||||
|
@ -1435,9 +1422,8 @@ msgid "Fog enabled"
|
|||
msgstr "Ceață activată"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Fog enabled by game or mod"
|
||||
msgstr "Zoom dezactivat în prezent de joc sau mod"
|
||||
msgstr "Ceață activată de joc sau mod"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Game info:"
|
||||
|
@ -1559,23 +1545,21 @@ msgid "Unable to listen on %s because IPv6 is disabled"
|
|||
msgstr "Ascultarea pe %s nu este posibilă pentru că IPv6 este dezactivat"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Unlimited viewing range disabled"
|
||||
msgstr "Interval de vizualizare nelimitat activat"
|
||||
msgstr "Distanță de vizibilitate nelimitată dezactivată"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Unlimited viewing range enabled"
|
||||
msgstr "Interval de vizualizare nelimitat activat"
|
||||
msgstr "Distanță de vizibilitate nelimitată activată"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Unlimited viewing range enabled, but forbidden by game or mod"
|
||||
msgstr "Rază infinită de vedere activată. dar interzisă de joc sau mod"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Viewing changed to %d (the minimum)"
|
||||
msgstr "Intervalul de vizualizare este cel puțin: %d"
|
||||
msgstr "Distanța de vizibilitate schimbată la %d (minimă)"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, c-format
|
||||
|
@ -1589,9 +1573,9 @@ msgid "Viewing range changed to %d"
|
|||
msgstr "Intervalul de vizualizare s-a modificat la %d"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Viewing range changed to %d (the maximum)"
|
||||
msgstr "Intervalul de vizualizare s-a modificat la %d"
|
||||
msgstr "Distanța de vizibilitate schimbată la %d (maximă)"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, c-format
|
||||
|
@ -1601,9 +1585,10 @@ msgstr ""
|
|||
"Vederea schimbată la %d (maximul), dar limitată la %d de către joc sau mod"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Viewing range changed to %d, but limited to %d by game or mod"
|
||||
msgstr "Intervalul de vizualizare s-a modificat la %d"
|
||||
msgstr ""
|
||||
"Distanța de vizibilitate schimbată la %d, dar limitată la %d de joc sau mod"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, c-format
|
||||
|
@ -1657,28 +1642,24 @@ msgstr "Înapoi"
|
|||
|
||||
#. ~ Usually paired with the Pause key
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Break Key"
|
||||
msgstr "Cheie pentru furiș"
|
||||
msgstr "Tasta de pauză"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Caps Lock"
|
||||
msgstr "Majuscule"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Clear Key"
|
||||
msgstr "Șterge"
|
||||
msgstr "Tasta de eliminare"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Control Key"
|
||||
msgstr "Control"
|
||||
msgstr "Tasta Control"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Delete Key"
|
||||
msgstr "Șterge"
|
||||
msgstr "Tasta de ștergere"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Down Arrow"
|
||||
|
@ -1729,9 +1710,8 @@ msgid "Insert"
|
|||
msgstr "Insert"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Left Arrow"
|
||||
msgstr "Ctrl Stânga"
|
||||
msgstr "Săgeată stânga"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Button"
|
||||
|
@ -1755,9 +1735,8 @@ msgstr "Windows Stânga"
|
|||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Menu Key"
|
||||
msgstr "Meniu"
|
||||
msgstr "Tastă Meniu"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
|
@ -1832,20 +1811,17 @@ msgid "OEM Clear"
|
|||
msgstr "Curățare OEM"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Page Down"
|
||||
msgstr "Pagină în jos"
|
||||
msgstr "Pagină jos"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Page Up"
|
||||
msgstr "Pagină sus"
|
||||
|
||||
#. ~ Usually paired with the Break key
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Pause Key"
|
||||
msgstr "Pauză"
|
||||
msgstr "Tasta Pauză"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Play"
|
||||
|
@ -1857,14 +1833,12 @@ msgid "Print"
|
|||
msgstr "Imprimare"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Return Key"
|
||||
msgstr "Înapoi"
|
||||
msgstr "Tasta Retur"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Right Arrow"
|
||||
msgstr "Ctrl Dreapta"
|
||||
msgstr "Săgeată dreapta"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Button"
|
||||
|
@ -1896,9 +1870,8 @@ msgid "Select"
|
|||
msgstr "Selectează"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Shift Key"
|
||||
msgstr "Shift"
|
||||
msgstr "Tasta Shift"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Sleep"
|
||||
|
@ -1929,9 +1902,8 @@ msgid "X Button 2"
|
|||
msgstr "X Butonul 2"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Zoom Key"
|
||||
msgstr "Mărire"
|
||||
msgstr "Tasta Mărire"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
|
@ -1952,13 +1924,13 @@ msgid "Minimap in texture mode"
|
|||
msgstr "Mini hartă în modul de textură"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Failed to compile the \"%s\" shader."
|
||||
msgstr "Pagina nu s-a putut deschide"
|
||||
msgstr "Eroare la compilarea shaderului \"%s\"."
|
||||
|
||||
#: src/client/shader.cpp
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "Shaderele sunt activate dar GLSL nu este suportat de driver."
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2155,16 +2127,15 @@ msgstr "apasă o tastă"
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "Deschideți"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "Deschideți URL?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
msgid "Unable to open URL"
|
||||
msgstr "Pagina nu s-a putut deschide"
|
||||
msgstr "URL nu s-a putut deschide"
|
||||
|
||||
#: src/gui/guiPasswordChange.cpp
|
||||
msgid "Change"
|
||||
|
@ -2215,9 +2186,9 @@ msgid "Name is taken. Please choose another name"
|
|||
msgstr "Numele este folosit. Vă rugăm să alegeți altul"
|
||||
|
||||
#: src/server.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s while shutting down: "
|
||||
msgstr "Se închide..."
|
||||
msgstr "%s în timp ce se închide: "
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2462,7 +2433,7 @@ msgstr "Avansat"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Allows liquids to be translucent."
|
||||
msgstr ""
|
||||
msgstr "Permiteți lichidelor să fie transparente."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3132,19 +3103,21 @@ msgstr "Definește zonele unde copacii pot avea mere."
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines areas with sandy beaches."
|
||||
msgstr ""
|
||||
msgstr "Definește zone cu plaje nisipoase."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines distribution of higher terrain and steepness of cliffs."
|
||||
msgstr ""
|
||||
msgstr "Definește distribuția de teren înalt și înclinația stâncilor."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines distribution of higher terrain."
|
||||
msgstr ""
|
||||
msgstr "Definește distribuția de teren înalt."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines full size of caverns, smaller values create larger caverns."
|
||||
msgstr ""
|
||||
"Definește mărimea totală a cavernelor, valori mai mici vor crea caverne mai "
|
||||
"mari."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3155,25 +3128,27 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines large-scale river channel structure."
|
||||
msgstr ""
|
||||
msgstr "Definește structura canalelor de scală mare."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines location and terrain of optional hills and lakes."
|
||||
msgstr ""
|
||||
msgstr "Definește locația și terenul dealurilor și lacurilor opționale."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines the base ground level."
|
||||
msgstr ""
|
||||
msgstr "Definește nivelul de bază al solului."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines the depth of the river channel."
|
||||
msgstr ""
|
||||
msgstr "Definește adâncimea canalul unui râu."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Defines the magnitude of bloom overexposure.\n"
|
||||
"Range: from 0.1 to 10.0, default: 1.0"
|
||||
msgstr ""
|
||||
"Definește magnitudinea supraexpunerii la strălucire.\n"
|
||||
"Interval: de la 0.1 la 10.0, implicit: 1.0"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
|
||||
|
|
|
@ -3,7 +3,7 @@ msgstr ""
|
|||
"Project-Id-Version: Russian (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2024-07-07 10:09+0000\n"
|
||||
"PO-Revision-Date: 2024-07-16 12:09+0000\n"
|
||||
"Last-Translator: BlackImpostor <SkyBuilderOFFICAL@yandex.ru>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/minetest/"
|
||||
"minetest/ru/>\n"
|
||||
|
@ -11,8 +11,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
|
@ -72,9 +72,8 @@ msgid "Command not available: "
|
|||
msgstr "Команда недоступна: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr "Получить справку по командам"
|
||||
msgstr "Получить справку по командам (-t: вывод в чат)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
|
@ -84,9 +83,8 @@ msgstr ""
|
|||
"help all» для вывода всего списка."
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[all | <команда>]"
|
||||
msgstr "[all | <команда>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -149,12 +147,12 @@ msgid "Failed to download $1"
|
|||
msgstr "Не удалось загрузить $1"
|
||||
|
||||
#: builtin/mainmenu/content/contentdb.lua
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Failed to extract \"$1\" (insufficient disk space, unsupported file type or "
|
||||
"broken archive)"
|
||||
msgstr ""
|
||||
"Не удалось извлечь «$1» (неподдерживаемый тип файла или повреждённый архив)"
|
||||
"Не удалось извлечь «$1» (недостаточно места на диске, неподдерживаемый тип "
|
||||
"файла или поврежденный архив)"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid ""
|
||||
|
@ -186,7 +184,7 @@ msgstr "Загрузка…"
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "Ошибка при получении зависимостей для дополнения"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -464,7 +462,7 @@ msgstr "Декорации"
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Desert temples"
|
||||
msgstr ""
|
||||
msgstr "Пустынные храмы"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Development Test is meant for developers."
|
||||
|
@ -475,6 +473,8 @@ msgid ""
|
|||
"Different dungeon variant generated in desert biomes (only if dungeons "
|
||||
"enabled)"
|
||||
msgstr ""
|
||||
"Другой вариант данжей, генерируемый в биомах пустыни (только если включены "
|
||||
"сами данжи)"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
|
@ -1069,15 +1069,16 @@ msgid "Install games from ContentDB"
|
|||
msgstr "Установить игры с ContentDB"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "Minetest doesn't come with a game by default."
|
||||
msgstr "Minetest Game больше не установлен по умолчанию"
|
||||
msgstr "Minetest Game больше не стоит по умолчанию."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid ""
|
||||
"Minetest is a game-creation platform that allows you to play many different "
|
||||
"games."
|
||||
msgstr ""
|
||||
"Minetest - это платформа для создания модификаций, которая позволяет вам "
|
||||
"играть во множество различных игр и устанавливать дополнения."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "New"
|
||||
|
@ -1112,9 +1113,8 @@ msgid "Start Game"
|
|||
msgstr "Начать игру"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr "Вам нужно установить игру, прежде чем вы сможете установить мод"
|
||||
msgstr "Вам требуется установить игру, прежде чем вы сможете создать мир."
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1328,7 +1328,6 @@ msgid "Continue"
|
|||
msgstr "Продолжить"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Controls:\n"
|
||||
"No menu open:\n"
|
||||
|
@ -1343,17 +1342,17 @@ msgid ""
|
|||
"- touch&drag, tap 2nd finger\n"
|
||||
" --> place single item to slot\n"
|
||||
msgstr ""
|
||||
"Управление по умолчанию:\n"
|
||||
"Меню скрыто:\n"
|
||||
"Управление:\n"
|
||||
"Нет открытых меню:\n"
|
||||
"- провести пальцем: осмотреться\n"
|
||||
"- нажатие: разместить/применить\n"
|
||||
"- долгое нажатие: копать/удар/применить\n"
|
||||
"В меню/инвентаре:\n"
|
||||
"В открытом меню:\n"
|
||||
"- двойное нажатие (вне меню)\n"
|
||||
" --> закрыть меню\n"
|
||||
"- нажать на стак, затем на слот:\n"
|
||||
" --> передвинуть стак\n"
|
||||
"- потащить стак, нажать вторым пальцем:\n"
|
||||
"- нажать и потащить стак, нажать вторым пальцем:\n"
|
||||
" --> положить один предмет в слот\n"
|
||||
|
||||
#: src/client/game.cpp
|
||||
|
@ -1427,9 +1426,8 @@ msgid "Fog enabled"
|
|||
msgstr "Туман включён"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Fog enabled by game or mod"
|
||||
msgstr "Приближение на данный момент отключено игрой или модом"
|
||||
msgstr "Туман включён игрой или модом"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Game info:"
|
||||
|
@ -1929,13 +1927,13 @@ msgid "Minimap in texture mode"
|
|||
msgstr "Миникарта в текстурном режиме"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Failed to compile the \"%s\" shader."
|
||||
msgstr "Не удалось открыть страницу"
|
||||
msgstr "Не удалось скомпилировать шейдер «%s»."
|
||||
|
||||
#: src/client/shader.cpp
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "Шейдеры включены, но GLSL не поддерживается драйвером."
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2131,16 +2129,15 @@ msgstr "нажмите клавишу"
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "Открыто"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "Открыть URL-адрес?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
msgid "Unable to open URL"
|
||||
msgstr "Не удалось открыть страницу"
|
||||
msgstr "Не удается открыть URL-адрес"
|
||||
|
||||
#: src/gui/guiPasswordChange.cpp
|
||||
msgid "Change"
|
||||
|
@ -2432,7 +2429,7 @@ msgstr "Дополнительно"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Allows liquids to be translucent."
|
||||
msgstr ""
|
||||
msgstr "Позволяет жидкостям быть прозрачными."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2502,6 +2499,16 @@ msgid ""
|
|||
"With OpenGL ES, dithering only works if the shader supports high\n"
|
||||
"floating-point precision and it may have a higher performance impact."
|
||||
msgstr ""
|
||||
"Примените сглаживание, чтобы уменьшить искажения цветовых полос.\n"
|
||||
"Сглаживание значительно увеличивает размер\n"
|
||||
"скриншотов, сжатых без потерь, и работает некорректно, если дисплей или "
|
||||
"операционная система\n"
|
||||
"выполняют дополнительное сглаживание или если цветовые каналы не квантованы\n"
|
||||
"до 8 бит.\n"
|
||||
"В OpenGL ES сглаживание работает только в том случае, если шейдер "
|
||||
"поддерживает высокую\n"
|
||||
"точность с плавающей запятой, и это может оказать более высокое влияние на "
|
||||
"производительность."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Arm inertia"
|
||||
|
@ -2520,7 +2527,6 @@ msgid "Ask to reconnect after crash"
|
|||
msgstr "Запрашивать переподключение после краха"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"At this distance the server will aggressively optimize which blocks are sent "
|
||||
"to\n"
|
||||
|
@ -2532,17 +2538,19 @@ msgid ""
|
|||
"optimization.\n"
|
||||
"Stated in MapBlocks (16 nodes)."
|
||||
msgstr ""
|
||||
"На этом расстоянии сервер будет агрессивно оптимизировать то, какие\n"
|
||||
"мапблоки будут отправлены клиентам.\n"
|
||||
"Малые значения могут увеличить производительность за счёт заметных\n"
|
||||
"проблем визуализации (некоторые фрагменты не будут отрисовываться\n"
|
||||
"под водой, в пещерах, а иногда и на суше).\n"
|
||||
"Установка этого значения больше, чем max_block_send_distance\n"
|
||||
"отключит эту оптимизацию.\n"
|
||||
"Указывается в мапблоках карты (16 нод)."
|
||||
"На таком расстоянии сервер будет активно оптимизировать, какие блоки будут "
|
||||
"отправляться\n"
|
||||
"клиентам.\n"
|
||||
"Небольшие значения потенциально значительно повышают производительность за "
|
||||
"счет видимых\n"
|
||||
"сбоев в рендеринге (некоторые блоки могут отображаться некорректно в шахтах)."
|
||||
"\n"
|
||||
"Установка значения, превышающего значение max_block_send_distance, отключает "
|
||||
"эту\n"
|
||||
"оптимизацию.\n"
|
||||
"Указано в MapBlocks (16 нод)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"At this distance the server will perform a simpler and cheaper occlusion "
|
||||
"check.\n"
|
||||
|
@ -2552,14 +2560,13 @@ msgid ""
|
|||
"This is especially useful for very large viewing range (upwards of 500).\n"
|
||||
"Stated in MapBlocks (16 nodes)."
|
||||
msgstr ""
|
||||
"На этом расстоянии сервер будет агрессивно оптимизировать то, какие\n"
|
||||
"мапблоки будут отправлены клиентам.\n"
|
||||
"Малые значения могут увеличить производительность за счёт заметных\n"
|
||||
"проблем визуализации (некоторые фрагменты не будут отрисовываться\n"
|
||||
"под водой, в пещерах, а иногда и на суше).\n"
|
||||
"Установка этого значения больше, чем max_block_send_distance\n"
|
||||
"отключит эту оптимизацию.\n"
|
||||
"Указывается в мапблоках карты (16 нод)."
|
||||
"На таком расстоянии сервер выполнит более простую и дешевую проверку "
|
||||
"окклюзии.\n"
|
||||
"Меньшие значения потенциально повышают производительность за счет временно "
|
||||
"заметных\n"
|
||||
"сбоев в рендеринге (пропущенных блоков).\n"
|
||||
"Это особенно полезно при очень большом диапазоне просмотра (более 500).\n"
|
||||
"Указано в MapBlocks (16 узлов)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Audio"
|
||||
|
@ -2622,9 +2629,8 @@ msgid "Biome noise"
|
|||
msgstr "Шум биомов"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Block cull optimize distance"
|
||||
msgstr "Дистанция оптимизирования отправки мапблока"
|
||||
msgstr "Отбраковка блоков оптимизирует расстояние"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Block send optimize distance"
|
||||
|
@ -2847,6 +2853,10 @@ msgid ""
|
|||
"Comma-separated list of AL and ALC extensions that should not be used.\n"
|
||||
"Useful for testing. See al_extensions.[h,cpp] for details."
|
||||
msgstr ""
|
||||
"Список разделенных запятыми расширений AL и ALC, которые не следует "
|
||||
"использовать.\n"
|
||||
"Полезно для тестирования. Подробности смотрите в разделе "
|
||||
"al_extensions.[h,cpp]."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3069,7 +3079,6 @@ msgstr ""
|
|||
"но также использует больше ресурсов."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Define the oldest clients allowed to connect.\n"
|
||||
"Older clients are compatible in the sense that they will not crash when "
|
||||
|
@ -3081,11 +3090,16 @@ msgid ""
|
|||
"Minetest still enforces its own internal minimum, and enabling\n"
|
||||
"strict_protocol_version_checking will effectively override this."
|
||||
msgstr ""
|
||||
"Включите, чтобы запретить подключение старых клиентов.\n"
|
||||
"Старые клиенты совместимы в том смысле, что они не будут крашиться при "
|
||||
"подключении\n"
|
||||
"к новым серверам, однако они могут не поддерживать всех новых функций, "
|
||||
"которые вы ожидаете."
|
||||
"Определите, к каким самым старым клиентам разрешено подключаться.\n"
|
||||
"Старые клиенты совместимы в том смысле, что они не будут выходить из строя "
|
||||
"при подключении\n"
|
||||
"к новым серверам, но они могут поддерживать не все новые функции, которые вы "
|
||||
"ожидаете.\n"
|
||||
"Это позволяет осуществлять более детальный контроль, чем "
|
||||
"strict_protocol_version_checking.\n"
|
||||
"Minetest по-прежнему применяет свой собственный внутренний минимум, и "
|
||||
"включение\n"
|
||||
"strict_protocol_version_checking эффективно отменит это."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines areas where trees have apples."
|
||||
|
@ -3291,9 +3305,8 @@ msgid "Enable Bloom Debug"
|
|||
msgstr "Включить отладку свечения"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Debanding"
|
||||
msgstr "Включить урон"
|
||||
msgstr "Включить Дебандинг"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3322,9 +3335,8 @@ msgstr ""
|
|||
"противном случае используется фильтрация PCF."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Post Processing"
|
||||
msgstr "Постобработка"
|
||||
msgstr "Включить Постобработку"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable Raytraced Culling"
|
||||
|
@ -3376,9 +3388,9 @@ msgid "Enable mouse wheel (scroll) for item selection in hotbar."
|
|||
msgstr "Включает колёсико мыши (прокрутку) для выбора предмета в хотбаре."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable random mod loading (mainly used for testing)."
|
||||
msgstr "Включить случайный ввод пользователя (только для тестов)."
|
||||
msgstr ""
|
||||
"Включите случайную загрузку модов (в основном используемых для тестирования)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable random user input (only used for testing)."
|
||||
|
@ -3411,9 +3423,8 @@ msgstr ""
|
|||
"которые вы ожидаете."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable touchscreen"
|
||||
msgstr "Сенсорный экран"
|
||||
msgstr "Включить сенсорный экран"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3468,16 +3479,18 @@ msgstr "Включает кэширование повёрнутых мешей.
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables debug and error-checking in the OpenGL driver."
|
||||
msgstr ""
|
||||
msgstr "Включает отладку и проверку ошибок в драйвере OpenGL."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables the post processing pipeline."
|
||||
msgstr ""
|
||||
msgstr "Включает конвейер последующей обработки."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Enables touchscreen mode, allowing you to play the game with a touchscreen."
|
||||
msgstr ""
|
||||
"Включает сенсорный режим, позволяющий играть в игру с помощью сенсорного "
|
||||
"экрана."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4400,15 +4413,15 @@ msgstr ""
|
|||
"- Opaque: прозачность отключена"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Length of a server tick (the interval at which everything is generally "
|
||||
"updated),\n"
|
||||
"stated in seconds.\n"
|
||||
"Does not apply to sessions hosted from the client menu."
|
||||
msgstr ""
|
||||
"Длительность шага сервера и интервал, с которым объекты обычно\n"
|
||||
"обновляются по сети, в секундах."
|
||||
"Длительность тика сервера (интервал, с которым обычно все обновляется),\n"
|
||||
"указанная в секундах.\n"
|
||||
"Не применяется к сеансам, размещенным из клиентского меню."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Length of liquid waves."
|
||||
|
@ -4636,7 +4649,6 @@ msgid "Map generation attributes specific to Mapgen v5."
|
|||
msgstr "Атрибуты генерации для мапгена v5."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Map generation attributes specific to Mapgen v6.\n"
|
||||
"The 'snowbiomes' flag enables the new 5 biome system.\n"
|
||||
|
@ -4645,10 +4657,12 @@ msgid ""
|
|||
"The 'temples' flag disables generation of desert temples. Normal dungeons "
|
||||
"will appear instead."
|
||||
msgstr ""
|
||||
"Атрибуты генерации для мапгена v6.\n"
|
||||
"Параметр «snowbiomes» (снежные биомы) включает новую систему с 5 биомами.\n"
|
||||
"Если «snowbiomes» включён, то автоматически активируются джунгли,\n"
|
||||
"а флаг «jungles» не учитывается."
|
||||
"Атрибуты создания карт, специфичные для Mapgen v6.\n"
|
||||
"Флаг «snowbiomes» включает новую систему 5 биомов.\n"
|
||||
"При включенном флаге «snowbiomes» автоматически включаются джунгли, а\n"
|
||||
"флаг «jungles» игнорируется.\n"
|
||||
"Флаг «temples» отключает создание храмов в пустыне. Вместо них появятся "
|
||||
"обычные данжи."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4954,9 +4968,8 @@ msgid "Minimap scan height"
|
|||
msgstr "Высота сканирования миникарты"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Minimum dig repetition interval"
|
||||
msgstr "Интервал повторного размещения"
|
||||
msgstr "Минимальный интервал повторения раскопок"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Minimum limit of random number of large caves per mapchunk."
|
||||
|
@ -5027,9 +5040,8 @@ msgid "Mouse sensitivity multiplier."
|
|||
msgstr "Множитель чувствительности мыши."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Movement threshold"
|
||||
msgstr "Порог пещер"
|
||||
msgstr "Порог перемещения"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Mud noise"
|
||||
|
@ -5184,9 +5196,8 @@ msgstr ""
|
|||
"Не срабатывает, если какая-либо форма уже открыта."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "OpenGL debug"
|
||||
msgstr "Отладка мапгена"
|
||||
msgstr "Отладка OpenGL"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Optional override for chat weblink color."
|
||||
|
@ -5322,13 +5333,12 @@ msgid "Proportion of large caves that contain liquid."
|
|||
msgstr "Соотношение больших пещер, которые содержат жидкости."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Protocol version minimum"
|
||||
msgstr "Несоответствие версии протокола. "
|
||||
msgstr "Минимальная версия протокола"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Punch gesture"
|
||||
msgstr ""
|
||||
msgstr "Жест удара кулаком"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5349,7 +5359,7 @@ msgstr "Случайный ввод"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Random mod load order"
|
||||
msgstr ""
|
||||
msgstr "Случайный порядок загрузки мода"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Recent Chat Messages"
|
||||
|
@ -5560,7 +5570,6 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
|
|||
msgstr "См. http://www.sqlite.org/pragma.html#pragma_synchronous"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select the antialiasing method to apply.\n"
|
||||
"\n"
|
||||
|
@ -5583,22 +5592,25 @@ msgid ""
|
|||
msgstr ""
|
||||
"Выберите метод сглаживания, который необходимо применить.\n"
|
||||
"\n"
|
||||
"* None - сглаживание отсутствует (по умолчанию)\n"
|
||||
"* * Нет - сглаживание отсутствует (по умолчанию).\n"
|
||||
"\n"
|
||||
"* FSAA - аппаратное полноэкранное сглаживание (несовместимое с шейдерами)\n"
|
||||
", известное как сглаживание с несколькими выборками (MSAA)\n"
|
||||
"* FSAA - Аппаратное полноэкранное сглаживание\n"
|
||||
"(несовместимое с постобработкой и недостаточной дискретизацией)\n"
|
||||
", аналогичное сглаживанию с несколькими выборками (MSAA)\n"
|
||||
"Сглаживает края блоков, но не влияет на внутреннюю часть текстур.\n"
|
||||
"Для изменения этого параметра требуется перезагрузка.\n"
|
||||
"\n"
|
||||
"* FXAA - быстрое приблизительное сглаживание (требуются шейдеры)\n"
|
||||
"Применяет фильтр постобработки для обнаружения и сглаживания "
|
||||
"* FXAA - Быстрое приблизительное сглаживание (требуется использование "
|
||||
"шейдеров)\n"
|
||||
"Применяется фильтр последующей обработки для обнаружения и сглаживания "
|
||||
"высококонтрастных краев.\n"
|
||||
"Обеспечивает баланс между скоростью и качеством изображения.\n"
|
||||
"\n"
|
||||
"* SSAA - сглаживание с супер-выборкой (требуются шейдеры)\n"
|
||||
"Рендерит изображение сцены с более высоким разрешением, затем уменьшает "
|
||||
"масштаб,\n"
|
||||
"чтобы уменьшить эффекты наложения. Это самый медленный и точный метод."
|
||||
"* SSAA - сглаживание с использованием суперсэмплирования (требуются шейдеры)"
|
||||
"\n"
|
||||
"Визуализирует изображение сцены с более высоким разрешением, затем уменьшает "
|
||||
"масштаб, чтобы уменьшить\n"
|
||||
"эффекты наложения. Это самый медленный и точный метод."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Selection box border color (R,G,B)."
|
||||
|
@ -5727,13 +5739,12 @@ msgstr ""
|
|||
"Диапазон: от -1 до 1.0"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Set the language. By default, the system language is used.\n"
|
||||
"A restart is required after changing this."
|
||||
msgstr ""
|
||||
"Устанавливает язык. Оставьте пустым, чтобы использовать системный язык.\n"
|
||||
"Требует перезапуска после изменения."
|
||||
"Установит язык. По умолчанию используется язык системы.\n"
|
||||
"После изменения этого параметра требуется перезагрузка."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5776,6 +5787,8 @@ msgstr ""
|
|||
#: src/settings_translation_file.cpp
|
||||
msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")."
|
||||
msgstr ""
|
||||
"Установите значение true, чтобы включить эффект объемного освещения (он же "
|
||||
"\"Божественные лучи\")."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Set to true to enable waving leaves."
|
||||
|
@ -5822,16 +5835,14 @@ msgid "Shaders"
|
|||
msgstr "Шейдеры"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Shaders allow advanced visual effects and may increase performance on some "
|
||||
"video\n"
|
||||
"cards."
|
||||
msgstr ""
|
||||
"Шейдеры позволяют использовать дополнительные визуальные эффекты и могут "
|
||||
"увеличить\n"
|
||||
"производительность некоторых видеоплат.\n"
|
||||
"Работают только с движком отрисовки OpenGL."
|
||||
"Шейдеры позволяют создавать расширенные визуальные эффекты и могут повысить "
|
||||
"производительность некоторых\n"
|
||||
"видеокарт."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Shadow filter quality"
|
||||
|
@ -5952,14 +5963,13 @@ msgid "Smooth lighting"
|
|||
msgstr "Мягкое освещение"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Smooths rotation of camera when in cinematic mode, 0 to disable. Enter "
|
||||
"cinematic mode by using the key set in Controls."
|
||||
msgstr ""
|
||||
"Плавное вращение камеры в кинематографичном режиме, 0 для отключения. "
|
||||
"Включите кинематографичный режим клавишей, определённой в настройках "
|
||||
"управления."
|
||||
"Сглаживает поворот камеры в кинематографическом режиме, 0 для отключения. "
|
||||
"Войдите в кинематографический режим, используя клавишу, установленную в "
|
||||
"элементах управления."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5986,9 +5996,8 @@ msgid "Sound"
|
|||
msgstr "Звук"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Sound Extensions Blacklist"
|
||||
msgstr "Чёрный список меток ContentDB"
|
||||
msgstr "Черный список Расширений Звука"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6204,6 +6213,8 @@ msgid ""
|
|||
"The delay in milliseconds after which a touch interaction is considered a "
|
||||
"long tap."
|
||||
msgstr ""
|
||||
"Задержка в миллисекундах, после которой сенсорное взаимодействие считается "
|
||||
"длительным нажатием."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6223,17 +6234,26 @@ msgid ""
|
|||
"Known from the classic Minetest mobile controls.\n"
|
||||
"Combat is more or less impossible."
|
||||
msgstr ""
|
||||
"Жест, обозначающий удар по игроку/объекту.\n"
|
||||
"Его можно изменить в играх и модах.\n"
|
||||
"\n"
|
||||
"* короткий удар\n"
|
||||
"Прост в использовании и хорошо известен по другим играм, названия которых не "
|
||||
"указываются.\n"
|
||||
"\n"
|
||||
"* длинный удар\n"
|
||||
"Известен по классическому мобильному элементу управления Minetest.\n"
|
||||
"Сражение более или менее невозможно."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The identifier of the joystick to use"
|
||||
msgstr "Идентификатор используемого контроллера"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The length in pixels after which a touch interaction is considered movement."
|
||||
msgstr ""
|
||||
"Расстояние в пикселях, с которого начинается действие от сенсорного экрана."
|
||||
"Длина в пикселях, после которой сенсорное взаимодействие считается движением."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6248,13 +6268,13 @@ msgstr ""
|
|||
"Значение по умолчанию — 1.0 (1/2 ноды)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The minimum time in seconds it takes between digging nodes when holding\n"
|
||||
"the dig button."
|
||||
msgstr ""
|
||||
"Задержка в секундах перед повторным размещением ноды\n"
|
||||
"при удержании клавиши размещения."
|
||||
"Минимальное время в секундах, которое требуется между копающими узлами при "
|
||||
"удерживании\n"
|
||||
"кнопки копать."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The network interface that the server listens on."
|
||||
|
@ -6287,17 +6307,17 @@ msgstr ""
|
|||
"Это должно быть настроено вместе с active_object_send_range_blocks."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The rendering back-end.\n"
|
||||
"Note: A restart is required after changing this!\n"
|
||||
"OpenGL is the default for desktop, and OGLES2 for Android.\n"
|
||||
"Shaders are supported by everything but OGLES1."
|
||||
msgstr ""
|
||||
"Движок отрисовки.\n"
|
||||
"Примечение: после изменения этой настройки требуется перезапуск!\n"
|
||||
"OpenGL по умолчанию для компьютеров и OGLES2 для Android.\n"
|
||||
"Шейдеры поддерживаются OpenGL и OGLES2 (экспериментально)."
|
||||
"Серверная часть рендеринга.\n"
|
||||
"Примечание: После изменения этого параметра требуется перезагрузка!\n"
|
||||
"По умолчанию для настольных компьютеров используется OpenGL, а для Android - "
|
||||
"OGLES2.\n"
|
||||
"Шейдеры поддерживаются всеми, кроме OGLES1."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6377,7 +6397,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Threshold for long taps"
|
||||
msgstr ""
|
||||
msgstr "Порог для длинных нажатий"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6438,9 +6458,8 @@ msgid "Tradeoffs for performance"
|
|||
msgstr "Компромиссы для производительности"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Translucent liquids"
|
||||
msgstr "Непрозрачные жидкости"
|
||||
msgstr "Полупрозрачные жидкости"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Transparency Sorting Distance"
|
||||
|
@ -6487,14 +6506,14 @@ msgstr ""
|
|||
"производительностью."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"URL to JSON file which provides information about the newest Minetest "
|
||||
"release\n"
|
||||
"If this is empty the engine will never check for updates."
|
||||
msgstr ""
|
||||
"Адрес к файлу JSON, который предоставляет сведения о последнем выпуске "
|
||||
"Minetest"
|
||||
"URL-адрес файла JSON, который предоставляет информацию о последней версии "
|
||||
"Minetest\n"
|
||||
"Если поле не заполнено, движок никогда не будет проверять наличие обновлений."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "URL to the server list displayed in the Multiplayer Tab."
|
||||
|
@ -6709,7 +6728,7 @@ msgstr "Громкость"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Volume multiplier when the window is unfocused."
|
||||
msgstr ""
|
||||
msgstr "Увеличивается громкость, когда окно не сфокусировано."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6720,14 +6739,12 @@ msgstr ""
|
|||
"Требует включенной звуковой системы."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volume when unfocused"
|
||||
msgstr "Максимум FPS при паузе или вне фокуса"
|
||||
msgstr "Громкость при расфокусировке"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volumetric lighting"
|
||||
msgstr "Мягкое освещение"
|
||||
msgstr "Объемное освещение"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
|
|
@ -3,17 +3,17 @@ msgstr ""
|
|||
"Project-Id-Version: Ukrainian (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2024-06-23 19:09+0000\n"
|
||||
"Last-Translator: YearOfFuture <yearoffuture@gmail.com>\n"
|
||||
"PO-Revision-Date: 2024-08-04 22:09+0000\n"
|
||||
"Last-Translator: Yof <Yof@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/minetest/"
|
||||
"minetest/uk/>\n"
|
||||
"Language: uk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.6-rc\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -72,9 +72,8 @@ msgid "Command not available: "
|
|||
msgstr "Команда недоступна: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr "Отримати довідку щодо команд"
|
||||
msgstr "Отримати довідку щодо команд (-t: вивести у чаті)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
|
@ -84,9 +83,8 @@ msgstr ""
|
|||
"all', щоб перелічити все."
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[all | <команда>]"
|
||||
msgstr "[all | <команда>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -149,12 +147,12 @@ msgid "Failed to download $1"
|
|||
msgstr "Не вдалося завантажити $1"
|
||||
|
||||
#: builtin/mainmenu/content/contentdb.lua
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Failed to extract \"$1\" (insufficient disk space, unsupported file type or "
|
||||
"broken archive)"
|
||||
msgstr ""
|
||||
"Не вдалося витягти \"$1\" (непідтримуваний тип файлу або пошкоджений архів)"
|
||||
"Не вдалося витягти \"$1\" (недостатнє місце на диску, непідтримуваний тип "
|
||||
"файлу або пошкоджений архів)"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid ""
|
||||
|
@ -186,7 +184,7 @@ msgstr "Завантаження..."
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "Помилка при отриманні залежностей для пакунку"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -464,7 +462,7 @@ msgstr "Декорації"
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Desert temples"
|
||||
msgstr ""
|
||||
msgstr "Храми пустель"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Development Test is meant for developers."
|
||||
|
@ -475,6 +473,8 @@ msgid ""
|
|||
"Different dungeon variant generated in desert biomes (only if dungeons "
|
||||
"enabled)"
|
||||
msgstr ""
|
||||
"Інший варіант підземель, що генерується у біомах пустелі (тільки якщо "
|
||||
"увімкнені підземелля)"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
|
@ -1068,15 +1068,15 @@ msgid "Install games from ContentDB"
|
|||
msgstr "Встановити ігри з ContentDB"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "Minetest doesn't come with a game by default."
|
||||
msgstr "Minetest Game більше не встановлюється за замовчуванням"
|
||||
msgstr "Minetest більше не встановлювається з грою."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid ""
|
||||
"Minetest is a game-creation platform that allows you to play many different "
|
||||
"games."
|
||||
msgstr ""
|
||||
"Minetest – це ігрова платформа, що дозволяє вам грати у багато різних ігор."
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "New"
|
||||
|
@ -1111,9 +1111,8 @@ msgid "Start Game"
|
|||
msgstr "Почати гру"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr "Вам потрібно встановити гру перед тим, як встановлювати мод"
|
||||
msgstr "Вам потрібно встановити гру перед ти, як створювати світ."
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1327,7 +1326,6 @@ msgid "Continue"
|
|||
msgstr "Продовжити"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Controls:\n"
|
||||
"No menu open:\n"
|
||||
|
@ -1343,16 +1341,16 @@ msgid ""
|
|||
" --> place single item to slot\n"
|
||||
msgstr ""
|
||||
"Керування:\n"
|
||||
"Коли меню не відображається:\n"
|
||||
"- провести пальцем: роззирнутися\n"
|
||||
"- дотик: встановити/використати\n"
|
||||
"- довгий дотик: копати/вдарити/використати\n"
|
||||
"Коли відображається меню або інвертар:\n"
|
||||
"- дотикнутися двічі (поза межами):\n"
|
||||
"Коли немає відкритих меню:\n"
|
||||
"- проведення пальцем: роззирнутися\n"
|
||||
"- дотик: встановити/вдарити/використати\n"
|
||||
"- довгий дотик: копати/використати\n"
|
||||
"У відкритому меню або інвертарі:\n"
|
||||
"- подвійний дотик (поза межами):\n"
|
||||
" --> закрити\n"
|
||||
"- Торкнутися купи, торкнутися комірки:\n"
|
||||
"- доторкання купи, доторкання комірки\n"
|
||||
" --> перемістити купу\n"
|
||||
"- Торкнутися і тягнути, дотикнутися другим пальцем\n"
|
||||
"- доторкання і перетягування, дотик другим пальцем\n"
|
||||
" --> помістити один предмет у комірку\n"
|
||||
|
||||
#: src/client/game.cpp
|
||||
|
@ -1426,9 +1424,8 @@ msgid "Fog enabled"
|
|||
msgstr "Туман увімкнено"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Fog enabled by game or mod"
|
||||
msgstr "Наближення (бінокль) вимкнено грою або модифікацією"
|
||||
msgstr "Туман увімкнено грою або модом"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Game info:"
|
||||
|
@ -1926,13 +1923,13 @@ msgid "Minimap in texture mode"
|
|||
msgstr "Мінімапа в текстурному режимі"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Failed to compile the \"%s\" shader."
|
||||
msgstr "Не вдалося завантажити вебсторінку"
|
||||
msgstr "Не вдалося скомпілювати шейдер \"%s\"."
|
||||
|
||||
#: src/client/shader.cpp
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "Відтінювачі увімкнені, але GLSL не підтримується драйвером."
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2129,16 +2126,15 @@ msgstr "натисніть клавішу"
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "Відкрити"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "Відкрити URL?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
msgid "Unable to open URL"
|
||||
msgstr "Не вдалося завантажити вебсторінку"
|
||||
msgstr "Не вдалося відкрити URL"
|
||||
|
||||
#: src/gui/guiPasswordChange.cpp
|
||||
msgid "Change"
|
||||
|
@ -2426,7 +2422,7 @@ msgstr "Додатково"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Allows liquids to be translucent."
|
||||
msgstr ""
|
||||
msgstr "Дозволяє рідинам бути напівпрозорими."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2496,6 +2492,13 @@ msgid ""
|
|||
"With OpenGL ES, dithering only works if the shader supports high\n"
|
||||
"floating-point precision and it may have a higher performance impact."
|
||||
msgstr ""
|
||||
"Застосуйте згладжування, щоб зменшити кількість артефактів кольорових смуг.\n"
|
||||
"Згладжування значно збільшує розмір знімків екрана, стиснутих без втрат,\n"
|
||||
"і працює некоректно, якщо екран або операційна система виконує\n"
|
||||
"додаткове згладжування або якщо кольорові канали не квантуються\n"
|
||||
"до 8 бітів.\n"
|
||||
"З OpenGL ES згладжування працює лише якщо відтінювач підтримує високу\n"
|
||||
"точність чисел з плаваючою комою й може більше впливати на продуктивність."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Arm inertia"
|
||||
|
@ -2514,7 +2517,6 @@ msgid "Ask to reconnect after crash"
|
|||
msgstr "Запитувати про перезʼєднання під час збою"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"At this distance the server will aggressively optimize which blocks are sent "
|
||||
"to\n"
|
||||
|
@ -2526,17 +2528,15 @@ msgid ""
|
|||
"optimization.\n"
|
||||
"Stated in MapBlocks (16 nodes)."
|
||||
msgstr ""
|
||||
"На цій відстані сервер буде агресивно оптимізувати те, які блоки\n"
|
||||
"надсилаються клієнтам.\n"
|
||||
"Маленькі значення можуть значно покращити продуктивність, за\n"
|
||||
"рахунок проблем відображення (деякі блоки не будуть\n"
|
||||
"відображені під водою й у печерах, а також иноді на поверхні).\n"
|
||||
"Виставлення цього до значення, що більше, ніж\n"
|
||||
"max_block_send_distance, вимикає цю оптимізацію.\n"
|
||||
"На цій відстані сервер буде агресивно оптимізувати, які блоки\n"
|
||||
"надсилатимуться клієнтам.\n"
|
||||
"Меньші значення потенційно значно підвищують продуктивність за рахунок\n"
|
||||
"проблем промальовування (блоки можуть неправильно відображатися у печерах).\n"
|
||||
"Виставлення цього до значення більше за max_block_send_distance вимикає\n"
|
||||
"цю оптимізацію.\n"
|
||||
"Зазначається у блоках мапи (16 блоків)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"At this distance the server will perform a simpler and cheaper occlusion "
|
||||
"check.\n"
|
||||
|
@ -2546,13 +2546,11 @@ msgid ""
|
|||
"This is especially useful for very large viewing range (upwards of 500).\n"
|
||||
"Stated in MapBlocks (16 nodes)."
|
||||
msgstr ""
|
||||
"На цій відстані сервер буде агресивно оптимізувати те, які блоки\n"
|
||||
"надсилаються клієнтам.\n"
|
||||
"Маленькі значення можуть значно покращити продуктивність, за\n"
|
||||
"рахунок проблем відображення (деякі блоки не будуть\n"
|
||||
"відображені під водою й у печерах, а також иноді на поверхні).\n"
|
||||
"Виставлення цього до значення, що більше, ніж\n"
|
||||
"max_block_send_distance, вимикає цю оптимізацію.\n"
|
||||
"На цій відстані сервер буде виконувати простіше й дешевше перевірку "
|
||||
"затінення.\n"
|
||||
"Меньші значення потенційно підвищують продуктивність, за рахунок тимчасово\n"
|
||||
"видимих проблем відображення (зниклі блоки).\n"
|
||||
"Це особливо корисно для дуже великого діапазону огляду (понад 500).\n"
|
||||
"Зазначається у блоках мапи (16 блоків)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
|
@ -2616,9 +2614,8 @@ msgid "Biome noise"
|
|||
msgstr "Шум біому"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Block cull optimize distance"
|
||||
msgstr "Оптимальна відстань надсилання блока"
|
||||
msgstr "Відстань оптимізації вибракування блоків"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Block send optimize distance"
|
||||
|
@ -2840,6 +2837,9 @@ msgid ""
|
|||
"Comma-separated list of AL and ALC extensions that should not be used.\n"
|
||||
"Useful for testing. See al_extensions.[h,cpp] for details."
|
||||
msgstr ""
|
||||
"Розділений комами перелік розширень AL і ALC, які не повинно використовувати."
|
||||
"\n"
|
||||
"Корисно для тестування. Подробиці у файлах al_extensions.[h,cpp]."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2851,9 +2851,9 @@ msgid ""
|
|||
"These flags are independent from Minetest versions,\n"
|
||||
"so see a full list at https://content.minetest.net/help/content_flags/"
|
||||
msgstr ""
|
||||
"Розділений комами перелік міток, які треба приховувати у репозиторії "
|
||||
"вмісту.\n"
|
||||
"\"nonfree\" використовується для приховання пакетів, що не є \"вільним "
|
||||
"Розділений комами перелік міток, які треба приховувати у репозиторії вмісту."
|
||||
"\n"
|
||||
"\"nonfree\" використовується для приховання пакунків, що не є \"вільним "
|
||||
"програмним\n"
|
||||
"забезпеченням\", як визначено Фондом вільного програмного забезпечення.\n"
|
||||
"Ви також можете вказувати оцінки вмісту.\n"
|
||||
|
@ -3064,7 +3064,6 @@ msgstr ""
|
|||
"диск, але також використовує більше ресурсів."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Define the oldest clients allowed to connect.\n"
|
||||
"Older clients are compatible in the sense that they will not crash when "
|
||||
|
@ -3076,10 +3075,14 @@ msgid ""
|
|||
"Minetest still enforces its own internal minimum, and enabling\n"
|
||||
"strict_protocol_version_checking will effectively override this."
|
||||
msgstr ""
|
||||
"Увімкніть, щоб заборонити підключення старим клієнтам.\n"
|
||||
"Старші клієнти сумісні у тому сенсі, що вони не зазнаватимуть збою при\n"
|
||||
"підключенні до нових серверів, але вони можуть не підтримувати усі нові "
|
||||
"функції, на які ви очікуєте."
|
||||
"Визначте найстаріші клієнти, яким дозволено під'єднуватися.\n"
|
||||
"Старіші клієнти сумісні у тому сенсі, що вони не зазнаватимуть збою при "
|
||||
"підключенні\n"
|
||||
"до нових серверів, але можуть не підтримувати усі нові функції, на які ви "
|
||||
"очікуєте.\n"
|
||||
"Це дозволяє детальніший контроль, ніж strict_protocol_version_checking.\n"
|
||||
"Minetest все ще примушує свій внутрішній мінімум, і включення\n"
|
||||
"strict_protocol_version_checking перевизначить це ефективно."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines areas where trees have apples."
|
||||
|
@ -3283,9 +3286,8 @@ msgid "Enable Bloom Debug"
|
|||
msgstr "Увімкнути зневадження світіння"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Debanding"
|
||||
msgstr "Пошкодження"
|
||||
msgstr "Увімкнути дебандинг"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3314,9 +3316,8 @@ msgstr ""
|
|||
"тіней\". Інакше використовується PCF."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Post Processing"
|
||||
msgstr "Постобробка"
|
||||
msgstr "Увімкнути постобробку"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable Raytraced Culling"
|
||||
|
@ -3369,9 +3370,8 @@ msgstr ""
|
|||
"доступу."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable random mod loading (mainly used for testing)."
|
||||
msgstr "Увімкнути випадкове введення користувача (тільки для тестування)."
|
||||
msgstr "Увімкнути випадкове завантаження модів (в основному для тестування)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable random user input (only used for testing)."
|
||||
|
@ -3403,9 +3403,8 @@ msgstr ""
|
|||
"функції, на які ви очікуєте."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable touchscreen"
|
||||
msgstr "Сенсорний екран"
|
||||
msgstr "Увімкнути сенсорний екран"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3443,7 +3442,7 @@ msgid ""
|
|||
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
|
||||
"enhanced, highlights and shadows are gradually compressed."
|
||||
msgstr ""
|
||||
"Вмикає кінематографічне тональне відображення Hable's «Uncharted 2».\n"
|
||||
"Вмикає кінематографічне тональне відображення \"Uncharted 2\".\n"
|
||||
"Імітує криву тона фотоплівки й наближає\n"
|
||||
"зображення до більшого динамічного діапазону. Середній контраст злегка\n"
|
||||
"посилюється, відблиски й тіні поступово стискається."
|
||||
|
@ -3458,16 +3457,17 @@ msgstr "Вмикає кешування мешів, яких повернули.
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables debug and error-checking in the OpenGL driver."
|
||||
msgstr ""
|
||||
msgstr "Вмикає зневадження й перевірку помилок у драйвері OpenGL."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enables the post processing pipeline."
|
||||
msgstr ""
|
||||
msgstr "Вмикає конвеєр постобробки."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Enables touchscreen mode, allowing you to play the game with a touchscreen."
|
||||
msgstr ""
|
||||
"Вмикає режим сенсорного екрану, дозволяючи вам грати з сенсорним екраном."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4387,15 +4387,15 @@ msgstr ""
|
|||
"- Opaque: вимкнути прозорість"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Length of a server tick (the interval at which everything is generally "
|
||||
"updated),\n"
|
||||
"stated in seconds.\n"
|
||||
"Does not apply to sessions hosted from the client menu."
|
||||
msgstr ""
|
||||
"Довжина кроку серверу й інтервал, з яким об'єкти загалом оновлюються по\n"
|
||||
"мережі, зазначається у секундах."
|
||||
"Довжина кроку серверу (інтервал, з яким все зазвичай оновлюються),\n"
|
||||
"зазначається у секундах.\n"
|
||||
"Не застовується до сесій, які запущено з клієнтського меню."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Length of liquid waves."
|
||||
|
@ -4625,7 +4625,6 @@ msgid "Map generation attributes specific to Mapgen v5."
|
|||
msgstr "Спеціальні атрибути генерації для генератору світу V5."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Map generation attributes specific to Mapgen v6.\n"
|
||||
"The 'snowbiomes' flag enables the new 5 biome system.\n"
|
||||
|
@ -4634,10 +4633,12 @@ msgid ""
|
|||
"The 'temples' flag disables generation of desert temples. Normal dungeons "
|
||||
"will appear instead."
|
||||
msgstr ""
|
||||
"Спеціальні атрибути генерації для генератору світу V6.\n"
|
||||
"Спеціальні атрибути генерації для генератору світу v6.\n"
|
||||
"Мітка \"snowbiomes\" вмикає нову систему з 5 біомами.\n"
|
||||
"Коли мітку \"snowbiomes\" увімкнено, автоматично увімкаються джунглі,\n"
|
||||
"ігноруючи мітку \"jungles\"."
|
||||
"Коли мітку \"snowbiomes\" увімкнено, автоматично увімкаються джунглі й\n"
|
||||
"мітка \"jungles\" ігнорується.\n"
|
||||
"Мітка \"temples\" вимикає генерацію храмів пустель. Замість них "
|
||||
"з'являтимуться звичайні підземелля."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4943,9 +4944,8 @@ msgid "Minimap scan height"
|
|||
msgstr "Висота сканування мінімапи"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Minimum dig repetition interval"
|
||||
msgstr "Інтервал повторного розміщення"
|
||||
msgstr "Мінімальний інтервал повторення копання"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Minimum limit of random number of large caves per mapchunk."
|
||||
|
@ -5016,9 +5016,8 @@ msgid "Mouse sensitivity multiplier."
|
|||
msgstr "Множник чутливості миші."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Movement threshold"
|
||||
msgstr "Поріг каверн"
|
||||
msgstr "Поріг переміщення"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Mud noise"
|
||||
|
@ -5172,9 +5171,8 @@ msgstr ""
|
|||
"Не відкриває, якщо будь-яка форму вже відкрито."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "OpenGL debug"
|
||||
msgstr "Налагодження генератора світу"
|
||||
msgstr "Зневадження OpenGL"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Optional override for chat weblink color."
|
||||
|
@ -5308,13 +5306,12 @@ msgid "Proportion of large caves that contain liquid."
|
|||
msgstr "Співвідношення великих печер, що містять рідину."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Protocol version minimum"
|
||||
msgstr "Невідповідність версії протоколу. "
|
||||
msgstr "Мінімальна версія протоколу"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Punch gesture"
|
||||
msgstr ""
|
||||
msgstr "Жест удару"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5335,7 +5332,7 @@ msgstr "Випадковий ввід"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Random mod load order"
|
||||
msgstr ""
|
||||
msgstr "Випадковий порядок завантаження модів"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Recent Chat Messages"
|
||||
|
@ -5545,7 +5542,6 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
|
|||
msgstr "Дивіться https://www.sqlite.org/pragma.html#pragma_synchronous"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select the antialiasing method to apply.\n"
|
||||
"\n"
|
||||
|
@ -5570,9 +5566,9 @@ msgstr ""
|
|||
"\n"
|
||||
"* None - без згладжування (за замовчуванням)\n"
|
||||
"\n"
|
||||
"* FSAA - апаратне повноекранне згладжування (несумісно із відтінювачами),\n"
|
||||
"також відоме як згладжування з декількома вибірками (multi-sample "
|
||||
"antialiasing, MSAA)\n"
|
||||
"* FSAA - апаратне повноекранне згладжування\n"
|
||||
"(несумісне з пост-обробкою й субдискретизацією),\n"
|
||||
"також відоме як multi-sample antialiasing (MSAA)\n"
|
||||
"Згладжує кути блоків, але не впливає на внутрішню частину текстур.\n"
|
||||
"Для змінення цього вибору потребується перезавантаження.\n"
|
||||
"\n"
|
||||
|
@ -5582,9 +5578,8 @@ msgstr ""
|
|||
"Забезпечує баланс між швидкістю і якістю зображення.\n"
|
||||
"\n"
|
||||
"* SSAA - згладжування із супер-вибіркою (потребує відтінювачів)\n"
|
||||
"Промальовує зображення сцени з вищою роздільністю, потім зменьшує масштаб, "
|
||||
"для зменьшення\n"
|
||||
"ефектів накладення. Це найповільніший і найточніший метод."
|
||||
"Промальовує зображення сцени з вищою роздільністю, потім зменьшує масштаб,\n"
|
||||
"для зменшення ефектів накладення. Це найповільніший і найточніший метод."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Selection box border color (R,G,B)."
|
||||
|
@ -5713,13 +5708,12 @@ msgstr ""
|
|||
"Діапазон: від -1 до 1.0"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Set the language. By default, the system language is used.\n"
|
||||
"A restart is required after changing this."
|
||||
msgstr ""
|
||||
"Вказати мову. Залиште порожнім, щоб використовувати системну мову.\n"
|
||||
"Потрібен перезапуск після цієї зміни."
|
||||
"Вкажіть мову. За замовчування використовується системна мова.\n"
|
||||
"Після зміни цього потрібен перезапуск."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5762,7 +5756,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")."
|
||||
msgstr ""
|
||||
msgstr "Увімкніть ефект об'ємного освітлення (також відомий як \"Godrays\")."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Set to true to enable waving leaves."
|
||||
|
@ -5809,15 +5803,13 @@ msgid "Shaders"
|
|||
msgstr "Відтінювачі"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Shaders allow advanced visual effects and may increase performance on some "
|
||||
"video\n"
|
||||
"cards."
|
||||
msgstr ""
|
||||
"Відтінювачі дозволяють додаткові визуальні ефекти й можуть збільшити\n"
|
||||
"продуктивність на деяких відеокартах.\n"
|
||||
"Це працює тільки з двигуном промальовування OpenGL."
|
||||
"Відтінювачі дозволяють просунуті визуальні ефекти й можуть збільшити\n"
|
||||
"продуктивність на деяких відеокартах."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Shadow filter quality"
|
||||
|
@ -5939,14 +5931,12 @@ msgid "Smooth lighting"
|
|||
msgstr "Згладжене освітлення"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Smooths rotation of camera when in cinematic mode, 0 to disable. Enter "
|
||||
"cinematic mode by using the key set in Controls."
|
||||
msgstr ""
|
||||
"Робить обертання камери плавним у кінематографічному режимі, 0 для "
|
||||
"відключення. Входіть у кінематографічний режім клавішою, визначеною у "
|
||||
"Змінити клавіші."
|
||||
"Згладжує обертання камери у кінематографічному режимі, 0 для відключення. "
|
||||
"Входьте у кінематографічний режім клавішою, визначеною у Керування."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5973,9 +5963,8 @@ msgid "Sound"
|
|||
msgstr "Звук"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Sound Extensions Blacklist"
|
||||
msgstr "Чорний список міток ContentDB"
|
||||
msgstr "Чорний список розширень звуку"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6191,6 +6180,8 @@ msgid ""
|
|||
"The delay in milliseconds after which a touch interaction is considered a "
|
||||
"long tap."
|
||||
msgstr ""
|
||||
"Затримка в мілісекундах, після якої сенсорна взаємодія вважається довгим "
|
||||
"дотиком."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6210,16 +6201,25 @@ msgid ""
|
|||
"Known from the classic Minetest mobile controls.\n"
|
||||
"Combat is more or less impossible."
|
||||
msgstr ""
|
||||
"Жест, що означає удар по гравцю або сутності.\n"
|
||||
"Це перевизначатися іграми або модами.\n"
|
||||
"\n"
|
||||
"* short_tap (короткий дотик)\n"
|
||||
"Простий у використанні й відомий за іншими іграми, які не повинні бути "
|
||||
"названі.\n"
|
||||
"\n"
|
||||
"* long_tap (довгий дотик)\n"
|
||||
"Відомий за класичному мобільному управлінні Minetest.\n"
|
||||
"Бої більш-менш неможливі."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The identifier of the joystick to use"
|
||||
msgstr "Ідентифікатор джойстика, що використовується"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The length in pixels after which a touch interaction is considered movement."
|
||||
msgstr "Довжина в пікселях, з якої починається дія з сенсорним екраном."
|
||||
msgstr "Довжина в пікселях, після якої сенсорна взаємодія вважається рухом."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6234,13 +6234,12 @@ msgstr ""
|
|||
"За замовчуванням – 1.0 (1/2 блоки)."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The minimum time in seconds it takes between digging nodes when holding\n"
|
||||
"the dig button."
|
||||
msgstr ""
|
||||
"Затримка в секундах між повторними розміщеннями блоків при\n"
|
||||
"затисканні кнопки розміщення."
|
||||
"Мінімальний час у секундах у перервах на копання блоків при\n"
|
||||
"затисканні кнопки копання."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "The network interface that the server listens on."
|
||||
|
@ -6273,7 +6272,6 @@ msgstr ""
|
|||
"Це повинно бути налаштовано разом з active_object_send_range_blocks."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The rendering back-end.\n"
|
||||
"Note: A restart is required after changing this!\n"
|
||||
|
@ -6283,7 +6281,7 @@ msgstr ""
|
|||
"Двигун промальовування.\n"
|
||||
"Примітка: після змінення цього потрібен перезапуск!\n"
|
||||
"За замовчуванням OpenGL для ПК, й OGLES2 для Android.\n"
|
||||
"Відтінювачі підтримуються OpenGL і OGLES2 (експериментально)."
|
||||
"Відтінювачі підтримуються усіма крім OGLES1."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6328,7 +6326,7 @@ msgid ""
|
|||
"The time in seconds it takes between repeated events\n"
|
||||
"when holding down a joystick button combination."
|
||||
msgstr ""
|
||||
"Затримка в секундах між подіями, що повторюються,\n"
|
||||
"Затримка в секундах між подіями, що повторюються\n"
|
||||
"при затисканні комбінації кнопок джойстику."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
|
@ -6359,7 +6357,7 @@ msgstr "Третій з 4 шумів 2D що разом визначають д
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Threshold for long taps"
|
||||
msgstr ""
|
||||
msgstr "Поріг для довгих дотиків"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6420,9 +6418,8 @@ msgid "Tradeoffs for performance"
|
|||
msgstr "Домовленності для продуктивності"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Translucent liquids"
|
||||
msgstr "Непрозорі рідини"
|
||||
msgstr "Напівпрозорі рідини"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Transparency Sorting Distance"
|
||||
|
@ -6469,13 +6466,13 @@ msgstr ""
|
|||
"продуктивністю."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"URL to JSON file which provides information about the newest Minetest "
|
||||
"release\n"
|
||||
"If this is empty the engine will never check for updates."
|
||||
msgstr ""
|
||||
"Адреса файлу JSON, що забезпечує інформацію про найновіший реліз Minetest"
|
||||
"URL до файлу JSON, що забезпечує інформацію про найновіший реліз Minetest\n"
|
||||
"Якщо ще порожнє, рушій ніколи не перевірятиме оновлення."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "URL to the server list displayed in the Multiplayer Tab."
|
||||
|
@ -6688,7 +6685,7 @@ msgstr "Гучність"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Volume multiplier when the window is unfocused."
|
||||
msgstr ""
|
||||
msgstr "Множник гучності, коли вікно не сфокусовано."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6699,14 +6696,12 @@ msgstr ""
|
|||
"Вимагає увімкнення системи звуку."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volume when unfocused"
|
||||
msgstr "FPS, при паузі або поза фокусом"
|
||||
msgstr "Гучність поза фокусом"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volumetric lighting"
|
||||
msgstr "Згладжене освітлення"
|
||||
msgstr "Об'ємне освітлення"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
|
|
@ -3,8 +3,8 @@ msgstr ""
|
|||
"Project-Id-Version: Chinese (Simplified) (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2024-01-30 16:01+0000\n"
|
||||
"Last-Translator: yue weikai <send52@outlook.com>\n"
|
||||
"PO-Revision-Date: 2024-07-31 22:09+0000\n"
|
||||
"Last-Translator: y5nw <y5nw@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
|
||||
"minetest/minetest/zh_Hans/>\n"
|
||||
"Language: zh_CN\n"
|
||||
|
@ -12,7 +12,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.4-dev\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -82,9 +82,8 @@ msgstr ""
|
|||
"使用 '.help <cmd>' 获取该命令的更多信息,或使用 '.help all' 列出所有内容。"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[all | <命令>]"
|
||||
msgstr "[all | <命令>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -151,7 +150,7 @@ msgstr "下载 $1 失败"
|
|||
msgid ""
|
||||
"Failed to extract \"$1\" (insufficient disk space, unsupported file type or "
|
||||
"broken archive)"
|
||||
msgstr "安装:\"$1\" 的文件类型不支持或压缩包已损坏"
|
||||
msgstr "无法解压\"$1\":存储空间不足、文件类型不支持或压缩包已损坏"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid ""
|
||||
|
@ -182,8 +181,9 @@ msgid "Downloading..."
|
|||
msgstr "下载中..."
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
#, fuzzy
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "无法获取这个包的依赖项"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -1102,7 +1102,7 @@ msgstr "启动游戏"
|
|||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr "在安装mod前,你需要先安装一个子游戏"
|
||||
msgstr "您需要先安装一个子游戏才能创建新的世界。"
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1417,7 +1417,7 @@ msgstr "雾气已启用"
|
|||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Fog enabled by game or mod"
|
||||
msgstr "缩放被当前子游戏或 mod 禁用"
|
||||
msgstr "雾被当前子游戏或 mod 启用"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Game info:"
|
||||
|
@ -1917,11 +1917,12 @@ msgstr "材质模式小地图"
|
|||
#: src/client/shader.cpp
|
||||
#, fuzzy, c-format
|
||||
msgid "Failed to compile the \"%s\" shader."
|
||||
msgstr "网页打不开"
|
||||
msgstr "无法编译“%s”着色器。"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
#, fuzzy
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "着色器已启用,但是驱动程序不支持 GLSL。"
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2114,16 +2115,17 @@ msgstr "按键"
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "打开"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "是否打开网页?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
msgid "Unable to open URL"
|
||||
msgstr "网页打不开"
|
||||
msgstr "无法打开网页"
|
||||
|
||||
#: src/gui/guiPasswordChange.cpp
|
||||
msgid "Change"
|
||||
|
@ -3335,7 +3337,7 @@ msgstr "启用鼠标滚轮(滚动),以便在热栏中选择项目。"
|
|||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable random mod loading (mainly used for testing)."
|
||||
msgstr "启用随机用户输入(仅用于测试)。"
|
||||
msgstr "使用随机顺序加载 mod(主要用于测试)。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable random user input (only used for testing)."
|
||||
|
@ -3428,9 +3430,10 @@ msgid "Enables the post processing pipeline."
|
|||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Enables touchscreen mode, allowing you to play the game with a touchscreen."
|
||||
msgstr ""
|
||||
msgstr "启用触摸屏模式。启用后您可以使用触摸屏玩游戏。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5097,9 +5100,8 @@ msgstr ""
|
|||
"则不暂停。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "OpenGL debug"
|
||||
msgstr "地图生成器调试"
|
||||
msgstr "OpenGL 调试"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Optional override for chat weblink color."
|
||||
|
@ -5230,7 +5232,7 @@ msgstr "包含液体的大洞穴的比例。"
|
|||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Protocol version minimum"
|
||||
msgstr "协议版本不匹配。 "
|
||||
msgstr "最低协议版本"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Punch gesture"
|
||||
|
@ -5254,8 +5256,9 @@ msgid "Random input"
|
|||
msgstr "随机输入"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Random mod load order"
|
||||
msgstr ""
|
||||
msgstr "使用随机顺序加载 Mod"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Recent Chat Messages"
|
||||
|
@ -5633,7 +5636,7 @@ msgid ""
|
|||
"Set the language. By default, the system language is used.\n"
|
||||
"A restart is required after changing this."
|
||||
msgstr ""
|
||||
"设定语言。留空以使用系统语言。\n"
|
||||
"设定语言。默认使用系统语言。\n"
|
||||
"变更后须重新启动。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
|
@ -6166,10 +6169,10 @@ msgid ""
|
|||
"OpenGL is the default for desktop, and OGLES2 for Android.\n"
|
||||
"Shaders are supported by everything but OGLES1."
|
||||
msgstr ""
|
||||
"关于渲染的后端引擎\n"
|
||||
"用于渲染的后端引擎\n"
|
||||
"注:更改之后要重启游戏!\n"
|
||||
"OpenGL是默认的电脑端渲染引擎,OGLES2是用于安卓的.\n"
|
||||
"实验性:被OpenGL和OGLES2的着色器."
|
||||
"除了OGLES1之外的后端引擎都支持着色器"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6302,9 +6305,8 @@ msgid "Tradeoffs for performance"
|
|||
msgstr "性能权衡"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Translucent liquids"
|
||||
msgstr "不透明液体"
|
||||
msgstr "半透明液体"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Transparency Sorting Distance"
|
||||
|
@ -6573,7 +6575,7 @@ msgstr ""
|
|||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Volume when unfocused"
|
||||
msgstr "游戏暂停时最高 FPS"
|
||||
msgstr "游戏暂停时的音量"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
|
|
|
@ -3,8 +3,8 @@ msgstr ""
|
|||
"Project-Id-Version: Chinese (Traditional) (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-11 15:14+0200\n"
|
||||
"PO-Revision-Date: 2024-01-14 12:31+0000\n"
|
||||
"Last-Translator: reimu105 <peter112548@gmail.com>\n"
|
||||
"PO-Revision-Date: 2024-08-10 06:09+0000\n"
|
||||
"Last-Translator: hugoalh <hugoalh@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
|
||||
"minetest/minetest/zh_Hant/>\n"
|
||||
"Language: zh_TW\n"
|
||||
|
@ -12,7 +12,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.4-dev\n"
|
||||
"X-Generator: Weblate 5.7-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
|
@ -71,9 +71,8 @@ msgid "Command not available: "
|
|||
msgstr "指令無法使用: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr "取得指令的說明"
|
||||
msgstr "取得指令幫助(-t:輸出至聊天中)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
|
@ -81,9 +80,8 @@ msgid ""
|
|||
msgstr "使用「.help <cmd>」來取得更多資訊,或使用「.help all」來列出所有指令。"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
#, fuzzy
|
||||
msgid "[all | <cmd>] [-t]"
|
||||
msgstr "[all | <命令>]"
|
||||
msgstr "[all | <指令>] [-t]"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
|
@ -182,7 +180,7 @@ msgstr "正在下載..."
|
|||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Error getting dependencies for package"
|
||||
msgstr ""
|
||||
msgstr "獲取套件的相依元件時發生錯誤"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
|
@ -196,7 +194,7 @@ msgstr "安裝"
|
|||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
|
||||
msgid "Loading..."
|
||||
msgstr "正在載入..."
|
||||
msgstr "載入中…"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Mods"
|
||||
|
@ -458,7 +456,7 @@ msgstr "裝飾物"
|
|||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Desert temples"
|
||||
msgstr ""
|
||||
msgstr "沙漠聖殿"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Development Test is meant for developers."
|
||||
|
@ -468,7 +466,7 @@ msgstr "開發測試是針對開發人員的。"
|
|||
msgid ""
|
||||
"Different dungeon variant generated in desert biomes (only if dungeons "
|
||||
"enabled)"
|
||||
msgstr ""
|
||||
msgstr "在沙漠生物群落中生成不同的地牢變體(僅當啟用地牢時)"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
|
@ -645,7 +643,7 @@ msgstr "缺少名稱"
|
|||
#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Name"
|
||||
msgstr "名字"
|
||||
msgstr "名稱"
|
||||
|
||||
#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
|
@ -719,7 +717,7 @@ msgstr ""
|
|||
|
||||
#: builtin/mainmenu/dlg_version_info.lua
|
||||
msgid "Later"
|
||||
msgstr "稍後提醒"
|
||||
msgstr "稍後"
|
||||
|
||||
#: builtin/mainmenu/dlg_version_info.lua
|
||||
msgid "Never"
|
||||
|
@ -1054,15 +1052,14 @@ msgid "Install games from ContentDB"
|
|||
msgstr "從 ContentDB 安裝遊戲"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "Minetest doesn't come with a game by default."
|
||||
msgstr "預設不再安裝 Minetest 遊戲"
|
||||
msgstr "預設不再安裝 Minetest 遊戲。"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid ""
|
||||
"Minetest is a game-creation platform that allows you to play many different "
|
||||
"games."
|
||||
msgstr ""
|
||||
msgstr "Minetest 是一個遊戲創建平台,可以讓你遊玩許多不同的遊戲。"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "New"
|
||||
|
@ -1097,9 +1094,8 @@ msgid "Start Game"
|
|||
msgstr "開始遊戲"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
#, fuzzy
|
||||
msgid "You need to install a game before you can create a world."
|
||||
msgstr "您需要先安裝遊戲才能安裝模組"
|
||||
msgstr "您需要先安裝遊戲才能安裝模組。"
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Address"
|
||||
|
@ -1128,7 +1124,7 @@ msgstr "加入遊戲"
|
|||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Login"
|
||||
msgstr "登錄"
|
||||
msgstr "登入"
|
||||
|
||||
#: builtin/mainmenu/tab_online.lua
|
||||
msgid "Ping"
|
||||
|
@ -1412,9 +1408,8 @@ msgid "Fog enabled"
|
|||
msgstr "已啟用霧氣"
|
||||
|
||||
#: src/client/game.cpp
|
||||
#, fuzzy
|
||||
msgid "Fog enabled by game or mod"
|
||||
msgstr "遠近調整目前已被遊戲或模組停用"
|
||||
msgstr "霧已由遊戲或模組啟用"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Game info:"
|
||||
|
@ -1442,7 +1437,7 @@ msgstr "MiB/秒"
|
|||
|
||||
#: src/client/game.cpp
|
||||
msgid "Minimap currently disabled by game or mod"
|
||||
msgstr "迷你地圖目前已被遊戲或 Mod 停用"
|
||||
msgstr "迷你地圖目前已被遊戲或模組停用"
|
||||
|
||||
#: src/client/game.cpp
|
||||
msgid "Multiplayer"
|
||||
|
@ -1639,9 +1634,8 @@ msgid "Caps Lock"
|
|||
msgstr "大寫鎖定鍵"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Clear Key"
|
||||
msgstr "清除"
|
||||
msgstr "清除鍵"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Control Key"
|
||||
|
@ -1669,7 +1663,7 @@ msgstr "執行"
|
|||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
msgstr "說明"
|
||||
msgstr "幫助"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Home"
|
||||
|
@ -1725,9 +1719,8 @@ msgstr "左 Windows 鍵"
|
|||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Menu Key"
|
||||
msgstr "選單"
|
||||
msgstr "選單鍵"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
|
@ -1813,9 +1806,8 @@ msgstr "Page up"
|
|||
|
||||
#. ~ Usually paired with the Break key
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Pause Key"
|
||||
msgstr "暫停"
|
||||
msgstr "暫停鍵"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Play"
|
||||
|
@ -1866,9 +1858,8 @@ msgid "Select"
|
|||
msgstr "選擇"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Shift Key"
|
||||
msgstr "Shift"
|
||||
msgstr "Shift 鍵"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Sleep"
|
||||
|
@ -1905,7 +1896,7 @@ msgstr "遠近調整"
|
|||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
msgstr "已隱藏迷你地圖"
|
||||
msgstr "迷你地圖已隱藏"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
#, c-format
|
||||
|
@ -1922,13 +1913,13 @@ msgid "Minimap in texture mode"
|
|||
msgstr "材質模式的迷你地圖"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Failed to compile the \"%s\" shader."
|
||||
msgstr "無法開啟網頁"
|
||||
msgstr "無法編譯「%s」著色器。"
|
||||
|
||||
#: src/client/shader.cpp
|
||||
msgid "Shaders are enabled but GLSL is not supported by the driver."
|
||||
msgstr ""
|
||||
msgstr "著色器已啟用,但是驅動程式不支援 GLSL。"
|
||||
|
||||
#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3"
|
||||
#: src/content/mod_configuration.cpp
|
||||
|
@ -2121,16 +2112,15 @@ msgstr "按下按鍵"
|
|||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "開啟"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
msgid "Open URL?"
|
||||
msgstr ""
|
||||
msgstr "開啟網址?"
|
||||
|
||||
#: src/gui/guiOpenURL.cpp
|
||||
#, fuzzy
|
||||
msgid "Unable to open URL"
|
||||
msgstr "無法開啟網頁"
|
||||
msgstr "無法開啟網址"
|
||||
|
||||
#: src/gui/guiPasswordChange.cpp
|
||||
msgid "Change"
|
||||
|
@ -2396,16 +2386,15 @@ msgid ""
|
|||
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
|
||||
"to be sure) creates a solid floatland layer."
|
||||
msgstr ""
|
||||
"調整浮地層的密度。\n"
|
||||
"增加值以增加密度。 可以是正值,也可以是負值。\n"
|
||||
"值 = 0.0:50% 的體積是浮地。\n"
|
||||
"值 = 2.0(可以更高,取決於“mgv7_np_floatland”,始終測試\n"
|
||||
"可以肯定的是)創造了一個堅固的浮地層。"
|
||||
"調整浮空島層的密度。\n"
|
||||
"增加數值以增加密度。可以是正值或負值。\n"
|
||||
"值 = 0.0:50% 的體積是浮空島。\n"
|
||||
"值 = 2.0(可以更高,取決於「mgv7_np_floatland」,總是進行測試以確定)建立一個"
|
||||
"堅固的浮空島層。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Admin name"
|
||||
msgstr "將物品名稱加至末尾"
|
||||
msgstr "管理員名稱"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Advanced"
|
||||
|
@ -2413,7 +2402,7 @@ msgstr "進階"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Allows liquids to be translucent."
|
||||
msgstr ""
|
||||
msgstr "允許液體呈半透明狀。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -2430,9 +2419,8 @@ msgstr ""
|
|||
"在夜晚的自然光照下作用很小。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Always fly fast"
|
||||
msgstr "總是啟用飛行與快速模式"
|
||||
msgstr "總是快速飛行"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Ambient occlusion gamma"
|
||||
|
@ -2572,9 +2560,8 @@ msgid "Base terrain height."
|
|||
msgstr "基礎地形高度。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Base texture size"
|
||||
msgstr "過濾器的最大材質大小"
|
||||
msgstr "基礎材質大小"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Basic privileges"
|
||||
|
@ -2597,9 +2584,8 @@ msgid "Bind address"
|
|||
msgstr "綁定地址"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Biome API"
|
||||
msgstr "生物雜訊"
|
||||
msgstr "生物群落 API"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Biome noise"
|
||||
|
@ -2619,14 +2605,12 @@ msgid "Bloom"
|
|||
msgstr "泛光"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Bloom Intensity"
|
||||
msgstr "泛光强度"
|
||||
msgstr "泛光強度"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Bloom Radius"
|
||||
msgstr "雲朵範圍"
|
||||
msgstr "泛光半徑"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Bloom Strength Factor"
|
||||
|
@ -3048,7 +3032,6 @@ msgstr ""
|
|||
"但也使用更多的資源。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Define the oldest clients allowed to connect.\n"
|
||||
"Older clients are compatible in the sense that they will not crash when "
|
||||
|
@ -3060,9 +3043,12 @@ msgid ""
|
|||
"Minetest still enforces its own internal minimum, and enabling\n"
|
||||
"strict_protocol_version_checking will effectively override this."
|
||||
msgstr ""
|
||||
"啟用以讓舊的用戶端無法連線。\n"
|
||||
"較舊的用戶端在這個意義上相容,它們不會在連線至\n"
|
||||
"新伺服器時當掉,但它們可能會不支援一些您預期會有的新功能。"
|
||||
"定義允許連線的最早的客戶端。\n"
|
||||
"較舊的客戶端是相容的,因為它們在連接時不會崩潰\n"
|
||||
"到新伺服器,但它們可能不支援您期望的所有新功能。\n"
|
||||
"這允許比 strict_protocol_version_checking 更細粒度的控制。\n"
|
||||
"Minetest 仍然強制執行其自己的內部最低限度,並啟用\n"
|
||||
"strict_protocol_version_checking 將有效地覆蓋這一點。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Defines areas where trees have apples."
|
||||
|
@ -3292,9 +3278,8 @@ msgstr ""
|
|||
"使用泊松盤演算法來產生“軟陰影”。 不啟用的話就會使用 PCF 濾鏡。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable Post Processing"
|
||||
msgstr "後製處理"
|
||||
msgstr "啟用後製處理"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Enable Raytraced Culling"
|
||||
|
@ -3378,9 +3363,8 @@ msgstr ""
|
|||
"新伺服器時當掉,但它們可能會不支援一些您預期會有的新功能。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Enable touchscreen"
|
||||
msgstr "海灘雜訊閾值"
|
||||
msgstr "啟用觸控螢幕"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -3442,7 +3426,7 @@ msgstr ""
|
|||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Enables touchscreen mode, allowing you to play the game with a touchscreen."
|
||||
msgstr ""
|
||||
msgstr "啟用觸控螢幕模式,讓你可以使用觸控螢幕玩遊戲。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -4651,7 +4635,6 @@ msgid "Mapgen Flat specific flags"
|
|||
msgstr "地圖產生器平地標籤"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Mapgen Fractal"
|
||||
msgstr "地圖產生器分形"
|
||||
|
||||
|
@ -4922,14 +4905,12 @@ msgid "Miscellaneous"
|
|||
msgstr "各種的"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Mod Profiler"
|
||||
msgstr "分析器"
|
||||
msgstr "模組分析器"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Mod Security"
|
||||
msgstr "安全"
|
||||
msgstr "模組安全"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Mod channels"
|
||||
|
@ -4979,9 +4960,8 @@ msgid "Mouse sensitivity multiplier."
|
|||
msgstr "滑鼠靈敏度倍數。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Movement threshold"
|
||||
msgstr "洞穴閾值"
|
||||
msgstr "移動閾值"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Mud noise"
|
||||
|
@ -5035,7 +5015,6 @@ msgstr ""
|
|||
"當從主選單啟動時,這個值將會被覆寫。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Networking"
|
||||
msgstr "網路"
|
||||
|
||||
|
@ -5136,9 +5115,8 @@ msgstr ""
|
|||
"打開。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "OpenGL debug"
|
||||
msgstr "Mapgen 除錯"
|
||||
msgstr "OpenGL 偵錯"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Optional override for chat weblink color."
|
||||
|
@ -5252,26 +5230,24 @@ msgid "Prometheus listener address"
|
|||
msgstr "Prometheus 監聽器位址"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Prometheus listener address.\n"
|
||||
"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
|
||||
"enable metrics listener for Prometheus on that address.\n"
|
||||
"Metrics can be fetched on http://127.0.0.1:30000/metrics"
|
||||
msgstr ""
|
||||
"Prometheus 监听器地址。\n"
|
||||
"如果Minetest在编译时启用了ENABLE_PROMETHEUS选项,\n"
|
||||
"在该地址上为 Prometheus 启用指标侦听器。\n"
|
||||
"可以从 http://127.0.0.1:30000/metrics 获取指标"
|
||||
"Prometheus 監聽器地址。\n"
|
||||
"如果Minetest在編輯時啓用了ENABLE_PROMETHEUS選項,\n"
|
||||
"在該地址上為 Prometheus 啓用指標偵聽器。\n"
|
||||
"可以從 http://127.0.0.1:30000/metrics 獲取指標"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Proportion of large caves that contain liquid."
|
||||
msgstr "含有液體的大型洞穴的比例。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Protocol version minimum"
|
||||
msgstr "協定版本不符合。 "
|
||||
msgstr "協定版本不符合"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Punch gesture"
|
||||
|
@ -5296,19 +5272,17 @@ msgstr "隨機輸入"
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Random mod load order"
|
||||
msgstr ""
|
||||
msgstr "依隨機順序載入 mod"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Recent Chat Messages"
|
||||
msgstr "最近聊天訊息"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Regular font path"
|
||||
msgstr "報告路徑"
|
||||
msgstr "常規字型路徑"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Remember screen size"
|
||||
msgstr "自動儲存視窗大小"
|
||||
|
||||
|
@ -5487,7 +5461,7 @@ msgstr ""
|
|||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Screenshots"
|
||||
msgstr "螢幕擷取"
|
||||
msgstr "螢幕截圖"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Seabed noise"
|
||||
|
@ -5672,13 +5646,12 @@ msgstr ""
|
|||
"範圍:從-1到1.0"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Set the language. By default, the system language is used.\n"
|
||||
"A restart is required after changing this."
|
||||
msgstr ""
|
||||
"設定語言。留空以使用系統語言。\n"
|
||||
"變更後必須重新啟動以使其生效。"
|
||||
"設定語言。預設情況下,使用系統語言。\n"
|
||||
"變更後需要重新啟動。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -5764,15 +5737,13 @@ msgid "Shaders"
|
|||
msgstr "著色器"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Shaders allow advanced visual effects and may increase performance on some "
|
||||
"video\n"
|
||||
"cards."
|
||||
msgstr ""
|
||||
"著色器可實現高級視覺效果,並可能提高某些影片的效能\n"
|
||||
"牌。\n"
|
||||
"這僅適用於 OpenGL 視訊後端。"
|
||||
"著色器允許實現高級視覺效果,\n"
|
||||
"並可能提高某些顯示卡的性能。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Shadow filter quality"
|
||||
|
@ -6332,28 +6303,24 @@ msgid "Tooltip delay"
|
|||
msgstr "工具提示延遲"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Touchscreen"
|
||||
msgstr "海灘雜訊閾值"
|
||||
msgstr "觸控螢幕"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Touchscreen sensitivity"
|
||||
msgstr "滑鼠靈敏度"
|
||||
msgstr "觸控螢幕靈敏度"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Touchscreen sensitivity multiplier."
|
||||
msgstr "滑鼠靈敏度倍數。"
|
||||
msgstr "觸控螢幕靈敏度倍數。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Tradeoffs for performance"
|
||||
msgstr "性能的權衡"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Translucent liquids"
|
||||
msgstr "不透明液體"
|
||||
msgstr "半透明液體"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Transparency Sorting Distance"
|
||||
|
@ -6368,7 +6335,6 @@ msgid "Trilinear filtering"
|
|||
msgstr "三線性過濾器"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"True = 256\n"
|
||||
"False = 128\n"
|
||||
|
@ -6376,7 +6342,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"True = 256\n"
|
||||
"False = 128\n"
|
||||
"對於讓迷你地圖在較慢的機器上變得流暢有效。"
|
||||
"使迷你地圖在速度較慢的機器上更加平滑。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Trusted mods"
|
||||
|
@ -6691,18 +6657,16 @@ msgid "Waving liquids wave speed"
|
|||
msgstr "波動的水速度"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Waving liquids wavelength"
|
||||
msgstr "波動的水長度"
|
||||
msgstr "波動液體的波長"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Waving plants"
|
||||
msgstr "植物擺動"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Weblink color"
|
||||
msgstr "色彩選取框"
|
||||
msgstr "網路連結顏色"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
@ -6831,9 +6795,8 @@ msgstr ""
|
|||
"若從主選單啟動則不需要。"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "World start time"
|
||||
msgstr "世界遊戲"
|
||||
msgstr "世界開始時間"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
|
|
25
shell.nix
Normal file
25
shell.nix
Normal file
|
@ -0,0 +1,25 @@
|
|||
{ pkgs ? import <nixpkgs> {}, }:
|
||||
|
||||
pkgs.mkShell {
|
||||
LOCALE_ARCHIVE = "${pkgs.glibcLocales}/lib/locale/locale-archive";
|
||||
env.LANG = "C.UTF-8";
|
||||
env.LC_ALL = "C.UTF-8";
|
||||
|
||||
packages = [
|
||||
pkgs.gcc
|
||||
pkgs.cmake
|
||||
pkgs.zlib
|
||||
pkgs.zstd
|
||||
pkgs.libjpeg
|
||||
pkgs.libpng
|
||||
pkgs.libGL
|
||||
pkgs.SDL2
|
||||
pkgs.openal
|
||||
pkgs.curl
|
||||
pkgs.libvorbis
|
||||
pkgs.libogg
|
||||
pkgs.gettext
|
||||
pkgs.freetype
|
||||
pkgs.sqlite
|
||||
];
|
||||
}
|
|
@ -152,17 +152,19 @@ typedef std::unordered_map<std::string, BoneOverride> BoneOverrideMap;
|
|||
class ActiveObject
|
||||
{
|
||||
public:
|
||||
ActiveObject(u16 id):
|
||||
typedef u16 object_t;
|
||||
|
||||
ActiveObject(object_t id):
|
||||
m_id(id)
|
||||
{
|
||||
}
|
||||
|
||||
u16 getId() const
|
||||
object_t getId() const
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
void setId(u16 id)
|
||||
void setId(object_t id)
|
||||
{
|
||||
m_id = id;
|
||||
}
|
||||
|
@ -193,14 +195,22 @@ public:
|
|||
virtual bool collideWithObjects() const = 0;
|
||||
|
||||
|
||||
virtual void setAttachment(int parent_id, const std::string &bone, v3f position,
|
||||
virtual void setAttachment(object_t parent_id, const std::string &bone, v3f position,
|
||||
v3f rotation, bool force_visible) {}
|
||||
virtual void getAttachment(int *parent_id, std::string *bone, v3f *position,
|
||||
virtual void getAttachment(object_t *parent_id, std::string *bone, v3f *position,
|
||||
v3f *rotation, bool *force_visible) const {}
|
||||
// Detach all children
|
||||
virtual void clearChildAttachments() {}
|
||||
virtual void clearParentAttachment() {}
|
||||
virtual void addAttachmentChild(int child_id) {}
|
||||
virtual void removeAttachmentChild(int child_id) {}
|
||||
// Detach from parent
|
||||
virtual void clearParentAttachment()
|
||||
{
|
||||
setAttachment(0, "", v3f(), v3f(), false);
|
||||
}
|
||||
|
||||
// To be be called from setAttachment() and descendants, but not manually!
|
||||
virtual void addAttachmentChild(object_t child_id) {}
|
||||
virtual void removeAttachmentChild(object_t child_id) {}
|
||||
|
||||
protected:
|
||||
u16 m_id; // 0 is invalid, "no id"
|
||||
object_t m_id; // 0 is invalid, "no id"
|
||||
};
|
||||
|
|
|
@ -1594,7 +1594,7 @@ Inventory* Client::getInventory(const InventoryLocation &loc)
|
|||
{
|
||||
// Check if we are working with local player inventory
|
||||
LocalPlayer *player = m_env.getLocalPlayer();
|
||||
if (!player || strcmp(player->getName(), loc.name.c_str()) != 0)
|
||||
if (!player || player->getName() != loc.name)
|
||||
return NULL;
|
||||
return &player->inventory;
|
||||
}
|
||||
|
|
|
@ -368,7 +368,7 @@ void ClientEnvironment::addActiveObject(u16 id, u8 type,
|
|||
void ClientEnvironment::removeActiveObject(u16 id)
|
||||
{
|
||||
// Get current attachment childs to detach them visually
|
||||
std::unordered_set<int> attachment_childs;
|
||||
std::unordered_set<ClientActiveObject::object_t> attachment_childs;
|
||||
if (auto *obj = getActiveObject(id))
|
||||
attachment_childs = obj->getAttachmentChildIds();
|
||||
|
||||
|
|
|
@ -57,8 +57,8 @@ public:
|
|||
virtual bool isLocalPlayer() const { return false; }
|
||||
|
||||
virtual ClientActiveObject *getParent() const { return nullptr; };
|
||||
virtual const std::unordered_set<int> &getAttachmentChildIds() const
|
||||
{ static std::unordered_set<int> rv; return rv; }
|
||||
virtual const std::unordered_set<object_t> &getAttachmentChildIds() const
|
||||
{ static std::unordered_set<object_t> rv; return rv; }
|
||||
virtual void updateAttachments() {};
|
||||
|
||||
virtual bool doShowSelectionBox() { return true; }
|
||||
|
|
|
@ -127,7 +127,7 @@ void Clouds::updateMesh()
|
|||
m_last_noise_center = center_of_drawing_in_noise_i;
|
||||
m_mesh_valid = true;
|
||||
|
||||
const u32 num_faces_to_draw = m_enable_3d ? 6 : 1;
|
||||
const u32 num_faces_to_draw = is3D() ? 6 : 1;
|
||||
|
||||
// The world position of the integer center point of drawing in the noise
|
||||
v2f world_center_of_drawing_in_noise_f = v2f(
|
||||
|
@ -220,7 +220,7 @@ void Clouds::updateMesh()
|
|||
|
||||
const f32 rx = cloud_size / 2.0f;
|
||||
// if clouds are flat, the top layer should be at the given height
|
||||
const f32 ry = m_enable_3d ? m_params.thickness * BS : 0.0f;
|
||||
const f32 ry = is3D() ? m_params.thickness * BS : 0.0f;
|
||||
const f32 rz = cloud_size / 2;
|
||||
|
||||
for(u32 i = 0; i < num_faces_to_draw; i++)
|
||||
|
@ -363,7 +363,7 @@ void Clouds::render()
|
|||
updateAbsolutePosition();
|
||||
}
|
||||
|
||||
m_material.BackfaceCulling = m_enable_3d;
|
||||
m_material.BackfaceCulling = is3D();
|
||||
if (m_enable_shaders)
|
||||
m_material.EmissiveColor = m_color.toSColor();
|
||||
|
||||
|
@ -413,7 +413,7 @@ void Clouds::update(const v3f &camera_p, const video::SColorf &color_diffuse)
|
|||
// is the camera inside the cloud mesh?
|
||||
m_camera_pos = camera_p;
|
||||
m_camera_inside_cloud = false; // default
|
||||
if (m_enable_3d) {
|
||||
if (is3D()) {
|
||||
float camera_height = camera_p.Y - BS * m_camera_offset.Y;
|
||||
if (camera_height >= m_box.MinEdge.Y &&
|
||||
camera_height <= m_box.MaxEdge.Y) {
|
||||
|
|
|
@ -145,6 +145,11 @@ private:
|
|||
|
||||
bool gridFilled(int x, int y) const;
|
||||
|
||||
// Are the clouds 3D?
|
||||
inline bool is3D() const {
|
||||
return m_enable_3d && m_params.thickness >= 0.01f;
|
||||
}
|
||||
|
||||
video::SMaterial m_material;
|
||||
irr_ptr<scene::SMeshBuffer> m_meshbuffer;
|
||||
// Value of m_origin at the time the mesh was last updated
|
||||
|
|
|
@ -385,7 +385,7 @@ void GenericCAO::processInitData(const std::string &data)
|
|||
if (m_is_player) {
|
||||
// Check if it's the current player
|
||||
LocalPlayer *player = m_env->getLocalPlayer();
|
||||
if (player && strcmp(player->getName(), m_name.c_str()) == 0) {
|
||||
if (player && player->getName() == m_name) {
|
||||
m_is_local_player = true;
|
||||
m_is_visible = false;
|
||||
player->setCAO(this);
|
||||
|
@ -465,7 +465,7 @@ scene::IAnimatedMeshSceneNode *GenericCAO::getAnimatedMeshSceneNode() const
|
|||
|
||||
void GenericCAO::setChildrenVisible(bool toset)
|
||||
{
|
||||
for (u16 cao_id : m_attachment_child_ids) {
|
||||
for (object_t cao_id : m_attachment_child_ids) {
|
||||
GenericCAO *obj = m_env->getGenericCAO(cao_id);
|
||||
if (obj) {
|
||||
// Check if the entity is forced to appear in first person.
|
||||
|
@ -474,10 +474,10 @@ void GenericCAO::setChildrenVisible(bool toset)
|
|||
}
|
||||
}
|
||||
|
||||
void GenericCAO::setAttachment(int parent_id, const std::string &bone,
|
||||
void GenericCAO::setAttachment(object_t parent_id, const std::string &bone,
|
||||
v3f position, v3f rotation, bool force_visible)
|
||||
{
|
||||
int old_parent = m_attachment_parent_id;
|
||||
const auto old_parent = m_attachment_parent_id;
|
||||
m_attachment_parent_id = parent_id;
|
||||
m_attachment_bone = bone;
|
||||
m_attachment_position = position;
|
||||
|
@ -509,7 +509,7 @@ void GenericCAO::setAttachment(int parent_id, const std::string &bone,
|
|||
}
|
||||
}
|
||||
|
||||
void GenericCAO::getAttachment(int *parent_id, std::string *bone, v3f *position,
|
||||
void GenericCAO::getAttachment(object_t *parent_id, std::string *bone, v3f *position,
|
||||
v3f *rotation, bool *force_visible) const
|
||||
{
|
||||
*parent_id = m_attachment_parent_id;
|
||||
|
@ -523,29 +523,21 @@ void GenericCAO::clearChildAttachments()
|
|||
{
|
||||
// Cannot use for-loop here: setAttachment() modifies 'm_attachment_child_ids'!
|
||||
while (!m_attachment_child_ids.empty()) {
|
||||
int child_id = *m_attachment_child_ids.begin();
|
||||
const auto child_id = *m_attachment_child_ids.begin();
|
||||
|
||||
if (ClientActiveObject *child = m_env->getActiveObject(child_id))
|
||||
child->setAttachment(0, "", v3f(), v3f(), false);
|
||||
|
||||
removeAttachmentChild(child_id);
|
||||
if (auto *child = m_env->getActiveObject(child_id))
|
||||
child->clearParentAttachment();
|
||||
else
|
||||
removeAttachmentChild(child_id);
|
||||
}
|
||||
}
|
||||
|
||||
void GenericCAO::clearParentAttachment()
|
||||
{
|
||||
if (m_attachment_parent_id)
|
||||
setAttachment(0, "", m_attachment_position, m_attachment_rotation, false);
|
||||
else
|
||||
setAttachment(0, "", v3f(), v3f(), false);
|
||||
}
|
||||
|
||||
void GenericCAO::addAttachmentChild(int child_id)
|
||||
void GenericCAO::addAttachmentChild(object_t child_id)
|
||||
{
|
||||
m_attachment_child_ids.insert(child_id);
|
||||
}
|
||||
|
||||
void GenericCAO::removeAttachmentChild(int child_id)
|
||||
void GenericCAO::removeAttachmentChild(object_t child_id)
|
||||
{
|
||||
m_attachment_child_ids.erase(child_id);
|
||||
}
|
||||
|
|
|
@ -106,8 +106,8 @@ private:
|
|||
// stores position and rotation for each bone name
|
||||
BoneOverrideMap m_bone_override;
|
||||
|
||||
int m_attachment_parent_id = 0;
|
||||
std::unordered_set<int> m_attachment_child_ids;
|
||||
object_t m_attachment_parent_id = 0;
|
||||
std::unordered_set<object_t> m_attachment_child_ids;
|
||||
std::string m_attachment_bone = "";
|
||||
v3f m_attachment_position;
|
||||
v3f m_attachment_rotation;
|
||||
|
@ -226,16 +226,15 @@ public:
|
|||
}
|
||||
|
||||
void setChildrenVisible(bool toset);
|
||||
void setAttachment(int parent_id, const std::string &bone, v3f position,
|
||||
void setAttachment(object_t parent_id, const std::string &bone, v3f position,
|
||||
v3f rotation, bool force_visible) override;
|
||||
void getAttachment(int *parent_id, std::string *bone, v3f *position,
|
||||
void getAttachment(object_t *parent_id, std::string *bone, v3f *position,
|
||||
v3f *rotation, bool *force_visible) const override;
|
||||
void clearChildAttachments() override;
|
||||
void clearParentAttachment() override;
|
||||
void addAttachmentChild(int child_id) override;
|
||||
void removeAttachmentChild(int child_id) override;
|
||||
void addAttachmentChild(object_t child_id) override;
|
||||
void removeAttachmentChild(object_t child_id) override;
|
||||
ClientActiveObject *getParent() const override;
|
||||
const std::unordered_set<int> &getAttachmentChildIds() const override
|
||||
const std::unordered_set<object_t> &getAttachmentChildIds() const override
|
||||
{ return m_attachment_child_ids; }
|
||||
void updateAttachments() override;
|
||||
|
||||
|
|
|
@ -2188,12 +2188,14 @@ void Game::processItemSelection(u16 *new_playeritem)
|
|||
{
|
||||
LocalPlayer *player = client->getEnv().getLocalPlayer();
|
||||
|
||||
*new_playeritem = player->getWieldIndex();
|
||||
u16 max_item = player->getMaxHotbarItemcount();
|
||||
if (max_item == 0)
|
||||
return;
|
||||
max_item -= 1;
|
||||
|
||||
/* Item selection using mouse wheel
|
||||
*/
|
||||
*new_playeritem = player->getWieldIndex();
|
||||
u16 max_item = MYMIN(PLAYER_INVENTORY_SIZE - 1,
|
||||
player->hud_hotbar_itemcount - 1);
|
||||
|
||||
s32 wheel = input->getMouseWheel();
|
||||
if (!m_enable_hotbar_mouse_wheel)
|
||||
wheel = 0;
|
||||
|
|
|
@ -783,7 +783,7 @@ void Hud::drawHotbar(u16 playeritem)
|
|||
|
||||
v2s32 centerlowerpos(m_displaycenter.X, m_screensize.Y);
|
||||
|
||||
s32 hotbar_itemcount = player->hud_hotbar_itemcount;
|
||||
s32 hotbar_itemcount = player->getMaxHotbarItemcount();
|
||||
s32 width = hotbar_itemcount * (m_hotbar_imagesize + m_padding * 2);
|
||||
v2s32 pos = centerlowerpos - v2s32(width / 2, m_hotbar_imagesize + m_padding * 3);
|
||||
|
||||
|
|
|
@ -371,14 +371,12 @@ void blitBaseImage(video::IImage* &src, video::IImage* &dst)
|
|||
|
||||
namespace {
|
||||
|
||||
/** Calculate the color of a single pixel drawn on top of another pixel without
|
||||
* gamma correction
|
||||
/** Calculate the result of the overlay texture modifier (`^`) for a single
|
||||
* pixel
|
||||
*
|
||||
* The color mixing is a little more complicated than just
|
||||
* video::SColor::getInterpolated because getInterpolated does not handle alpha
|
||||
* correctly.
|
||||
* For example, a pixel with alpha=64 drawn atop a pixel with alpha=128 should
|
||||
* yield a pixel with alpha=160, while getInterpolated would yield alpha=96.
|
||||
* This is not alpha blending if both src and dst are semi-transparent. The
|
||||
* reason this is that an old implementation did it wrong, and fixing it would
|
||||
* break backwards compatibility (see #14847).
|
||||
*
|
||||
* \tparam overlay If enabled, only modify dst_col if it is fully opaque
|
||||
* \param src_col Color of the top pixel
|
||||
|
|
|
@ -75,7 +75,7 @@ void PlayerSettings::settingsChangedCallback(const std::string &name, void *data
|
|||
LocalPlayer
|
||||
*/
|
||||
|
||||
LocalPlayer::LocalPlayer(Client *client, const char *name):
|
||||
LocalPlayer::LocalPlayer(Client *client, const std::string &name):
|
||||
Player(name, client->idef()),
|
||||
m_client(client)
|
||||
{
|
||||
|
|
|
@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "constants.h"
|
||||
#include "settings.h"
|
||||
#include "lighting.h"
|
||||
#include <string>
|
||||
|
||||
class Client;
|
||||
class Environment;
|
||||
|
@ -63,7 +64,8 @@ private:
|
|||
class LocalPlayer : public Player
|
||||
{
|
||||
public:
|
||||
LocalPlayer(Client *client, const char *name);
|
||||
|
||||
LocalPlayer(Client *client, const std::string &name);
|
||||
virtual ~LocalPlayer();
|
||||
|
||||
// Initialize hp to 0, so that no hearts will be shown if server
|
||||
|
|
|
@ -48,8 +48,7 @@ void PlayerDatabaseFiles::deSerialize(RemotePlayer *p, std::istream &is,
|
|||
|
||||
p->m_dirty = true;
|
||||
//args.getS32("version"); // Version field value not used
|
||||
const std::string &name = args.get("name");
|
||||
strlcpy(p->m_name, name.c_str(), PLAYERNAME_SIZE);
|
||||
p->m_name = args.get("name");
|
||||
|
||||
if (sao) {
|
||||
try {
|
||||
|
@ -96,7 +95,7 @@ void PlayerDatabaseFiles::deSerialize(RemotePlayer *p, std::istream &is,
|
|||
p->inventory.deSerialize(is);
|
||||
} catch (SerializationError &e) {
|
||||
errorstream << "Failed to deserialize player inventory. player_name="
|
||||
<< name << " " << e.what() << std::endl;
|
||||
<< p->getName() << " " << e.what() << std::endl;
|
||||
}
|
||||
|
||||
if (!p->inventory.getList("craftpreview") && p->inventory.getList("craftresult")) {
|
||||
|
@ -119,7 +118,7 @@ void PlayerDatabaseFiles::serialize(RemotePlayer *p, std::ostream &os)
|
|||
// Utilize a Settings object for storing values
|
||||
Settings args("PlayerArgsEnd");
|
||||
args.setS32("version", 1);
|
||||
args.set("name", p->m_name);
|
||||
args.set("name", p->getName());
|
||||
|
||||
PlayerSAO *sao = p->getPlayerSAO();
|
||||
// This should not happen
|
||||
|
@ -171,7 +170,7 @@ void PlayerDatabaseFiles::savePlayer(RemotePlayer *player)
|
|||
|
||||
deSerialize(&testplayer, is, path, NULL);
|
||||
is.close();
|
||||
if (strcmp(testplayer.getName(), player->getName()) == 0) {
|
||||
if (testplayer.getName() == player->getName()) {
|
||||
path_found = true;
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -468,7 +468,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
|
|||
std::string hp = itos(sao->getHP());
|
||||
std::string breath = itos(sao->getBreath());
|
||||
const char *values[] = {
|
||||
player->getName(),
|
||||
player->getName().c_str(),
|
||||
pitch.c_str(),
|
||||
yaw.c_str(),
|
||||
posx.c_str(), posy.c_str(), posz.c_str(),
|
||||
|
@ -476,7 +476,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
|
|||
breath.c_str()
|
||||
};
|
||||
|
||||
const char* rmvalues[] = { player->getName() };
|
||||
const char* rmvalues[] = { player->getName().c_str() };
|
||||
beginSave();
|
||||
|
||||
if (getPGVersion() < 90500) {
|
||||
|
@ -501,7 +501,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
|
|||
inv_id = itos(i), lsize = itos(list->getSize());
|
||||
|
||||
const char* inv_values[] = {
|
||||
player->getName(),
|
||||
player->getName().c_str(),
|
||||
inv_id.c_str(),
|
||||
width.c_str(),
|
||||
name.c_str(),
|
||||
|
@ -516,7 +516,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
|
|||
std::string itemStr = oss.str(), slotId = itos(j);
|
||||
|
||||
const char* invitem_values[] = {
|
||||
player->getName(),
|
||||
player->getName().c_str(),
|
||||
inv_id.c_str(),
|
||||
slotId.c_str(),
|
||||
itemStr.c_str()
|
||||
|
@ -529,7 +529,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
|
|||
const StringMap &attrs = sao->getMeta().getStrings();
|
||||
for (const auto &attr : attrs) {
|
||||
const char *meta_values[] = {
|
||||
player->getName(),
|
||||
player->getName().c_str(),
|
||||
attr.first.c_str(),
|
||||
attr.second.c_str()
|
||||
};
|
||||
|
@ -545,7 +545,7 @@ bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
|
|||
sanity_check(sao);
|
||||
verifyDatabase();
|
||||
|
||||
const char *values[] = { player->getName() };
|
||||
const char *values[] = { player->getName().c_str() };
|
||||
PGresult *results = execPrepared("load_player", 1, values, false, false);
|
||||
|
||||
// Player not found, return not found
|
||||
|
@ -580,7 +580,7 @@ bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
|
|||
std::string invIdStr = itos(invId);
|
||||
|
||||
const char* values2[] = {
|
||||
player->getName(),
|
||||
player->getName().c_str(),
|
||||
invIdStr.c_str()
|
||||
};
|
||||
PGresult *results2 = execPrepared("load_player_inventory_items", 2,
|
||||
|
|
|
@ -299,6 +299,7 @@ void set_default_settings()
|
|||
settings->setDefault("gui_scaling", "1.0");
|
||||
settings->setDefault("gui_scaling_filter", "false");
|
||||
settings->setDefault("gui_scaling_filter_txr2img", "true");
|
||||
settings->setDefault("smooth_scrolling", "true");
|
||||
settings->setDefault("desynchronize_mapblock_texture_animation", "false");
|
||||
settings->setDefault("hud_hotbar_max_width", "1.0");
|
||||
settings->setDefault("enable_local_map_saving", "false");
|
||||
|
@ -536,6 +537,7 @@ void set_default_settings()
|
|||
settings->setDefault("server_address", "");
|
||||
settings->setDefault("server_name", "");
|
||||
settings->setDefault("server_description", "");
|
||||
settings->setDefault("server_announce_send_players", "true");
|
||||
|
||||
settings->setDefault("enable_console", "false");
|
||||
settings->setDefault("display_density_factor", "1");
|
||||
|
|
|
@ -697,32 +697,43 @@ bool MoveDir(const std::string &source, const std::string &target)
|
|||
|
||||
bool PathStartsWith(const std::string &path, const std::string &prefix)
|
||||
{
|
||||
if (prefix.empty())
|
||||
return path.empty();
|
||||
size_t pathsize = path.size();
|
||||
size_t pathpos = 0;
|
||||
size_t prefixsize = prefix.size();
|
||||
size_t prefixpos = 0;
|
||||
for(;;){
|
||||
// Test if current characters at path and prefix are delimiter OR EOS
|
||||
bool delim1 = pathpos == pathsize
|
||||
|| IsDirDelimiter(path[pathpos]);
|
||||
bool delim2 = prefixpos == prefixsize
|
||||
|| IsDirDelimiter(prefix[prefixpos]);
|
||||
|
||||
// Return false if it's delimiter/EOS in one path but not in the other
|
||||
if(delim1 != delim2)
|
||||
return false;
|
||||
|
||||
if(delim1){
|
||||
// Skip consequent delimiters in path, in prefix
|
||||
while(pathpos < pathsize &&
|
||||
IsDirDelimiter(path[pathpos]))
|
||||
++pathpos;
|
||||
while(prefixpos < prefixsize &&
|
||||
IsDirDelimiter(prefix[prefixpos]))
|
||||
++prefixpos;
|
||||
// Return true if prefix has ended (at delimiter/EOS)
|
||||
if(prefixpos == prefixsize)
|
||||
return true;
|
||||
// Return false if path has ended (at delimiter/EOS)
|
||||
// while prefix did not.
|
||||
if(pathpos == pathsize)
|
||||
return false;
|
||||
}
|
||||
else{
|
||||
// Skip pairwise-equal characters in path and prefix until
|
||||
// delimiter/EOS in path or prefix.
|
||||
// Return false if differing characters are met.
|
||||
size_t len = 0;
|
||||
do{
|
||||
char pathchar = path[pathpos+len];
|
||||
|
|
|
@ -342,7 +342,7 @@ void GUIFormSpecMenu::parseContainer(parserData* data, const std::string &elemen
|
|||
errorstream<< "Invalid container start element (" << parts.size() << "): '" << element << "'" << std::endl;
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseContainerEnd(parserData* data)
|
||||
void GUIFormSpecMenu::parseContainerEnd(parserData* data, const std::string &)
|
||||
{
|
||||
if (container_stack.empty()) {
|
||||
errorstream<< "Invalid container end element, no matching container start element" << std::endl;
|
||||
|
@ -419,7 +419,7 @@ void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string &
|
|||
pos_offset.Y = 0.0f;
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data)
|
||||
void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data, const std::string &)
|
||||
{
|
||||
if (data->current_parent == this || data->current_parent->getParent() == this ||
|
||||
container_stack.empty()) {
|
||||
|
@ -641,6 +641,11 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data, const std::string &element
|
|||
m_fields.push_back(spec);
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseRealCoordinates(parserData* data, const std::string &element)
|
||||
{
|
||||
data->real_coordinates = is_yes(element);
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseScrollBar(parserData* data, const std::string &element)
|
||||
{
|
||||
std::vector<std::string> parts;
|
||||
|
@ -973,10 +978,9 @@ void GUIFormSpecMenu::parseItemImage(parserData* data, const std::string &elemen
|
|||
m_fields.push_back(spec);
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element,
|
||||
const std::string &type)
|
||||
void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element)
|
||||
{
|
||||
int expected_parts = (type == "button_url" || type == "button_url_exit") ? 5 : 4;
|
||||
int expected_parts = (data->type == "button_url" || data->type == "button_url_exit") ? 5 : 4;
|
||||
std::vector<std::string> parts;
|
||||
if (!precheckElement("button", element, expected_parts, expected_parts, parts))
|
||||
return;
|
||||
|
@ -986,7 +990,7 @@ void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element,
|
|||
std::string name = parts[2];
|
||||
std::string label = parts[3];
|
||||
std::string url;
|
||||
if (type == "button_url" || type == "button_url_exit")
|
||||
if (data->type == "button_url" || data->type == "button_url_exit")
|
||||
url = parts[4];
|
||||
|
||||
MY_CHECKPOS("button",0);
|
||||
|
@ -1022,15 +1026,15 @@ void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element,
|
|||
258 + m_fields.size()
|
||||
);
|
||||
spec.ftype = f_Button;
|
||||
if (type == "button_exit" || type == "button_url_exit")
|
||||
if (data->type == "button_exit" || data->type == "button_url_exit")
|
||||
spec.is_exit = true;
|
||||
if (type == "button_url" || type == "button_url_exit")
|
||||
if (data->type == "button_url" || data->type == "button_url_exit")
|
||||
spec.url = url;
|
||||
|
||||
GUIButton *e = GUIButton::addButton(Environment, rect, m_tsrc,
|
||||
data->current_parent, spec.fid, spec.flabel.c_str());
|
||||
|
||||
auto style = getStyleForElement(type, name, (type != "button") ? "button" : "");
|
||||
auto style = getStyleForElement(data->type, name, (data->type != "button") ? "button" : "");
|
||||
|
||||
spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, "");
|
||||
|
||||
|
@ -1188,7 +1192,9 @@ void GUIFormSpecMenu::parseTable(parserData* data, const std::string &element)
|
|||
std::vector<std::string> v_pos = split(parts[0],',');
|
||||
std::vector<std::string> v_geom = split(parts[1],',');
|
||||
std::string name = parts[2];
|
||||
std::vector<std::string> items = split(parts[3],',');
|
||||
std::vector<std::string> items;
|
||||
if (!parts[3].empty())
|
||||
items = split(parts[3],',');
|
||||
std::string str_initial_selection;
|
||||
|
||||
if (parts.size() >= 5)
|
||||
|
@ -1258,7 +1264,9 @@ void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element
|
|||
std::vector<std::string> v_pos = split(parts[0],',');
|
||||
std::vector<std::string> v_geom = split(parts[1],',');
|
||||
std::string name = parts[2];
|
||||
std::vector<std::string> items = split(parts[3],',');
|
||||
std::vector<std::string> items;
|
||||
if (!parts[3].empty())
|
||||
items = split(parts[3],',');
|
||||
std::string str_initial_selection;
|
||||
std::string str_transparent = "false";
|
||||
|
||||
|
@ -1686,11 +1694,10 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, std::vector<std::string>&
|
|||
m_fields.push_back(spec);
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseField(parserData* data, const std::string &element,
|
||||
const std::string &type)
|
||||
void GUIFormSpecMenu::parseField(parserData* data, const std::string &element)
|
||||
{
|
||||
std::vector<std::string> parts;
|
||||
if (!precheckElement(type, element, 3, 5, parts))
|
||||
if (!precheckElement(data->type, element, 3, 5, parts))
|
||||
return;
|
||||
|
||||
if (parts.size() == 3 || parts.size() == 4) {
|
||||
|
@ -1699,7 +1706,7 @@ void GUIFormSpecMenu::parseField(parserData* data, const std::string &element,
|
|||
}
|
||||
|
||||
// Else: >= 5 arguments in "parts"
|
||||
parseTextArea(data, parts, type);
|
||||
parseTextArea(data, parts, data->type);
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &element)
|
||||
|
@ -1922,8 +1929,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &elemen
|
|||
m_clickthrough_elements.push_back(e);
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &element,
|
||||
const std::string &type)
|
||||
void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &element)
|
||||
{
|
||||
std::vector<std::string> parts;
|
||||
if (!precheckElement("image_button", element, 5, 8, parts))
|
||||
|
@ -1980,7 +1986,8 @@ void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &elem
|
|||
258 + m_fields.size()
|
||||
);
|
||||
spec.ftype = f_Button;
|
||||
if (type == "image_button_exit")
|
||||
|
||||
if (data->type == "image_button_exit")
|
||||
spec.is_exit = true;
|
||||
|
||||
GUIButtonImage *e = GUIButtonImage::addButton(Environment, rect, m_tsrc,
|
||||
|
@ -2580,14 +2587,21 @@ void GUIFormSpecMenu::parsePadding(parserData *data, const std::string &element)
|
|||
<< "'" << std::endl;
|
||||
}
|
||||
|
||||
bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, bool style_type)
|
||||
void GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element)
|
||||
{
|
||||
if (data->type != "style" && data->type != "style_type") {
|
||||
errorstream << "Invalid style element type: '" << data->type << "'" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
bool style_type = (data->type == "style_type");
|
||||
|
||||
std::vector<std::string> parts = split(element, ';');
|
||||
|
||||
if (parts.size() < 2) {
|
||||
errorstream << "Invalid style element (" << parts.size() << "): '" << element
|
||||
<< "'" << std::endl;
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
StyleSpec spec;
|
||||
|
@ -2598,7 +2612,7 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b
|
|||
if (equal_pos == std::string::npos) {
|
||||
errorstream << "Invalid style element (Property missing value): '" << element
|
||||
<< "'" << std::endl;
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
std::string propname = trim(parts[i].substr(0, equal_pos));
|
||||
|
@ -2713,10 +2727,10 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b
|
|||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseSetFocus(const std::string &element)
|
||||
void GUIFormSpecMenu::parseSetFocus(parserData*, const std::string &element)
|
||||
{
|
||||
std::vector<std::string> parts;
|
||||
if (!precheckElement("set_focus", element, 1, 2, parts))
|
||||
|
@ -2842,6 +2856,55 @@ void GUIFormSpecMenu::removeAll()
|
|||
scroll_container_it.second->drop();
|
||||
}
|
||||
|
||||
const std::unordered_map<std::string, std::function<void(GUIFormSpecMenu*, GUIFormSpecMenu::parserData *data,
|
||||
const std::string &description)>> GUIFormSpecMenu::element_parsers = {
|
||||
{"container", &GUIFormSpecMenu::parseContainer},
|
||||
{"container_end", &GUIFormSpecMenu::parseContainerEnd},
|
||||
{"list", &GUIFormSpecMenu::parseList},
|
||||
{"listring", &GUIFormSpecMenu::parseListRing},
|
||||
{"checkbox", &GUIFormSpecMenu::parseCheckbox},
|
||||
{"image", &GUIFormSpecMenu::parseImage},
|
||||
{"animated_image", &GUIFormSpecMenu::parseAnimatedImage},
|
||||
{"item_image", &GUIFormSpecMenu::parseItemImage},
|
||||
{"button", &GUIFormSpecMenu::parseButton},
|
||||
{"button_exit", &GUIFormSpecMenu::parseButton},
|
||||
{"button_url", &GUIFormSpecMenu::parseButton},
|
||||
{"button_url_exit", &GUIFormSpecMenu::parseButton},
|
||||
{"background", &GUIFormSpecMenu::parseBackground},
|
||||
{"background9", &GUIFormSpecMenu::parseBackground},
|
||||
{"tableoptions", &GUIFormSpecMenu::parseTableOptions},
|
||||
{"tablecolumns", &GUIFormSpecMenu::parseTableColumns},
|
||||
{"table", &GUIFormSpecMenu::parseTable},
|
||||
{"textlist", &GUIFormSpecMenu::parseTextList},
|
||||
{"dropdown", &GUIFormSpecMenu::parseDropDown},
|
||||
{"field_enter_after_edit", &GUIFormSpecMenu::parseFieldEnterAfterEdit},
|
||||
{"field_close_on_enter", &GUIFormSpecMenu::parseFieldCloseOnEnter},
|
||||
{"pwdfield", &GUIFormSpecMenu::parsePwdField},
|
||||
{"field", &GUIFormSpecMenu::parseField},
|
||||
{"textarea", &GUIFormSpecMenu::parseField},
|
||||
{"hypertext", &GUIFormSpecMenu::parseHyperText},
|
||||
{"label", &GUIFormSpecMenu::parseLabel},
|
||||
{"vertlabel", &GUIFormSpecMenu::parseVertLabel},
|
||||
{"item_image_button", &GUIFormSpecMenu::parseItemImageButton},
|
||||
{"image_button", &GUIFormSpecMenu::parseImageButton},
|
||||
{"image_button_exit", &GUIFormSpecMenu::parseImageButton},
|
||||
{"tabheader", &GUIFormSpecMenu::parseTabHeader},
|
||||
{"box", &GUIFormSpecMenu::parseBox},
|
||||
{"bgcolor", &GUIFormSpecMenu::parseBackgroundColor},
|
||||
{"listcolors", &GUIFormSpecMenu::parseListColors},
|
||||
{"tooltip", &GUIFormSpecMenu::parseTooltip},
|
||||
{"scrollbar", &GUIFormSpecMenu::parseScrollBar},
|
||||
{"real_coordinates", &GUIFormSpecMenu::parseRealCoordinates},
|
||||
{"style", &GUIFormSpecMenu::parseStyle},
|
||||
{"style_type", &GUIFormSpecMenu::parseStyle},
|
||||
{"scrollbaroptions", &GUIFormSpecMenu::parseScrollBarOptions},
|
||||
{"scroll_container", &GUIFormSpecMenu::parseScrollContainer},
|
||||
{"scroll_container_end", &GUIFormSpecMenu::parseScrollContainerEnd},
|
||||
{"set_focus", &GUIFormSpecMenu::parseSetFocus},
|
||||
{"model", &GUIFormSpecMenu::parseModel},
|
||||
};
|
||||
|
||||
|
||||
void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element)
|
||||
{
|
||||
//some prechecks
|
||||
|
@ -2858,195 +2921,15 @@ void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element)
|
|||
std::string type = trim(element.substr(0, pos));
|
||||
std::string description = element.substr(pos+1);
|
||||
|
||||
if (type == "container") {
|
||||
parseContainer(data, description);
|
||||
// They remain here due to bool flags, for now
|
||||
data->type = type;
|
||||
|
||||
auto it = element_parsers.find(type);
|
||||
if (it != element_parsers.end()) {
|
||||
it->second(this, data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "container_end") {
|
||||
parseContainerEnd(data);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "list") {
|
||||
parseList(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "listring") {
|
||||
parseListRing(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "checkbox") {
|
||||
parseCheckbox(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "image") {
|
||||
parseImage(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "animated_image") {
|
||||
parseAnimatedImage(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "item_image") {
|
||||
parseItemImage(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "button" || type == "button_exit" || type == "button_url" || type == "button_url_exit") {
|
||||
parseButton(data, description, type);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "background" || type == "background9") {
|
||||
parseBackground(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "tableoptions"){
|
||||
parseTableOptions(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "tablecolumns"){
|
||||
parseTableColumns(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "table"){
|
||||
parseTable(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "textlist"){
|
||||
parseTextList(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "dropdown"){
|
||||
parseDropDown(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "field_enter_after_edit") {
|
||||
parseFieldEnterAfterEdit(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "field_close_on_enter") {
|
||||
parseFieldCloseOnEnter(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "pwdfield") {
|
||||
parsePwdField(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((type == "field") || (type == "textarea")){
|
||||
parseField(data,description,type);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "hypertext") {
|
||||
parseHyperText(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "label") {
|
||||
parseLabel(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "vertlabel") {
|
||||
parseVertLabel(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "item_image_button") {
|
||||
parseItemImageButton(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((type == "image_button") || (type == "image_button_exit")) {
|
||||
parseImageButton(data,description,type);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "tabheader") {
|
||||
parseTabHeader(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "box") {
|
||||
parseBox(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "bgcolor") {
|
||||
parseBackgroundColor(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "listcolors") {
|
||||
parseListColors(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "tooltip") {
|
||||
parseTooltip(data,description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "scrollbar") {
|
||||
parseScrollBar(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "real_coordinates") {
|
||||
data->real_coordinates = is_yes(description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "style") {
|
||||
parseStyle(data, description, false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "style_type") {
|
||||
parseStyle(data, description, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "scrollbaroptions") {
|
||||
parseScrollBarOptions(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "scroll_container") {
|
||||
parseScrollContainer(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "scroll_container_end") {
|
||||
parseScrollContainerEnd(data);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "set_focus") {
|
||||
parseSetFocus(description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "model") {
|
||||
parseModel(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
// Ignore others
|
||||
infostream << "Unknown DrawSpec: type=" << type << ", data=\"" << description << "\""
|
||||
|
|
|
@ -423,8 +423,11 @@ private:
|
|||
|
||||
// used to restore table selection/scroll/treeview state
|
||||
std::unordered_map<std::string, GUITable::DynamicData> table_dyndata;
|
||||
std::string type;
|
||||
};
|
||||
|
||||
static const std::unordered_map<std::string, std::function<void(GUIFormSpecMenu*, GUIFormSpecMenu::parserData *data, const std::string &description)>> element_parsers;
|
||||
|
||||
struct fs_key_pending {
|
||||
bool key_up;
|
||||
bool key_down;
|
||||
|
@ -442,17 +445,16 @@ private:
|
|||
|
||||
void parseSize(parserData* data, const std::string &element);
|
||||
void parseContainer(parserData* data, const std::string &element);
|
||||
void parseContainerEnd(parserData* data);
|
||||
void parseContainerEnd(parserData* data, const std::string &element);
|
||||
void parseScrollContainer(parserData *data, const std::string &element);
|
||||
void parseScrollContainerEnd(parserData *data);
|
||||
void parseScrollContainerEnd(parserData *data, const std::string &element);
|
||||
void parseList(parserData* data, const std::string &element);
|
||||
void parseListRing(parserData* data, const std::string &element);
|
||||
void parseCheckbox(parserData* data, const std::string &element);
|
||||
void parseImage(parserData* data, const std::string &element);
|
||||
void parseAnimatedImage(parserData *data, const std::string &element);
|
||||
void parseItemImage(parserData* data, const std::string &element);
|
||||
void parseButton(parserData* data, const std::string &element,
|
||||
const std::string &typ);
|
||||
void parseButton(parserData* data, const std::string &element);
|
||||
void parseBackground(parserData* data, const std::string &element);
|
||||
void parseTableOptions(parserData* data, const std::string &element);
|
||||
void parseTableColumns(parserData* data, const std::string &element);
|
||||
|
@ -462,7 +464,7 @@ private:
|
|||
void parseFieldEnterAfterEdit(parserData *data, const std::string &element);
|
||||
void parseFieldCloseOnEnter(parserData *data, const std::string &element);
|
||||
void parsePwdField(parserData* data, const std::string &element);
|
||||
void parseField(parserData* data, const std::string &element, const std::string &type);
|
||||
void parseField(parserData* data, const std::string &element);
|
||||
void createTextField(parserData *data, FieldSpec &spec,
|
||||
core::rect<s32> &rect, bool is_multiline);
|
||||
void parseSimpleField(parserData* data,std::vector<std::string> &parts);
|
||||
|
@ -471,8 +473,7 @@ private:
|
|||
void parseHyperText(parserData *data, const std::string &element);
|
||||
void parseLabel(parserData* data, const std::string &element);
|
||||
void parseVertLabel(parserData* data, const std::string &element);
|
||||
void parseImageButton(parserData* data, const std::string &element,
|
||||
const std::string &type);
|
||||
void parseImageButton(parserData* data, const std::string &element);
|
||||
void parseItemImageButton(parserData* data, const std::string &element);
|
||||
void parseTabHeader(parserData* data, const std::string &element);
|
||||
void parseBox(parserData* data, const std::string &element);
|
||||
|
@ -481,6 +482,7 @@ private:
|
|||
void parseTooltip(parserData* data, const std::string &element);
|
||||
bool parseVersionDirect(const std::string &data);
|
||||
bool parseSizeDirect(parserData* data, const std::string &element);
|
||||
void parseRealCoordinates(parserData* data, const std::string &element);
|
||||
void parseScrollBar(parserData* data, const std::string &element);
|
||||
void parseScrollBarOptions(parserData *data, const std::string &element);
|
||||
bool parsePositionDirect(parserData *data, const std::string &element);
|
||||
|
@ -489,8 +491,8 @@ private:
|
|||
void parseAnchor(parserData *data, const std::string &element);
|
||||
bool parsePaddingDirect(parserData *data, const std::string &element);
|
||||
void parsePadding(parserData *data, const std::string &element);
|
||||
bool parseStyle(parserData *data, const std::string &element, bool style_type);
|
||||
void parseSetFocus(const std::string &element);
|
||||
void parseStyle(parserData *data, const std::string &element);
|
||||
void parseSetFocus(parserData *, const std::string &element);
|
||||
void parseModel(parserData *data, const std::string &element);
|
||||
|
||||
bool parseMiddleRect(const std::string &value, core::rect<s32> *parsed_rect);
|
||||
|
|
|
@ -377,6 +377,7 @@ void GUIKeyChangeMenu::add_key(int id, std::wstring button_name, const std::stri
|
|||
key_settings.push_back(k);
|
||||
}
|
||||
|
||||
// compare with button_titles in touchscreengui.cpp
|
||||
void GUIKeyChangeMenu::init_keys()
|
||||
{
|
||||
this->add_key(GUI_ID_KEY_FORWARD_BUTTON, wstrgettext("Forward"), "keymap_forward");
|
||||
|
|
|
@ -13,6 +13,7 @@ the arrow buttons where there is insufficient space.
|
|||
#include "guiScrollBar.h"
|
||||
#include "guiButton.h"
|
||||
#include "porting.h"
|
||||
#include "settings.h"
|
||||
#include <IGUISkin.h>
|
||||
|
||||
GUIScrollBar::GUIScrollBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id,
|
||||
|
@ -101,19 +102,9 @@ bool GUIScrollBar::OnEvent(const SEvent &event)
|
|||
tray_clicked = !dragged_by_slider;
|
||||
if (tray_clicked) {
|
||||
const s32 new_pos = getPosFromMousePos(p);
|
||||
const s32 old_pos = scroll_pos;
|
||||
setPos(new_pos);
|
||||
setPosAndSend(new_pos);
|
||||
// drag in the middle
|
||||
drag_offset = thumb_size / 2;
|
||||
// report the scroll event
|
||||
if (scroll_pos != old_pos && Parent) {
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = nullptr;
|
||||
e.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
}
|
||||
Environment->setFocus(this);
|
||||
return true;
|
||||
|
@ -147,18 +138,8 @@ bool GUIScrollBar::OnEvent(const SEvent &event)
|
|||
}
|
||||
|
||||
const s32 new_pos = getPosFromMousePos(p);
|
||||
const s32 old_pos = scroll_pos;
|
||||
setPosAndSend(new_pos);
|
||||
|
||||
setPos(new_pos);
|
||||
|
||||
if (scroll_pos != old_pos && Parent) {
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = nullptr;
|
||||
e.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
return is_inside;
|
||||
}
|
||||
default:
|
||||
|
@ -300,8 +281,27 @@ void GUIScrollBar::setPos(const s32 &pos)
|
|||
target_pos = std::nullopt;
|
||||
}
|
||||
|
||||
void GUIScrollBar::setPosAndSend(const s32 &pos)
|
||||
{
|
||||
const s32 old_pos = scroll_pos;
|
||||
setPos(pos);
|
||||
if (scroll_pos != old_pos && Parent) {
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = nullptr;
|
||||
e.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
}
|
||||
|
||||
void GUIScrollBar::setPosInterpolated(const s32 &pos)
|
||||
{
|
||||
if (!g_settings->getBool("smooth_scrolling")) {
|
||||
setPosAndSend(pos);
|
||||
return;
|
||||
}
|
||||
|
||||
s32 clamped = core::s32_clamp(pos, min_pos, max_pos);
|
||||
if (scroll_pos != clamped) {
|
||||
target_pos = clamped;
|
||||
|
|
|
@ -53,6 +53,8 @@ public:
|
|||
//! Sets a position immediately, aborting any ongoing interpolation.
|
||||
// setPos does not send EGET_SCROLL_BAR_CHANGED events for you.
|
||||
void setPos(const s32 &pos);
|
||||
//! The same as setPos, but it takes care of sending EGET_SCROLL_BAR_CHANGED events.
|
||||
void setPosAndSend(const s32 &pos);
|
||||
//! Sets a target position for interpolation.
|
||||
// If you want to do an interpolated addition, use
|
||||
// setPosInterpolated(getTargetPos() + x).
|
||||
|
|
|
@ -319,6 +319,11 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
|
|||
}
|
||||
#endif
|
||||
|
||||
// If the second touch arrives here again, that means nobody handled it.
|
||||
// Abort to avoid infinite recursion.
|
||||
if (m_second_touch)
|
||||
return true;
|
||||
|
||||
// Convert touch events into mouse events.
|
||||
if (event.EventType == EET_TOUCH_INPUT_EVENT) {
|
||||
irr_ptr<GUIModalMenu> holder;
|
||||
|
|
|
@ -31,6 +31,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "client/keycode.h"
|
||||
#include "client/renderingengine.h"
|
||||
#include "util/numeric.h"
|
||||
#include "gettext.h"
|
||||
#include "IGUIStaticText.h"
|
||||
#include "IGUIFont.h"
|
||||
#include <ISceneCollisionManager.h>
|
||||
|
||||
#include <iostream>
|
||||
|
@ -43,8 +46,7 @@ static const char *button_image_names[] = {
|
|||
"down.png",
|
||||
"zoom.png",
|
||||
"aux1_btn.png",
|
||||
"gear_icon.png",
|
||||
"rare_controls.png",
|
||||
"overflow_btn.png",
|
||||
|
||||
"fly_btn.png",
|
||||
"noclip_btn.png",
|
||||
|
@ -65,6 +67,33 @@ static const char *button_image_names[] = {
|
|||
"joystick_center.png",
|
||||
};
|
||||
|
||||
// compare with GUIKeyChangeMenu::init_keys
|
||||
static const char *button_titles[] = {
|
||||
N_("Jump"),
|
||||
N_("Sneak"),
|
||||
N_("Zoom"),
|
||||
N_("Aux1"),
|
||||
N_("Overflow menu"),
|
||||
|
||||
N_("Toggle fly"),
|
||||
N_("Toggle noclip"),
|
||||
N_("Toggle fast"),
|
||||
N_("Toggle debug"),
|
||||
N_("Change camera"),
|
||||
N_("Range select"),
|
||||
N_("Toggle minimap"),
|
||||
N_("Toggle chat log"),
|
||||
|
||||
N_("Chat"),
|
||||
N_("Inventory"),
|
||||
N_("Drop"),
|
||||
N_("Exit"),
|
||||
|
||||
N_("Joystick"),
|
||||
N_("Joystick"),
|
||||
N_("Joystick"),
|
||||
};
|
||||
|
||||
static void load_button_texture(IGUIImage *gui_button, const std::string &path,
|
||||
const recti &button_rect, ISimpleTextureSource *tsrc, video::IVideoDriver *driver)
|
||||
{
|
||||
|
@ -243,165 +272,6 @@ static EKEY_CODE id_to_keycode(touch_gui_button_id id)
|
|||
return code;
|
||||
}
|
||||
|
||||
AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device, ISimpleTextureSource *tsrc,
|
||||
touch_gui_button_id starter_id, const std::string &starter_img,
|
||||
recti starter_rect, autohide_button_bar_dir dir) :
|
||||
m_driver(device->getVideoDriver()),
|
||||
m_guienv(device->getGUIEnvironment()),
|
||||
m_receiver(device->getEventReceiver()),
|
||||
m_texturesource(tsrc)
|
||||
{
|
||||
m_upper_left = starter_rect.UpperLeftCorner;
|
||||
m_lower_right = starter_rect.LowerRightCorner;
|
||||
|
||||
IGUIImage *starter_gui_button = m_guienv->addImage(starter_rect, nullptr,
|
||||
starter_id);
|
||||
load_button_texture(starter_gui_button, starter_img, starter_rect,
|
||||
m_texturesource, m_driver);
|
||||
|
||||
m_starter = grab_gui_element<IGUIImage>(starter_gui_button);
|
||||
m_dir = dir;
|
||||
}
|
||||
|
||||
void AutoHideButtonBar::addButton(touch_gui_button_id id, const std::string &image)
|
||||
{
|
||||
int button_size = 0;
|
||||
|
||||
if (m_dir == AHBB_Dir_Top_Bottom || m_dir == AHBB_Dir_Bottom_Top)
|
||||
button_size = m_lower_right.X - m_upper_left.X;
|
||||
else
|
||||
button_size = m_lower_right.Y - m_upper_left.Y;
|
||||
|
||||
recti current_button;
|
||||
|
||||
if (m_dir == AHBB_Dir_Right_Left || m_dir == AHBB_Dir_Left_Right) {
|
||||
int x_start = 0;
|
||||
int x_end = 0;
|
||||
|
||||
if (m_dir == AHBB_Dir_Left_Right) {
|
||||
x_start = m_lower_right.X + button_size * 1.25f * m_buttons.size()
|
||||
+ button_size * 0.25f;
|
||||
x_end = x_start + button_size;
|
||||
} else {
|
||||
x_end = m_upper_left.X - button_size * 1.25f * m_buttons.size()
|
||||
- button_size * 0.25f;
|
||||
x_start = x_end - button_size;
|
||||
}
|
||||
|
||||
current_button = recti(x_start, m_upper_left.Y, x_end, m_lower_right.Y);
|
||||
} else {
|
||||
double y_start = 0;
|
||||
double y_end = 0;
|
||||
|
||||
if (m_dir == AHBB_Dir_Top_Bottom) {
|
||||
y_start = m_lower_right.X + button_size * 1.25f * m_buttons.size()
|
||||
+ button_size * 0.25f;
|
||||
y_end = y_start + button_size;
|
||||
} else {
|
||||
y_end = m_upper_left.X - button_size * 1.25f * m_buttons.size()
|
||||
- button_size * 0.25f;
|
||||
y_start = y_end - button_size;
|
||||
}
|
||||
|
||||
current_button = recti(m_upper_left.X, y_start, m_lower_right.Y, y_end);
|
||||
}
|
||||
|
||||
IGUIImage *btn_gui_button = m_guienv->addImage(current_button, nullptr, id);
|
||||
btn_gui_button->setVisible(false);
|
||||
btn_gui_button->setEnabled(false);
|
||||
load_button_texture(btn_gui_button, image, current_button, m_texturesource, m_driver);
|
||||
|
||||
button_info btn{};
|
||||
btn.keycode = id_to_keycode(id);
|
||||
btn.gui_button = grab_gui_element<IGUIImage>(btn_gui_button);
|
||||
m_buttons.push_back(btn);
|
||||
}
|
||||
|
||||
void AutoHideButtonBar::addToggleButton(touch_gui_button_id id,
|
||||
const std::string &image_1, const std::string &image_2)
|
||||
{
|
||||
addButton(id, image_1);
|
||||
button_info &btn = m_buttons.back();
|
||||
btn.toggleable = button_info::FIRST_TEXTURE;
|
||||
btn.toggle_textures[0] = image_1;
|
||||
btn.toggle_textures[1] = image_2;
|
||||
}
|
||||
|
||||
bool AutoHideButtonBar::handlePress(size_t pointer_id, IGUIElement *element)
|
||||
{
|
||||
if (m_active) {
|
||||
return buttons_handlePress(m_buttons, pointer_id, element, m_driver,
|
||||
m_receiver, m_texturesource);
|
||||
}
|
||||
if (m_starter.get() == element) {
|
||||
activate();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool AutoHideButtonBar::handleRelease(size_t pointer_id)
|
||||
{
|
||||
return buttons_handleRelease(m_buttons, pointer_id, m_driver,
|
||||
m_receiver, m_texturesource);
|
||||
}
|
||||
|
||||
void AutoHideButtonBar::step(float dtime)
|
||||
{
|
||||
// Since buttons can stay pressed after the buttonbar is deactivated,
|
||||
// we call the step function even if the buttonbar is inactive.
|
||||
bool has_pointers = buttons_step(m_buttons, dtime, m_driver, m_receiver,
|
||||
m_texturesource);
|
||||
|
||||
if (m_active) {
|
||||
if (!has_pointers) {
|
||||
m_timeout += dtime;
|
||||
if (m_timeout > BUTTONBAR_HIDE_DELAY)
|
||||
deactivate();
|
||||
} else {
|
||||
m_timeout = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void AutoHideButtonBar::updateVisibility() {
|
||||
bool starter_visible = m_visible && !m_active;
|
||||
bool inner_visible = m_visible && m_active;
|
||||
|
||||
m_starter->setVisible(starter_visible);
|
||||
m_starter->setEnabled(starter_visible);
|
||||
|
||||
for (auto &button : m_buttons) {
|
||||
button.gui_button->setVisible(inner_visible);
|
||||
button.gui_button->setEnabled(inner_visible);
|
||||
}
|
||||
}
|
||||
|
||||
void AutoHideButtonBar::activate()
|
||||
{
|
||||
m_active = true;
|
||||
m_timeout = 0.0f;
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
void AutoHideButtonBar::deactivate()
|
||||
{
|
||||
m_active = false;
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
void AutoHideButtonBar::show()
|
||||
{
|
||||
m_visible = true;
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
void AutoHideButtonBar::hide()
|
||||
{
|
||||
m_visible = false;
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, ISimpleTextureSource *tsrc):
|
||||
m_device(device),
|
||||
|
@ -421,44 +291,44 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, ISimpleTextureSource *tsr
|
|||
// Initialize joystick display "button".
|
||||
// Joystick is placed on the bottom left of screen.
|
||||
if (m_fixed_joystick) {
|
||||
m_joystick_btn_off = grab_gui_element<IGUIImage>(makeJoystickButton(joystick_off_id,
|
||||
m_joystick_btn_off = grab_gui_element<IGUIImage>(makeButtonDirect(joystick_off_id,
|
||||
recti(m_button_size,
|
||||
m_screensize.Y - m_button_size * 4,
|
||||
m_button_size * 4,
|
||||
m_screensize.Y - m_button_size), true));
|
||||
} else {
|
||||
m_joystick_btn_off = grab_gui_element<IGUIImage>(makeJoystickButton(joystick_off_id,
|
||||
m_joystick_btn_off = grab_gui_element<IGUIImage>(makeButtonDirect(joystick_off_id,
|
||||
recti(m_button_size,
|
||||
m_screensize.Y - m_button_size * 3,
|
||||
m_button_size * 3,
|
||||
m_screensize.Y - m_button_size), true));
|
||||
}
|
||||
|
||||
m_joystick_btn_bg = grab_gui_element<IGUIImage>(makeJoystickButton(joystick_bg_id,
|
||||
m_joystick_btn_bg = grab_gui_element<IGUIImage>(makeButtonDirect(joystick_bg_id,
|
||||
recti(m_button_size,
|
||||
m_screensize.Y - m_button_size * 4,
|
||||
m_button_size * 4,
|
||||
m_screensize.Y - m_button_size), false));
|
||||
|
||||
m_joystick_btn_center = grab_gui_element<IGUIImage>(makeJoystickButton(joystick_center_id,
|
||||
m_joystick_btn_center = grab_gui_element<IGUIImage>(makeButtonDirect(joystick_center_id,
|
||||
recti(0, 0, m_button_size, m_button_size), false));
|
||||
|
||||
// init jump button
|
||||
addButton(jump_id, button_image_names[jump_id],
|
||||
addButton(m_buttons, jump_id, button_image_names[jump_id],
|
||||
recti(m_screensize.X - 1.75f * m_button_size,
|
||||
m_screensize.Y - m_button_size,
|
||||
m_screensize.X - 0.25f * m_button_size,
|
||||
m_screensize.Y));
|
||||
|
||||
// init sneak button
|
||||
addButton(sneak_id, button_image_names[sneak_id],
|
||||
addButton(m_buttons, sneak_id, button_image_names[sneak_id],
|
||||
recti(m_screensize.X - 3.25f * m_button_size,
|
||||
m_screensize.Y - m_button_size,
|
||||
m_screensize.X - 1.75f * m_button_size,
|
||||
m_screensize.Y));
|
||||
|
||||
// init zoom button
|
||||
addButton(zoom_id, button_image_names[zoom_id],
|
||||
addButton(m_buttons, zoom_id, button_image_names[zoom_id],
|
||||
recti(m_screensize.X - 1.25f * m_button_size,
|
||||
m_screensize.Y - 4 * m_button_size,
|
||||
m_screensize.X - 0.25f * m_button_size,
|
||||
|
@ -466,72 +336,112 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, ISimpleTextureSource *tsr
|
|||
|
||||
// init aux1 button
|
||||
if (!m_joystick_triggers_aux1)
|
||||
addButton(aux1_id, button_image_names[aux1_id],
|
||||
addButton(m_buttons, aux1_id, button_image_names[aux1_id],
|
||||
recti(m_screensize.X - 1.25f * m_button_size,
|
||||
m_screensize.Y - 2.5f * m_button_size,
|
||||
m_screensize.X - 0.25f * m_button_size,
|
||||
m_screensize.Y - 1.5f * m_button_size));
|
||||
|
||||
AutoHideButtonBar &settings_bar = m_buttonbars.emplace_back(m_device, m_texturesource,
|
||||
settings_starter_id, button_image_names[settings_starter_id],
|
||||
recti(m_screensize.X - 1.25f * m_button_size,
|
||||
m_screensize.Y - (SETTINGS_BAR_Y_OFFSET + 1.0f) * m_button_size
|
||||
+ 0.5f * m_button_size,
|
||||
m_screensize.X - 0.25f * m_button_size,
|
||||
m_screensize.Y - SETTINGS_BAR_Y_OFFSET * m_button_size
|
||||
+ 0.5f * m_button_size),
|
||||
AHBB_Dir_Right_Left);
|
||||
// init overflow button
|
||||
m_overflow_btn = grab_gui_element<IGUIImage>(makeButtonDirect(overflow_id,
|
||||
recti(m_screensize.X - 1.25f * m_button_size,
|
||||
m_screensize.Y - 5.5f * m_button_size,
|
||||
m_screensize.X - 0.25f * m_button_size,
|
||||
m_screensize.Y - 4.5f * m_button_size), true));
|
||||
|
||||
const static touch_gui_button_id settings_bar_buttons[] {
|
||||
const static touch_gui_button_id overflow_buttons[] {
|
||||
chat_id, inventory_id, drop_id, exit_id,
|
||||
fly_id, noclip_id, fast_id, debug_id, camera_id, range_id, minimap_id,
|
||||
toggle_chat_id,
|
||||
};
|
||||
for (auto id : settings_bar_buttons) {
|
||||
if (id_to_keycode(id) == KEY_UNKNOWN)
|
||||
continue;
|
||||
settings_bar.addButton(id, button_image_names[id]);
|
||||
|
||||
IGUIStaticText *background = m_guienv->addStaticText(L"",
|
||||
recti(v2s32(0, 0), dimension2du(m_screensize)));
|
||||
background->setBackgroundColor(video::SColor(140, 0, 0, 0));
|
||||
background->setVisible(false);
|
||||
m_overflow_bg = grab_gui_element<IGUIStaticText>(background);
|
||||
|
||||
s32 cols = 4;
|
||||
s32 rows = 3;
|
||||
f32 screen_aspect = (f32)m_screensize.X / (f32)m_screensize.Y;
|
||||
while ((s32)ARRLEN(overflow_buttons) > cols * rows) {
|
||||
f32 aspect = (f32)cols / (f32)rows;
|
||||
if (aspect > screen_aspect)
|
||||
rows++;
|
||||
else
|
||||
cols++;
|
||||
}
|
||||
|
||||
// Chat is shown by default, so chat_hide_btn.png is shown first.
|
||||
settings_bar.addToggleButton(toggle_chat_id,
|
||||
"chat_hide_btn.png", "chat_show_btn.png");
|
||||
v2s32 size(m_button_size, m_button_size);
|
||||
v2s32 spacing(m_screensize.X / (cols + 1), m_screensize.Y / (rows + 1));
|
||||
v2s32 pos(spacing);
|
||||
|
||||
AutoHideButtonBar &rare_controls_bar = m_buttonbars.emplace_back(m_device, m_texturesource,
|
||||
rare_controls_starter_id, button_image_names[rare_controls_starter_id],
|
||||
recti(0.25f * m_button_size,
|
||||
m_screensize.Y - (RARE_CONTROLS_BAR_Y_OFFSET + 1.0f) * m_button_size
|
||||
+ 0.5f * m_button_size,
|
||||
0.75f * m_button_size,
|
||||
m_screensize.Y - RARE_CONTROLS_BAR_Y_OFFSET * m_button_size
|
||||
+ 0.5f * m_button_size),
|
||||
AHBB_Dir_Left_Right);
|
||||
|
||||
const static touch_gui_button_id rare_controls_bar_buttons[] {
|
||||
chat_id, inventory_id, drop_id, exit_id,
|
||||
};
|
||||
for (auto id : rare_controls_bar_buttons) {
|
||||
for (auto id : overflow_buttons) {
|
||||
if (id_to_keycode(id) == KEY_UNKNOWN)
|
||||
continue;
|
||||
rare_controls_bar.addButton(id, button_image_names[id]);
|
||||
|
||||
recti rect(pos - size / 2, dimension2du(size.X, size.Y));
|
||||
if (rect.LowerRightCorner.X > (s32)m_screensize.X) {
|
||||
pos.X = spacing.X;
|
||||
pos.Y += spacing.Y;
|
||||
rect = recti(pos - size / 2, dimension2du(size.X, size.Y));
|
||||
}
|
||||
|
||||
if (id == toggle_chat_id)
|
||||
// Chat is shown by default, so chat_hide_btn.png is shown first.
|
||||
addToggleButton(m_overflow_buttons, id, "chat_hide_btn.png",
|
||||
"chat_show_btn.png", rect, false);
|
||||
else
|
||||
addButton(m_overflow_buttons, id, button_image_names[id], rect, false);
|
||||
|
||||
std::wstring str = wstrgettext(button_titles[id]);
|
||||
IGUIStaticText *text = m_guienv->addStaticText(str.c_str(), recti());
|
||||
IGUIFont *font = text->getActiveFont();
|
||||
dimension2du dim = font->getDimension(str.c_str());
|
||||
dim = dimension2du(dim.Width * 1.25f, dim.Height * 1.25f); // avoid clipping
|
||||
text->setRelativePosition(recti(pos.X - dim.Width / 2, pos.Y + size.Y / 2,
|
||||
pos.X + dim.Width / 2, pos.Y + size.Y / 2 + dim.Height));
|
||||
text->setTextAlignment(EGUIA_CENTER, EGUIA_UPPERLEFT);
|
||||
text->setVisible(false);
|
||||
m_overflow_button_titles.push_back(grab_gui_element<IGUIStaticText>(text));
|
||||
|
||||
rect.addInternalPoint(text->getRelativePosition().UpperLeftCorner);
|
||||
rect.addInternalPoint(text->getRelativePosition().LowerRightCorner);
|
||||
m_overflow_button_rects.push_back(rect);
|
||||
|
||||
pos.X += spacing.X;
|
||||
}
|
||||
}
|
||||
|
||||
void TouchScreenGUI::addButton(touch_gui_button_id id, const std::string &image, const recti &rect)
|
||||
void TouchScreenGUI::addButton(std::vector<button_info> &buttons, touch_gui_button_id id,
|
||||
const std::string &image, const recti &rect, bool visible)
|
||||
{
|
||||
IGUIImage *btn_gui_button = m_guienv->addImage(rect, nullptr, id);
|
||||
btn_gui_button->setVisible(visible);
|
||||
load_button_texture(btn_gui_button, image, rect,
|
||||
m_texturesource, m_device->getVideoDriver());
|
||||
|
||||
button_info &btn = m_buttons.emplace_back();
|
||||
button_info &btn = buttons.emplace_back();
|
||||
btn.keycode = id_to_keycode(id);
|
||||
btn.gui_button = grab_gui_element<IGUIImage>(btn_gui_button);
|
||||
}
|
||||
|
||||
IGUIImage *TouchScreenGUI::makeJoystickButton(touch_gui_button_id id,
|
||||
const recti &button_rect, bool visible)
|
||||
void TouchScreenGUI::addToggleButton(std::vector<button_info> &buttons, touch_gui_button_id id,
|
||||
const std::string &image_1, const std::string &image_2, const recti &rect, bool visible)
|
||||
{
|
||||
IGUIImage *btn_gui_button = m_guienv->addImage(button_rect, nullptr, id);
|
||||
addButton(buttons, id, image_1, rect, visible);
|
||||
button_info &btn = buttons.back();
|
||||
btn.toggleable = button_info::FIRST_TEXTURE;
|
||||
btn.toggle_textures[0] = image_1;
|
||||
btn.toggle_textures[1] = image_2;
|
||||
}
|
||||
|
||||
IGUIImage *TouchScreenGUI::makeButtonDirect(touch_gui_button_id id,
|
||||
const recti &rect, bool visible)
|
||||
{
|
||||
IGUIImage *btn_gui_button = m_guienv->addImage(rect, nullptr, id);
|
||||
btn_gui_button->setVisible(visible);
|
||||
load_button_texture(btn_gui_button, button_image_names[id], button_rect,
|
||||
load_button_texture(btn_gui_button, button_image_names[id], rect,
|
||||
m_texturesource, m_device->getVideoDriver());
|
||||
|
||||
return btn_gui_button;
|
||||
|
@ -566,17 +476,17 @@ void TouchScreenGUI::handleReleaseEvent(size_t pointer_id)
|
|||
m_pointer_downpos.erase(pointer_id);
|
||||
m_pointer_pos.erase(pointer_id);
|
||||
|
||||
if (m_overflow_open) {
|
||||
buttons_handleRelease(m_overflow_buttons, pointer_id, m_device->getVideoDriver(),
|
||||
m_receiver, m_texturesource);
|
||||
return;
|
||||
}
|
||||
|
||||
// handle buttons
|
||||
if (buttons_handleRelease(m_buttons, pointer_id, m_device->getVideoDriver(),
|
||||
m_receiver, m_texturesource))
|
||||
return;
|
||||
|
||||
// handle buttonbars
|
||||
for (AutoHideButtonBar &bar : m_buttonbars) {
|
||||
if (bar.handleRelease(pointer_id))
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_has_move_id && pointer_id == m_move_id) {
|
||||
// handle the point used for moving view
|
||||
m_has_move_id = false;
|
||||
|
@ -584,7 +494,8 @@ void TouchScreenGUI::handleReleaseEvent(size_t pointer_id)
|
|||
// If m_tap_state is already set to TapState::ShortTap, we must keep
|
||||
// that value. Otherwise, many short taps will be ignored if you tap
|
||||
// very fast.
|
||||
if (!m_move_has_really_moved && m_tap_state != TapState::LongTap) {
|
||||
if (!m_move_has_really_moved && !m_move_prevent_short_tap &&
|
||||
m_tap_state != TapState::LongTap) {
|
||||
m_tap_state = TapState::ShortTap;
|
||||
} else {
|
||||
m_tap_state = TapState::None;
|
||||
|
@ -635,41 +546,48 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
|
|||
m_pointer_downpos[pointer_id] = touch_pos;
|
||||
m_pointer_pos[pointer_id] = touch_pos;
|
||||
|
||||
bool prevent_short_tap = false;
|
||||
|
||||
IGUIElement *element = m_guienv->getRootGUIElement()->getElementFromPoint(touch_pos);
|
||||
|
||||
// handle overflow menu
|
||||
if (!m_overflow_open) {
|
||||
if (element == m_overflow_btn.get()) {
|
||||
toggleOverflowMenu();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
for (size_t i = 0; i < m_overflow_buttons.size(); i++) {
|
||||
if (m_overflow_button_rects[i].isPointInside(touch_pos)) {
|
||||
element = m_overflow_buttons[i].gui_button.get();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (buttons_handlePress(m_overflow_buttons, pointer_id, element,
|
||||
m_device->getVideoDriver(), m_receiver, m_texturesource))
|
||||
return;
|
||||
|
||||
toggleOverflowMenu();
|
||||
// refresh since visibility of buttons has changed
|
||||
element = m_guienv->getRootGUIElement()->getElementFromPoint(touch_pos);
|
||||
// restore after releaseAll in toggleOverflowMenu
|
||||
m_pointer_downpos[pointer_id] = touch_pos;
|
||||
m_pointer_pos[pointer_id] = touch_pos;
|
||||
// continue processing, but avoid accidentally placing a node
|
||||
// when closing the overflow menu
|
||||
prevent_short_tap = true;
|
||||
}
|
||||
|
||||
// handle buttons
|
||||
if (buttons_handlePress(m_buttons, pointer_id, element,
|
||||
m_device->getVideoDriver(), m_receiver, m_texturesource)) {
|
||||
for (AutoHideButtonBar &bar : m_buttonbars)
|
||||
bar.deactivate();
|
||||
m_device->getVideoDriver(), m_receiver, m_texturesource))
|
||||
return;
|
||||
}
|
||||
|
||||
// handle buttonbars
|
||||
for (AutoHideButtonBar &bar : m_buttonbars) {
|
||||
if (bar.handlePress(pointer_id, element)) {
|
||||
for (AutoHideButtonBar &other : m_buttonbars)
|
||||
if (other != bar)
|
||||
other.deactivate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// handle hotbar
|
||||
if (isHotbarButton(event)) {
|
||||
if (isHotbarButton(event))
|
||||
// already handled in isHotbarButton()
|
||||
for (AutoHideButtonBar &bar : m_buttonbars)
|
||||
bar.deactivate();
|
||||
return;
|
||||
}
|
||||
|
||||
// handle non button events
|
||||
for (AutoHideButtonBar &bar : m_buttonbars) {
|
||||
if (bar.isActive()) {
|
||||
bar.deactivate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Select joystick when joystick tapped (fixed joystick position) or
|
||||
// when left 1/3 of screen dragged (free joystick position)
|
||||
|
@ -704,6 +622,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
|
|||
// DON'T reset m_tap_state here, otherwise many short taps
|
||||
// will be ignored if you tap very fast.
|
||||
m_had_move_id = true;
|
||||
m_move_prevent_short_tap = prevent_short_tap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -713,6 +632,9 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
|
|||
} else {
|
||||
assert(event.TouchInput.Event == ETIE_MOVED);
|
||||
|
||||
if (m_overflow_open)
|
||||
return;
|
||||
|
||||
if (!(m_has_joystick_id && m_fixed_joystick) &&
|
||||
m_pointer_pos[event.TouchInput.ID] == touch_pos)
|
||||
return;
|
||||
|
@ -798,10 +720,13 @@ void TouchScreenGUI::applyJoystickStatus()
|
|||
|
||||
void TouchScreenGUI::step(float dtime)
|
||||
{
|
||||
if (m_overflow_open) {
|
||||
buttons_step(m_overflow_buttons, dtime, m_device->getVideoDriver(), m_receiver, m_texturesource);
|
||||
return;
|
||||
}
|
||||
|
||||
// simulate keyboard repeats
|
||||
buttons_step(m_buttons, dtime, m_device->getVideoDriver(), m_receiver, m_texturesource);
|
||||
for (AutoHideButtonBar &bar : m_buttonbars)
|
||||
bar.step(dtime);
|
||||
|
||||
// joystick
|
||||
applyJoystickStatus();
|
||||
|
@ -844,42 +769,65 @@ void TouchScreenGUI::registerHotbarRect(u16 index, const recti &rect)
|
|||
|
||||
void TouchScreenGUI::setVisible(bool visible)
|
||||
{
|
||||
if (m_visible == visible)
|
||||
return;
|
||||
|
||||
m_visible = visible;
|
||||
for (auto &button : m_buttons) {
|
||||
if (button.gui_button)
|
||||
button.gui_button->setVisible(visible);
|
||||
}
|
||||
|
||||
if (m_joystick_btn_off)
|
||||
m_joystick_btn_off->setVisible(visible);
|
||||
|
||||
// clear all active buttons
|
||||
// order matters
|
||||
if (!visible) {
|
||||
while (!m_pointer_pos.empty())
|
||||
handleReleaseEvent(m_pointer_pos.begin()->first);
|
||||
for (AutoHideButtonBar &bar : m_buttonbars) {
|
||||
bar.deactivate();
|
||||
bar.hide();
|
||||
}
|
||||
} else {
|
||||
for (AutoHideButtonBar &bar : m_buttonbars)
|
||||
bar.show();
|
||||
releaseAll();
|
||||
m_overflow_open = false;
|
||||
}
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
void TouchScreenGUI::toggleOverflowMenu()
|
||||
{
|
||||
releaseAll(); // must be done first
|
||||
m_overflow_open = !m_overflow_open;
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
void TouchScreenGUI::updateVisibility()
|
||||
{
|
||||
bool regular_visible = m_visible && !m_overflow_open;
|
||||
for (auto &button : m_buttons)
|
||||
button.gui_button->setVisible(regular_visible);
|
||||
m_overflow_btn->setVisible(regular_visible);
|
||||
m_joystick_btn_off->setVisible(regular_visible);
|
||||
|
||||
bool overflow_visible = m_visible && m_overflow_open;
|
||||
m_overflow_bg->setVisible(overflow_visible);
|
||||
for (auto &button : m_overflow_buttons)
|
||||
button.gui_button->setVisible(overflow_visible);
|
||||
for (auto &text : m_overflow_button_titles)
|
||||
text->setVisible(overflow_visible);
|
||||
}
|
||||
|
||||
void TouchScreenGUI::releaseAll()
|
||||
{
|
||||
while (!m_pointer_pos.empty())
|
||||
handleReleaseEvent(m_pointer_pos.begin()->first);
|
||||
|
||||
// Release those manually too since the change initiated by
|
||||
// handleReleaseEvent will only be applied later by applyContextControls.
|
||||
if (m_dig_pressed) {
|
||||
emitMouseEvent(EMIE_LMOUSE_LEFT_UP);
|
||||
m_dig_pressed = false;
|
||||
}
|
||||
if (m_place_pressed) {
|
||||
emitMouseEvent(EMIE_RMOUSE_LEFT_UP);
|
||||
m_place_pressed = false;
|
||||
}
|
||||
}
|
||||
|
||||
void TouchScreenGUI::hide()
|
||||
{
|
||||
if (!m_visible)
|
||||
return;
|
||||
|
||||
setVisible(false);
|
||||
}
|
||||
|
||||
void TouchScreenGUI::show()
|
||||
{
|
||||
if (m_visible)
|
||||
return;
|
||||
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIStaticText.h"
|
||||
#include "irrlichttypes.h"
|
||||
#include <IEventReceiver.h>
|
||||
#include <IGUIImage.h>
|
||||
|
@ -74,8 +75,7 @@ enum touch_gui_button_id
|
|||
sneak_id,
|
||||
zoom_id,
|
||||
aux1_id,
|
||||
settings_starter_id,
|
||||
rare_controls_starter_id,
|
||||
overflow_id,
|
||||
|
||||
// usually in the "settings bar"
|
||||
fly_id,
|
||||
|
@ -99,25 +99,16 @@ enum touch_gui_button_id
|
|||
joystick_center_id,
|
||||
};
|
||||
|
||||
enum autohide_button_bar_dir
|
||||
{
|
||||
AHBB_Dir_Top_Bottom,
|
||||
AHBB_Dir_Bottom_Top,
|
||||
AHBB_Dir_Left_Right,
|
||||
AHBB_Dir_Right_Left
|
||||
};
|
||||
|
||||
#define BUTTON_REPEAT_DELAY 0.5f
|
||||
#define BUTTON_REPEAT_INTERVAL 0.333f
|
||||
#define BUTTONBAR_HIDE_DELAY 3.0f
|
||||
#define SETTINGS_BAR_Y_OFFSET 5
|
||||
#define RARE_CONTROLS_BAR_Y_OFFSET 5
|
||||
|
||||
// Our simulated clicks last some milliseconds so that server-side mods have a
|
||||
// chance to detect them via l_get_player_control.
|
||||
// If you tap faster than this value, the simulated clicks are of course shorter.
|
||||
#define SIMULATED_CLICK_DURATION_MS 50
|
||||
|
||||
|
||||
struct button_info
|
||||
{
|
||||
float repeat_counter;
|
||||
|
@ -136,52 +127,6 @@ struct button_info
|
|||
IEventReceiver *receiver, ISimpleTextureSource *tsrc);
|
||||
};
|
||||
|
||||
class AutoHideButtonBar
|
||||
{
|
||||
public:
|
||||
AutoHideButtonBar(IrrlichtDevice *device, ISimpleTextureSource *tsrc,
|
||||
touch_gui_button_id starter_id, const std::string &starter_image,
|
||||
recti starter_rect, autohide_button_bar_dir dir);
|
||||
|
||||
void addButton(touch_gui_button_id id, const std::string &image);
|
||||
void addToggleButton(touch_gui_button_id id,
|
||||
const std::string &image_1, const std::string &image_2);
|
||||
|
||||
bool handlePress(size_t pointer_id, IGUIElement *element);
|
||||
bool handleRelease(size_t pointer_id);
|
||||
|
||||
void step(float dtime);
|
||||
|
||||
void activate();
|
||||
void deactivate();
|
||||
bool isActive() { return m_active; }
|
||||
|
||||
void show();
|
||||
void hide();
|
||||
|
||||
bool operator==(const AutoHideButtonBar &other)
|
||||
{ return m_starter.get() == other.m_starter.get(); }
|
||||
bool operator!=(const AutoHideButtonBar &other)
|
||||
{ return m_starter.get() != other.m_starter.get(); }
|
||||
|
||||
private:
|
||||
irr::video::IVideoDriver *m_driver = nullptr;
|
||||
IGUIEnvironment *m_guienv = nullptr;
|
||||
IEventReceiver *m_receiver = nullptr;
|
||||
ISimpleTextureSource *m_texturesource = nullptr;
|
||||
std::shared_ptr<IGUIImage> m_starter;
|
||||
std::vector<button_info> m_buttons;
|
||||
|
||||
v2s32 m_upper_left;
|
||||
v2s32 m_lower_right;
|
||||
|
||||
bool m_active = false;
|
||||
bool m_visible = true;
|
||||
float m_timeout = 0.0f;
|
||||
autohide_button_bar_dir m_dir = AHBB_Dir_Right_Left;
|
||||
|
||||
void updateVisibility();
|
||||
};
|
||||
|
||||
class TouchScreenGUI
|
||||
{
|
||||
|
@ -262,6 +207,7 @@ private:
|
|||
// This is needed so that we don't miss if m_has_move_id is true for less
|
||||
// than one client step, i.e. press and release happen in the same step.
|
||||
bool m_had_move_id = false;
|
||||
bool m_move_prevent_short_tap = false;
|
||||
|
||||
bool m_has_joystick_id = false;
|
||||
size_t m_joystick_id;
|
||||
|
@ -277,13 +223,28 @@ private:
|
|||
std::shared_ptr<IGUIImage> m_joystick_btn_center;
|
||||
|
||||
std::vector<button_info> m_buttons;
|
||||
std::shared_ptr<IGUIImage> m_overflow_btn;
|
||||
|
||||
bool m_overflow_open = false;
|
||||
std::shared_ptr<IGUIStaticText> m_overflow_bg;
|
||||
std::vector<button_info> m_overflow_buttons;
|
||||
std::vector<std::shared_ptr<IGUIStaticText>> m_overflow_button_titles;
|
||||
std::vector<recti> m_overflow_button_rects;
|
||||
|
||||
void toggleOverflowMenu();
|
||||
void updateVisibility();
|
||||
void releaseAll();
|
||||
|
||||
// initialize a button
|
||||
void addButton(touch_gui_button_id id, const std::string &image,
|
||||
const recti &rect);
|
||||
void addButton(std::vector<button_info> &buttons,
|
||||
touch_gui_button_id id, const std::string &image,
|
||||
const recti &rect, bool visible=true);
|
||||
void addToggleButton(std::vector<button_info> &buttons,
|
||||
touch_gui_button_id id,
|
||||
const std::string &image_1, const std::string &image_2,
|
||||
const recti &rect, bool visible=true);
|
||||
|
||||
// initialize a joystick button
|
||||
IGUIImage *makeJoystickButton(touch_gui_button_id id,
|
||||
IGUIImage *makeButtonDirect(touch_gui_button_id id,
|
||||
const recti &rect, bool visible);
|
||||
|
||||
// handle pressing hotbar items
|
||||
|
@ -300,8 +261,6 @@ private:
|
|||
// map to store the IDs and positions of currently pressed pointers
|
||||
std::unordered_map<size_t, v2s32> m_pointer_pos;
|
||||
|
||||
std::vector<AutoHideButtonBar> m_buttonbars;
|
||||
|
||||
v2s32 getPointerPos();
|
||||
void emitMouseEvent(EMOUSE_INPUT_EVENT type);
|
||||
TouchInteractionMode m_last_mode = TouchInteractionMode_END;
|
||||
|
|
|
@ -1095,13 +1095,9 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings &
|
|||
|
||||
if (cmd_args.exists("terminal")) {
|
||||
#if USE_CURSES
|
||||
bool name_ok = true;
|
||||
std::string admin_nick = g_settings->get("name");
|
||||
|
||||
name_ok = name_ok && !admin_nick.empty();
|
||||
name_ok = name_ok && string_allowed(admin_nick, PLAYERNAME_ALLOWED_CHARS);
|
||||
|
||||
if (!name_ok) {
|
||||
if (!is_valid_player_name(admin_nick)) {
|
||||
if (admin_nick.empty()) {
|
||||
errorstream << "No name given for admin. "
|
||||
<< "Please check your minetest.conf that it "
|
||||
|
@ -1110,7 +1106,8 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings &
|
|||
} else {
|
||||
errorstream << "Name for admin '"
|
||||
<< admin_nick << "' is not valid. "
|
||||
<< "Please check that it only contains allowed characters. "
|
||||
<< "Please check that it only contains allowed characters "
|
||||
<< "and that it is at most 20 characters long. "
|
||||
<< "Valid characters are: " << PLAYERNAME_ALLOWED_CHARS_USER_EXPL
|
||||
<< std::endl;
|
||||
}
|
||||
|
|
|
@ -471,6 +471,8 @@ void Client::handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt)
|
|||
for (u16 i = 0; i < removed_count; i++) {
|
||||
*pkt >> id;
|
||||
m_env.removeActiveObject(id);
|
||||
// Object-attached sounds MUST NOT be removed here because they might
|
||||
// have started to play immediately before the entity was removed.
|
||||
}
|
||||
|
||||
// Read added objects
|
||||
|
|
|
@ -615,7 +615,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
|
|||
|
||||
// If something goes wrong, this player is to blame
|
||||
RollbackScopeActor rollback_scope(m_rollback,
|
||||
std::string("player:")+player->getName());
|
||||
"player:" + player->getName());
|
||||
|
||||
/*
|
||||
Note: Always set inventory not sent, to repair cases
|
||||
|
@ -852,11 +852,11 @@ void Server::handleCommand_PlayerItem(NetworkPacket* pkt)
|
|||
|
||||
*pkt >> item;
|
||||
|
||||
if (item >= player->getHotbarItemcount()) {
|
||||
if (item >= player->getMaxHotbarItemcount()) {
|
||||
actionstream << "Player: " << player->getName()
|
||||
<< " tried to access item=" << item
|
||||
<< " out of hotbar_itemcount="
|
||||
<< player->getHotbarItemcount()
|
||||
<< player->getMaxHotbarItemcount()
|
||||
<< "; ignoring." << std::endl;
|
||||
return;
|
||||
}
|
||||
|
@ -983,11 +983,11 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
|
|||
|
||||
// Update wielded item
|
||||
|
||||
if (item_i >= player->getHotbarItemcount()) {
|
||||
if (item_i >= player->getMaxHotbarItemcount()) {
|
||||
actionstream << "Player: " << player->getName()
|
||||
<< " tried to access item=" << item_i
|
||||
<< " out of hotbar_itemcount="
|
||||
<< player->getHotbarItemcount()
|
||||
<< player->getMaxHotbarItemcount()
|
||||
<< "; ignoring." << std::endl;
|
||||
return;
|
||||
}
|
||||
|
@ -1069,7 +1069,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
|
|||
If something goes wrong, this player is to blame
|
||||
*/
|
||||
RollbackScopeActor rollback_scope(m_rollback,
|
||||
std::string("player:")+player->getName());
|
||||
"player:" + player->getName());
|
||||
|
||||
switch (action) {
|
||||
// Start digging or punch object
|
||||
|
@ -1400,7 +1400,7 @@ void Server::handleCommand_NodeMetaFields(NetworkPacket* pkt)
|
|||
|
||||
// If something goes wrong, this player is to blame
|
||||
RollbackScopeActor rollback_scope(m_rollback,
|
||||
std::string("player:")+player->getName());
|
||||
"player:" + player->getName());
|
||||
|
||||
// Check the target node for rollback data; leave others unnoticed
|
||||
RollbackNode rn_old(&m_env->getMap(), p, this);
|
||||
|
|
|
@ -30,10 +30,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "porting.h" // strlcpy
|
||||
|
||||
|
||||
Player::Player(const char *name, IItemDefManager *idef):
|
||||
bool is_valid_player_name(std::string_view name) {
|
||||
return !name.empty() && name.size() <= PLAYERNAME_SIZE && string_allowed(name, PLAYERNAME_ALLOWED_CHARS);
|
||||
}
|
||||
|
||||
Player::Player(const std::string &name, IItemDefManager *idef):
|
||||
inventory(idef)
|
||||
{
|
||||
strlcpy(m_name, name, PLAYERNAME_SIZE);
|
||||
m_name = name;
|
||||
|
||||
inventory.clear();
|
||||
inventory.addList("main", PLAYER_INVENTORY_SIZE);
|
||||
|
@ -88,6 +92,11 @@ void Player::setWieldIndex(u16 index)
|
|||
m_wield_index = MYMIN(index, mlist ? mlist->getSize() : 0);
|
||||
}
|
||||
|
||||
u16 Player::getWieldIndex()
|
||||
{
|
||||
return std::min(m_wield_index, getMaxHotbarItemcount());
|
||||
}
|
||||
|
||||
ItemStack &Player::getWieldedItem(ItemStack *selected, ItemStack *hand) const
|
||||
{
|
||||
assert(selected);
|
||||
|
@ -157,6 +166,12 @@ void Player::clearHud()
|
|||
}
|
||||
}
|
||||
|
||||
u16 Player::getMaxHotbarItemcount()
|
||||
{
|
||||
InventoryList *mainlist = inventory.getList("main");
|
||||
return mainlist ? std::min(mainlist->getSize(), (u32) hud_hotbar_itemcount) : 0;
|
||||
}
|
||||
|
||||
#ifndef SERVER
|
||||
|
||||
u32 PlayerControl::getKeysPressed() const
|
||||
|
|
15
src/player.h
15
src/player.h
|
@ -24,16 +24,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "constants.h"
|
||||
#include "network/networkprotocol.h"
|
||||
#include "util/basic_macros.h"
|
||||
#include "util/string.h"
|
||||
#include <list>
|
||||
#include <mutex>
|
||||
#include <functional>
|
||||
#include <tuple>
|
||||
#include <string>
|
||||
|
||||
#define PLAYERNAME_SIZE 20
|
||||
|
||||
#define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"
|
||||
#define PLAYERNAME_ALLOWED_CHARS_USER_EXPL "'a' to 'z', 'A' to 'Z', '0' to '9', '-', '_'"
|
||||
|
||||
bool is_valid_player_name(std::string_view name);
|
||||
|
||||
struct PlayerFovSpec
|
||||
{
|
||||
f32 fov;
|
||||
|
@ -158,7 +162,7 @@ class Player
|
|||
{
|
||||
public:
|
||||
|
||||
Player(const char *name, IItemDefManager *idef);
|
||||
Player(const std::string &name, IItemDefManager *idef);
|
||||
virtual ~Player() = 0;
|
||||
|
||||
DISABLE_CLASS_COPY(Player);
|
||||
|
@ -178,7 +182,7 @@ public:
|
|||
// in BS-space
|
||||
v3f getSpeed() const { return m_speed; }
|
||||
|
||||
const char *getName() const { return m_name; }
|
||||
const std::string& getName() const { return m_name; }
|
||||
|
||||
u32 getFreeHudID()
|
||||
{
|
||||
|
@ -223,7 +227,7 @@ public:
|
|||
// Returns non-empty `selected` ItemStack. `hand` is a fallback, if specified
|
||||
ItemStack &getWieldedItem(ItemStack *selected, ItemStack *hand) const;
|
||||
void setWieldIndex(u16 index);
|
||||
u16 getWieldIndex() const { return m_wield_index; }
|
||||
u16 getWieldIndex();
|
||||
|
||||
bool setFov(const PlayerFovSpec &spec)
|
||||
{
|
||||
|
@ -247,8 +251,11 @@ public:
|
|||
u32 hud_flags;
|
||||
s32 hud_hotbar_itemcount;
|
||||
|
||||
// Get actual usable number of hotbar items (clamped to size of "main" list)
|
||||
u16 getMaxHotbarItemcount();
|
||||
|
||||
protected:
|
||||
char m_name[PLAYERNAME_SIZE];
|
||||
std::string m_name;
|
||||
v3f m_speed; // velocity; in BS-space
|
||||
u16 m_wield_index = 0;
|
||||
PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f };
|
||||
|
|
|
@ -37,7 +37,7 @@ bool RemotePlayer::m_setting_cache_loaded = false;
|
|||
float RemotePlayer::m_setting_chat_message_limit_per_10sec = 0.0f;
|
||||
u16 RemotePlayer::m_setting_chat_message_limit_trigger_kick = 0;
|
||||
|
||||
RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef):
|
||||
RemotePlayer::RemotePlayer(const std::string &name, IItemDefManager *idef):
|
||||
Player(name, idef)
|
||||
{
|
||||
if (!RemotePlayer::m_setting_cache_loaded) {
|
||||
|
|
|
@ -41,7 +41,7 @@ class RemotePlayer : public Player
|
|||
friend class PlayerDatabaseFiles;
|
||||
|
||||
public:
|
||||
RemotePlayer(const char *name, IItemDefManager *idef);
|
||||
RemotePlayer(const std::string &name, IItemDefManager *idef);
|
||||
virtual ~RemotePlayer();
|
||||
|
||||
PlayerSAO *getPlayerSAO() { return m_sao; }
|
||||
|
|
|
@ -246,7 +246,7 @@ void ScriptApiServer::freeDynamicMediaCallback(u32 token)
|
|||
lua_pop(L, 2);
|
||||
}
|
||||
|
||||
void ScriptApiServer::on_dynamic_media_added(u32 token, const char *playername)
|
||||
void ScriptApiServer::on_dynamic_media_added(u32 token, const std::string &playername)
|
||||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
|
@ -257,6 +257,6 @@ void ScriptApiServer::on_dynamic_media_added(u32 token, const char *playername)
|
|||
lua_rawgeti(L, -1, token);
|
||||
luaL_checktype(L, -1, LUA_TFUNCTION);
|
||||
|
||||
lua_pushstring(L, playername);
|
||||
lua_pushstring(L, playername.c_str());
|
||||
PCALL_RES(lua_pcall(L, 1, 0, error_handler));
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
/* dynamic media handling */
|
||||
static u32 allocateDynamicMediaCallback(lua_State *L, int f_idx);
|
||||
void freeDynamicMediaCallback(u32 token);
|
||||
void on_dynamic_media_added(u32 token, const char *playername);
|
||||
void on_dynamic_media_added(u32 token, const std::string &playername);
|
||||
|
||||
private:
|
||||
void getAuthHandler();
|
||||
|
|
|
@ -970,8 +970,8 @@ int ModApiEnvBase::findNodesInArea(lua_State *L, const NodeDefManager *ndef,
|
|||
});
|
||||
|
||||
// last filter table is at top of stack
|
||||
u32 i = filter.size() - 1;
|
||||
do {
|
||||
u32 i = filter.size();
|
||||
while (i --> 0) {
|
||||
if (idx[i] == 0) {
|
||||
// No such node found -> drop the empty table
|
||||
lua_pop(L, 1);
|
||||
|
@ -979,7 +979,7 @@ int ModApiEnvBase::findNodesInArea(lua_State *L, const NodeDefManager *ndef,
|
|||
// This node was found -> put table into the return table
|
||||
lua_setfield(L, base, ndef->get(filter[i]).name.c_str());
|
||||
}
|
||||
} while (i-- != 0);
|
||||
}
|
||||
|
||||
assert(lua_gettop(L) == base);
|
||||
return 1;
|
||||
|
|
|
@ -72,7 +72,7 @@ int LuaLocalPlayer::l_get_name(lua_State *L)
|
|||
{
|
||||
LocalPlayer *player = getobject(L, 1);
|
||||
|
||||
lua_pushstring(L, player->getName());
|
||||
lua_pushstring(L, player->getName().c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "common/c_converter.h"
|
||||
#include "common/c_content.h"
|
||||
#include "log.h"
|
||||
#include "player.h"
|
||||
#include "server/serveractiveobject.h"
|
||||
#include "tool.h"
|
||||
#include "remoteplayer.h"
|
||||
#include "server.h"
|
||||
|
@ -36,12 +38,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "server/player_sao.h"
|
||||
#include "server/serverinventorymgr.h"
|
||||
#include "server/unit_sao.h"
|
||||
#include "util/string.h"
|
||||
|
||||
using object_t = ServerActiveObject::object_t;
|
||||
|
||||
/*
|
||||
ObjectRef
|
||||
*/
|
||||
|
||||
|
||||
ServerActiveObject* ObjectRef::getobject(ObjectRef *ref)
|
||||
{
|
||||
ServerActiveObject *sao = ref->m_object;
|
||||
|
@ -99,9 +103,6 @@ int ObjectRef::l_remove(lua_State *L)
|
|||
if (sao->getType() == ACTIVEOBJECT_TYPE_PLAYER)
|
||||
return 0;
|
||||
|
||||
sao->clearChildAttachments();
|
||||
sao->clearParentAttachment();
|
||||
|
||||
verbosestream << "ObjectRef::l_remove(): id=" << sao->getId() << std::endl;
|
||||
sao->markForRemoval();
|
||||
return 0;
|
||||
|
@ -724,25 +725,17 @@ int ObjectRef::l_set_attach(lua_State *L)
|
|||
if (sao == parent)
|
||||
throw LuaError("ObjectRef::set_attach: attaching object to itself is not allowed.");
|
||||
|
||||
int parent_id;
|
||||
std::string bone;
|
||||
v3f position;
|
||||
v3f rotation;
|
||||
bool force_visible;
|
||||
|
||||
sao->getAttachment(&parent_id, &bone, &position, &rotation, &force_visible);
|
||||
if (parent_id) {
|
||||
ServerActiveObject *old_parent = env->getActiveObject(parent_id);
|
||||
old_parent->removeAttachmentChild(sao->getId());
|
||||
}
|
||||
|
||||
bone = readParam<std::string>(L, 3, "");
|
||||
position = readParam<v3f>(L, 4, v3f(0, 0, 0));
|
||||
rotation = readParam<v3f>(L, 5, v3f(0, 0, 0));
|
||||
force_visible = readParam<bool>(L, 6, false);
|
||||
|
||||
sao->setAttachment(parent->getId(), bone, position, rotation, force_visible);
|
||||
parent->addAttachmentChild(sao->getId());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -755,7 +748,7 @@ int ObjectRef::l_get_attach(lua_State *L)
|
|||
if (sao == nullptr)
|
||||
return 0;
|
||||
|
||||
int parent_id;
|
||||
object_t parent_id;
|
||||
std::string bone;
|
||||
v3f position;
|
||||
v3f rotation;
|
||||
|
@ -783,11 +776,11 @@ int ObjectRef::l_get_children(lua_State *L)
|
|||
if (sao == nullptr)
|
||||
return 0;
|
||||
|
||||
const std::unordered_set<int> child_ids = sao->getAttachmentChildIds();
|
||||
const auto &child_ids = sao->getAttachmentChildIds();
|
||||
int i = 0;
|
||||
|
||||
lua_createtable(L, child_ids.size(), 0);
|
||||
for (const int id : child_ids) {
|
||||
for (const object_t id : child_ids) {
|
||||
ServerActiveObject *child = env->getActiveObject(id);
|
||||
getScriptApiBase(L)->objectrefGetOrCreate(L, child);
|
||||
lua_rawseti(L, -2, ++i);
|
||||
|
@ -847,6 +840,81 @@ int ObjectRef::l_get_properties(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
// set_observers(self, observers)
|
||||
int ObjectRef::l_set_observers(lua_State *L)
|
||||
{
|
||||
GET_ENV_PTR;
|
||||
ObjectRef *ref = checkObject<ObjectRef>(L, 1);
|
||||
ServerActiveObject *sao = getobject(ref);
|
||||
if (sao == nullptr)
|
||||
throw LuaError("Invalid ObjectRef");
|
||||
|
||||
// Reset object to "unmanaged" (sent to everyone)?
|
||||
if (lua_isnoneornil(L, 2)) {
|
||||
sao->m_observers.reset();
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::unordered_set<std::string> observer_names;
|
||||
lua_pushnil(L);
|
||||
while (lua_next(L, 2) != 0) {
|
||||
std::string name = readParam<std::string>(L, -2);
|
||||
if (!is_valid_player_name(name))
|
||||
throw LuaError("Observer name is not a valid player name");
|
||||
if (!lua_toboolean(L, -1)) // falsy value?
|
||||
throw LuaError("Values in the `observers` table need to be true");
|
||||
observer_names.insert(std::move(name));
|
||||
lua_pop(L, 1); // pop value, keep key
|
||||
}
|
||||
|
||||
RemotePlayer *player = getplayer(ref);
|
||||
if (player != nullptr) {
|
||||
observer_names.insert(player->getName());
|
||||
}
|
||||
|
||||
sao->m_observers = std::move(observer_names);
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<typename F>
|
||||
static int get_observers(lua_State *L, F observer_getter)
|
||||
{
|
||||
ObjectRef *ref = ObjectRef::checkObject<ObjectRef>(L, 1);
|
||||
ServerActiveObject *sao = ObjectRef::getobject(ref);
|
||||
if (sao == nullptr)
|
||||
throw LuaError("invalid ObjectRef");
|
||||
|
||||
const auto observers = observer_getter(sao);
|
||||
if (!observers) {
|
||||
lua_pushnil(L);
|
||||
return 1;
|
||||
}
|
||||
// Push set of observers {[name] = true}
|
||||
lua_createtable(L, 0, observers->size());
|
||||
for (auto &name : *observers) {
|
||||
lua_pushboolean(L, true);
|
||||
lua_setfield(L, -2, name.c_str());
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
// get_observers(self)
|
||||
int ObjectRef::l_get_observers(lua_State *L)
|
||||
{
|
||||
NO_MAP_LOCK_REQUIRED;
|
||||
return get_observers(L, [](auto sao) { return sao->m_observers; });
|
||||
}
|
||||
|
||||
// get_effective_observers(self)
|
||||
int ObjectRef::l_get_effective_observers(lua_State *L)
|
||||
{
|
||||
NO_MAP_LOCK_REQUIRED;
|
||||
return get_observers(L, [](auto sao) {
|
||||
// The cache may be outdated, so we always have to recalculate.
|
||||
return sao->recalculateEffectiveObservers();
|
||||
});
|
||||
}
|
||||
|
||||
// is_player(self)
|
||||
int ObjectRef::l_is_player(lua_State *L)
|
||||
{
|
||||
|
@ -1176,7 +1244,7 @@ int ObjectRef::l_get_player_name(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
lua_pushstring(L, player->getName());
|
||||
lua_pushstring(L, player->getName().c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1852,7 +1920,7 @@ int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L)
|
|||
if (player == nullptr)
|
||||
return 0;
|
||||
|
||||
lua_pushinteger(L, player->getHotbarItemcount());
|
||||
lua_pushinteger(L, player->getMaxHotbarItemcount());
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -2686,6 +2754,9 @@ luaL_Reg ObjectRef::methods[] = {
|
|||
luamethod(ObjectRef, get_properties),
|
||||
luamethod(ObjectRef, set_nametag_attributes),
|
||||
luamethod(ObjectRef, get_nametag_attributes),
|
||||
luamethod(ObjectRef, set_observers),
|
||||
luamethod(ObjectRef, get_observers),
|
||||
luamethod(ObjectRef, get_effective_observers),
|
||||
|
||||
luamethod_aliased(ObjectRef, set_velocity, setvelocity),
|
||||
luamethod_aliased(ObjectRef, add_velocity, add_player_velocity),
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue