Compare commits
425 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f5ce2391c | ||
|
|
6d1a208018 | ||
|
|
d500241e3d | ||
|
|
61f3812f73 | ||
|
|
f2be1c39c8 | ||
|
|
244dc7ac06 | ||
|
|
3a0152c491 | ||
|
|
52e36b06e6 | ||
|
|
f1f1fce2db | ||
|
|
4aae915e4f | ||
|
|
814eb21def | ||
|
|
b5eb11c0ae | ||
|
|
72b14910da | ||
|
|
bca99fc723 | ||
|
|
b6fe5fee43 | ||
|
|
23e208c7aa | ||
|
|
8b3e80f534 | ||
|
|
4f77a91e04 | ||
|
|
c2a4d5f82d | ||
|
|
4238aa423b | ||
|
|
ae35167a5e | ||
|
|
499f2284bd | ||
|
|
274d8a7c65 | ||
|
|
8f98b4f243 | ||
|
|
e3ec044ed0 | ||
|
|
dd3530dc79 | ||
|
|
421835a30e | ||
|
|
db8cd2121c | ||
|
|
ec790a3884 | ||
|
|
ee45f2db43 | ||
|
|
ca62268d16 | ||
|
|
e217961b25 | ||
|
|
7485844880 | ||
|
|
32d10f8309 | ||
|
|
87dd2184a4 | ||
|
|
10328435e8 | ||
|
|
1c710ac003 | ||
|
|
4019be74a9 | ||
|
|
887fff9709 | ||
|
|
0e6b4d11d0 | ||
|
|
fd7dbb6d45 | ||
|
|
7e68262c0c | ||
|
|
112672594b | ||
|
|
1aa3efba4a | ||
|
|
bdd08fde57 | ||
|
|
6f96c14aba | ||
|
|
2a76a50d98 | ||
|
|
773f9f14d4 | ||
|
|
a104a55348 | ||
|
|
e653f9ea66 | ||
|
|
d71609da08 | ||
|
|
bf5718144f | ||
|
|
61df8b8dc7 | ||
|
|
5d097b5533 | ||
|
|
2c0094b9bd | ||
|
|
f531b7fd72 | ||
|
|
729e60da79 | ||
|
|
6c671cc48d | ||
|
|
a9fba46454 | ||
|
|
8baca62434 | ||
|
|
254005f3e5 | ||
|
|
dc3aeea697 | ||
|
|
1086af7bc6 | ||
|
|
5f5ea13251 | ||
|
|
4c29bf6923 | ||
|
|
d5ddee6cbf | ||
|
|
20f8eb9a6c | ||
|
|
08b7870c79 | ||
|
|
afd681d013 | ||
|
|
2eded3f078 | ||
|
|
9972639e26 | ||
|
|
39f2727503 | ||
|
|
ecabcb5c58 | ||
|
|
70fbef112c | ||
|
|
2cab46280b | ||
|
|
fc6bef7de6 | ||
|
|
29490cb0f7 | ||
|
|
d932f34693 | ||
|
|
cc6b56b034 | ||
|
|
053ca6287a | ||
|
|
fcd9c73f2f | ||
|
|
f714ac0611 | ||
|
|
b6a23b1bcc | ||
|
|
69497200f9 | ||
|
|
c9d4c33174 | ||
|
|
176cadc377 | ||
|
|
5672b93007 | ||
|
|
0b66465f33 | ||
|
|
c7d45fe51a | ||
|
|
46ef0bf313 | ||
|
|
56bc7814de | ||
|
|
d24a7001ab | ||
|
|
024e1d2d27 | ||
|
|
e86d2fea8d | ||
|
|
2ef085967d | ||
|
|
f390137d6e | ||
|
|
7cbe62fe7b | ||
|
|
3f0f7f4285 | ||
|
|
04d9bd518f | ||
|
|
550b042076 | ||
|
|
ce8e8f6bf4 | ||
|
|
079169612d | ||
|
|
baaab310fe | ||
|
|
36b5374715 | ||
|
|
bb74b9d488 | ||
|
|
54d48decad | ||
|
|
1d53ec4892 | ||
|
|
e835673c5e | ||
|
|
f2eb5e7a93 | ||
|
|
6da927a548 | ||
|
|
fd3588d49c | ||
|
|
7c88996210 | ||
|
|
b6065797ce | ||
|
|
21a76d8c88 | ||
|
|
e2e571ca1f | ||
|
|
81e08fc890 | ||
|
|
2a96b31ffc | ||
|
|
a5197a6719 | ||
|
|
bbade5d3bc | ||
|
|
7a99fdf490 | ||
|
|
0b21c93324 | ||
|
|
55cca34ee9 | ||
|
|
0b9ae73369 | ||
|
|
b1cb5fcb9f | ||
|
|
ae97435d80 | ||
|
|
ecc876045f | ||
|
|
c611a1f9e8 | ||
|
|
65d498f78e | ||
|
|
a0547b3435 | ||
|
|
93dd22b901 | ||
|
|
60cd83a332 | ||
|
|
0c12c1f400 | ||
|
|
affe299215 | ||
|
|
39417cf7a7 | ||
|
|
69c4d742f8 | ||
|
|
4022d35c46 | ||
|
|
d6f590878c | ||
|
|
71d9f1771c | ||
|
|
96fbc52071 | ||
|
|
7556bf43a6 | ||
|
|
722c0044b1 | ||
|
|
b93cce11d8 | ||
|
|
6bdd5c6773 | ||
|
|
a8e7e261b9 | ||
|
|
73c29e7763 | ||
|
|
e27757fa3a | ||
|
|
4e3b8db2b9 | ||
|
|
336f8d4dc7 | ||
|
|
7737906d2e | ||
|
|
a6f1242a11 | ||
|
|
53c2fbb4c4 | ||
|
|
1d042a977d | ||
|
|
166782040e | ||
|
|
9e198fc22c | ||
|
|
ecf535ee83 | ||
|
|
f79a51c265 | ||
|
|
bd25a06f44 | ||
|
|
1caf26f18b | ||
|
|
5861192752 | ||
|
|
02db521c80 | ||
|
|
ba65eb953c | ||
|
|
dbf2d26a85 | ||
|
|
60694cbd30 | ||
|
|
baafec9e9f | ||
|
|
65d4335922 | ||
|
|
5094838837 | ||
|
|
93ac2ed894 | ||
|
|
c011fa0188 | ||
|
|
c2057eee4b | ||
|
|
d445638265 | ||
|
|
f61f6626b7 | ||
|
|
857ba25115 | ||
|
|
00774bc28b | ||
|
|
f572266f19 | ||
|
|
c3893064a3 | ||
|
|
4183443f02 | ||
|
|
5715434d5e | ||
|
|
ab2419db24 | ||
|
|
35a83c3514 | ||
|
|
de09cac1e9 | ||
|
|
b64f4bdb3a | ||
|
|
008310aad9 | ||
|
|
4d024d737c | ||
|
|
50edb30a18 | ||
|
|
00f6bd0f08 | ||
|
|
81e40a1172 | ||
|
|
fe4f89f3fa | ||
|
|
0d372250c1 | ||
|
|
367720020c | ||
|
|
0dab82085d | ||
|
|
cb211d63cd | ||
|
|
2e497cc471 | ||
|
|
587f6656a4 | ||
|
|
4377c03168 | ||
|
|
1e0520074c | ||
|
|
b9f6832347 | ||
|
|
f8bb0cd3d1 | ||
|
|
129aef758e | ||
|
|
94f55cf406 | ||
|
|
a20b758e19 | ||
|
|
128842becf | ||
|
|
d51331f51f | ||
|
|
4ef221a645 | ||
|
|
79010e972e | ||
|
|
0ca530e251 | ||
|
|
57b4d46dbc | ||
|
|
50df5e2f59 | ||
|
|
b6db2c7262 | ||
|
|
9441b69ad2 | ||
|
|
08e3d16a58 | ||
|
|
3f3049fdba | ||
|
|
41fb7a8a7e | ||
|
|
5b9828e094 | ||
|
|
96e35585b0 | ||
|
|
f035fe9336 | ||
|
|
44c2e33c78 | ||
|
|
2785dcbbbf | ||
|
|
9b03bd3243 | ||
|
|
8f30456ee3 | ||
|
|
38557ff635 | ||
|
|
7bc2cde4dd | ||
|
|
f065d3a06b | ||
|
|
21f7e3a987 | ||
|
|
9f688bc433 | ||
|
|
6e9d31d4fb | ||
|
|
e81c48526b | ||
|
|
b405985b80 | ||
|
|
8b010c5a9f | ||
|
|
1e7b5d6fdb | ||
|
|
a55982e7f0 | ||
|
|
1ac378063e | ||
|
|
d497c92684 | ||
|
|
677dc2c155 | ||
|
|
beea8deeb5 | ||
|
|
0d0f1a2fb2 | ||
|
|
439701ed7a | ||
|
|
d945d0129c | ||
|
|
cc91477308 | ||
|
|
ac139ec03d | ||
|
|
b4f0e834bf | ||
|
|
6e6cdc834f | ||
|
|
4b81ae1b35 | ||
|
|
d569dc45a8 | ||
|
|
23d49fda29 | ||
|
|
62ad2c3bc1 | ||
|
|
25373ad294 | ||
|
|
26d0c0fd8d | ||
|
|
3afffcd36b | ||
|
|
5440de1785 | ||
|
|
25a56f11c8 | ||
|
|
8271c6481f | ||
|
|
83e26f839d | ||
|
|
c3f7905d82 | ||
|
|
05b54a8d18 | ||
|
|
e5cfdd369e | ||
|
|
c61d8cfb85 | ||
|
|
27f4195471 | ||
|
|
b2596eda32 | ||
|
|
9379440fcb | ||
|
|
b7c502c8d1 | ||
|
|
3c16d2d9b4 | ||
|
|
6cbc03a418 | ||
|
|
15ecc0fa65 | ||
|
|
7f2f8cdad1 | ||
|
|
a64646cb7b | ||
|
|
05f531c538 | ||
|
|
7ca335446b | ||
|
|
99e96a6581 | ||
|
|
7200d8f90e | ||
|
|
7038837aca | ||
|
|
541dcc0e5a | ||
|
|
1060b5aabf | ||
|
|
6ea73c4982 | ||
|
|
cff847273a | ||
|
|
e669f8db9b | ||
|
|
461cc30842 | ||
|
|
13d7cb957c | ||
|
|
47a439a905 | ||
|
|
053fb96694 | ||
|
|
b72c1f7367 | ||
|
|
e90738575f | ||
|
|
35718eec9c | ||
|
|
8285a53152 | ||
|
|
116fe7815b | ||
|
|
4c2efd7da3 | ||
|
|
1a433e3185 | ||
|
|
fa98a00916 | ||
|
|
f4dd46ad60 | ||
|
|
41825ccfbb | ||
|
|
4d1a5f12c0 | ||
|
|
cc58d56c6d | ||
|
|
683ef07312 | ||
|
|
c77c78cef5 | ||
|
|
88517030a4 | ||
|
|
45471e8e63 | ||
|
|
4e620beb75 | ||
|
|
e7ab875b47 | ||
|
|
be74ed9ab6 | ||
|
|
52b2eacd37 | ||
|
|
6b4210a2ea | ||
|
|
740d0da5ee | ||
|
|
34883d356e | ||
|
|
aeafcce314 | ||
|
|
ae1d82c325 | ||
|
|
1c89a07226 | ||
|
|
43e262f13e | ||
|
|
e5f802ab5c | ||
|
|
847860fc5c | ||
|
|
77e936445f | ||
|
|
41beb74ef7 | ||
|
|
67be50b706 | ||
|
|
cd840b7c9d | ||
|
|
07903949ec | ||
|
|
d2156ddaad | ||
|
|
a84ff4b3ff | ||
|
|
c02f13d33f | ||
|
|
f6490859fd | ||
|
|
4b7816dbf4 | ||
|
|
86ffbc3ec5 | ||
|
|
67257f44a5 | ||
|
|
3086f5567a | ||
|
|
bb8acb095d | ||
|
|
24be3cbb5f | ||
|
|
9773191103 | ||
|
|
ddc703c3ec | ||
|
|
09ec204e4b | ||
|
|
8b6cafa0e0 | ||
|
|
1ee8be9d43 | ||
|
|
91bc190d21 | ||
|
|
4dc833b642 | ||
|
|
895e9f8d5c | ||
|
|
12906ff631 | ||
|
|
9c9bcff107 | ||
|
|
443ca5c63b | ||
|
|
1102b1fc4c | ||
|
|
0d089eab21 | ||
|
|
b44fada29e | ||
|
|
859ea160e6 | ||
|
|
1c49e2ffc0 | ||
|
|
140245c58d | ||
|
|
47adcced60 | ||
|
|
a2054deb12 | ||
|
|
30fdfd9ded | ||
|
|
a87a86eb92 | ||
|
|
49dfbcfbc8 | ||
|
|
c558a4f4f6 | ||
|
|
4f49a2248f | ||
|
|
4e57da42c1 | ||
|
|
4f6c9e206c | ||
|
|
699e1d4b77 | ||
|
|
fa2978b3b9 | ||
|
|
ffcdf741fc | ||
|
|
429d7f33d4 | ||
|
|
b6a229775e | ||
|
|
0a4580368a | ||
|
|
e5b191e1f1 | ||
|
|
a07acc067b | ||
|
|
01e763f879 | ||
|
|
a95e75261a | ||
|
|
dcaa7ac609 | ||
|
|
7d2ae10849 | ||
|
|
642cac3759 | ||
|
|
662af2edba | ||
|
|
6f97e15a8f | ||
|
|
ab2fa2ca9d | ||
|
|
4666c99b27 | ||
|
|
e38415c56d | ||
|
|
3f3fce4664 | ||
|
|
1407a7bc8a | ||
|
|
1d268f4b83 | ||
|
|
92aab79d27 | ||
|
|
0823bb1276 | ||
|
|
18e42efa01 | ||
|
|
0ea16328df | ||
|
|
b037efc5c6 | ||
|
|
839bb71389 | ||
|
|
2ef7df5cfe | ||
|
|
f5d2d79f75 | ||
|
|
8e5fa96ffc | ||
|
|
6dbbe07d50 | ||
|
|
3c23410753 | ||
|
|
8e35ab78b4 | ||
|
|
7f2911b7f0 | ||
|
|
d877e90301 | ||
|
|
93db4be726 | ||
|
|
1f419ad19f | ||
|
|
3c7f6508ad | ||
|
|
39449d4b63 | ||
|
|
28e05295fa | ||
|
|
60c18d3550 | ||
|
|
482ab186a2 | ||
|
|
4814195dc4 | ||
|
|
d215b7a10e | ||
|
|
0e52b78590 | ||
|
|
b3a9d607c4 | ||
|
|
c00081b62c | ||
|
|
5e4739b460 | ||
|
|
0d8f598df2 | ||
|
|
2ef04cc308 | ||
|
|
7a0884e2cd | ||
|
|
fa858530cc | ||
|
|
1c61fe5ed9 | ||
|
|
57409ef382 | ||
|
|
06ba826803 | ||
|
|
6e6ef9489f | ||
|
|
45bbe39d1f | ||
|
|
6c9fc13083 | ||
|
|
4c8a642388 | ||
|
|
6208c9d64f | ||
|
|
76325d0ba9 | ||
|
|
cf1802a6de | ||
|
|
538a7b12bd | ||
|
|
57e0f52aaa | ||
|
|
1ae0335b62 | ||
|
|
ca1bff6b66 | ||
|
|
10cc62d2ca | ||
|
|
dd451a8a00 | ||
|
|
444ec1e412 | ||
|
|
82739f4d7d | ||
|
|
19825d853e | ||
|
|
d8ece2e3e9 | ||
|
|
bf4deb0ce6 | ||
|
|
da4739a26c | ||
|
|
fc24bf0915 | ||
|
|
9329b99cba |
37
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
37
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
@@ -1,5 +1,5 @@
|
||||
name: Bug report
|
||||
description: Create a report to help us improve
|
||||
description: Report a problem or mistake
|
||||
labels: ["Unconfirmed bug"]
|
||||
body:
|
||||
- type: markdown
|
||||
@@ -7,16 +7,17 @@ body:
|
||||
value: |
|
||||
Please note the following:
|
||||
|
||||
1. **Please update Luanti to the latest stable or dev version** before submitting bug reports. Make sure the bug is still reproducible on the latest version.
|
||||
2. This page is for reporting the bugs of **the engine itself**. For bugs in a particular game, please [search for the game in the ContentDB](https://content.luanti.org/packages/?type=game) and submit a bug report in their issue trackers.
|
||||
* For example, you can submit issues about the Minetest Game [in its own repository](https://github.com/luanti-org/minetest_game/issues).
|
||||
3. Please provide as many details as possible for us to spot the problem quicker.
|
||||
1. **Update Luanti to the latest stable or dev version** before submitting a bug report. Make sure the bug is still reproducible on the latest version.
|
||||
2. This page is for reporting the bugs of **the engine itself**. For bugs in a particular game, please [search for the game on ContentDB](https://content.luanti.org/packages/?type=game) and submit a bug report to its developers.
|
||||
* For example, issues about Minetest Game are submitted to [its own repository](https://github.com/luanti-org/minetest_game/issues).
|
||||
3. Please provide as many relevant details as possible.
|
||||
4. If you have used an LLM/AI to format your issue description, disclose this. Try to keep it concise. No walls of text please.
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Luanti version
|
||||
description: |
|
||||
Paste the Luanti version below.
|
||||
If you are on a dev version, please also indicate the git commit hash.
|
||||
Refer to the "About" tab of the menu or run `luanti --version` on the command line.
|
||||
placeholder: |
|
||||
Example:
|
||||
@@ -34,27 +35,28 @@ body:
|
||||
render: "true"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Operating system and version
|
||||
description: It is recommended to upgrade your operating system to see if the problem persists.
|
||||
description: Keeping your OS up-to-date can solve some problems on its own.
|
||||
placeholder: "Example: Ubuntu 22.04"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: CPU model
|
||||
description: Usually found in OS/system settings.
|
||||
description: Usually found in OS/system settings
|
||||
placeholder: "Example: Intel Core i5-2410M"
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: The GPU model and renderer can be omitted if the bug is not a graphical issue.
|
||||
value: If the bug is server-side please skip the "GPU model" and "Active renderer" fields.
|
||||
- type: input
|
||||
attributes:
|
||||
label: GPU model
|
||||
description: Usually found in OS/system settings.
|
||||
description: Usually found in OS/system settings
|
||||
placeholder: "Example: NVIDIA GeForce GTX 1660"
|
||||
validations:
|
||||
required: false
|
||||
@@ -65,15 +67,26 @@ body:
|
||||
placeholder: "Example: ES 3.2 / ogles2 / X11"
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Summary
|
||||
description: Describe your problem here.
|
||||
description: |
|
||||
Describe your problem here.
|
||||
|
||||
Make sure to include the all error messages you see and/or screenshots in case of visual bugs.
|
||||
Attaching a copy of your `debug.txt` and `minetest.conf` can be helpful as well.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: Explain how the problem has happened, providing a minimal test (e.g. a minimized code snippet) where possible.
|
||||
description: |
|
||||
Explain how the problem has happened.
|
||||
|
||||
To the extent possible, the reproduction steps should describe not just what you did (e.g. "I open my world and it crashes")
|
||||
but be detailed enough so that anyone with a fresh installation of Luanti could follow these steps to encounter the same problem.
|
||||
In case of modding issues it is often useful to include a code snippet.
|
||||
This will help us diagnose the problem quicker and more efficiently. Thank you.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
1
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
1
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
@@ -8,6 +8,7 @@ body:
|
||||
Please note the following:
|
||||
1. Only submit a feature request if the feature does not exist on the latest dev version.
|
||||
2. This page is for suggesting changes to **the engine itself**. To suggest changes to games, please [search for the game in the ContentDB](https://content.luanti.org/packages/?type=game) and submit a feature request in their issue trackers.
|
||||
3. If you have used an LLM/AI to format your issue description, disclose this. Try to keep it concise. No walls of text please.
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Problem
|
||||
|
||||
8
.github/workflows/windows.yml
vendored
8
.github/workflows/windows.yml
vendored
@@ -68,8 +68,8 @@ jobs:
|
||||
if-no-files-found: error
|
||||
|
||||
msvc:
|
||||
name: VS 2019 ${{ matrix.config.arch }}-${{ matrix.type }}
|
||||
runs-on: windows-2019
|
||||
name: VS 2022 ${{ matrix.config.arch }}-${{ matrix.type }}
|
||||
runs-on: windows-2025
|
||||
env:
|
||||
VCPKG_DEFAULT_TRIPLET: ${{matrix.config.vcpkg_triplet}}
|
||||
strategy:
|
||||
@@ -78,12 +78,12 @@ jobs:
|
||||
config:
|
||||
- {
|
||||
arch: x86,
|
||||
generator: "-G'Visual Studio 16 2019' -A Win32",
|
||||
generator: "-G'Visual Studio 17 2022' -A Win32",
|
||||
vcpkg_triplet: x86-windows
|
||||
}
|
||||
- {
|
||||
arch: x64,
|
||||
generator: "-G'Visual Studio 16 2019' -A x64",
|
||||
generator: "-G'Visual Studio 17 2022' -A x64",
|
||||
vcpkg_triplet: x64-windows
|
||||
}
|
||||
type: [portable]
|
||||
|
||||
@@ -20,6 +20,7 @@ read_globals = {
|
||||
"profiler",
|
||||
"Settings",
|
||||
"ValueNoise", "ValueNoiseMap",
|
||||
"tracy",
|
||||
|
||||
string = {fields = {"split", "trim"}},
|
||||
table = {fields = {"copy", "copy_with_metatables", "getn", "indexof", "keyof", "insert_all"}},
|
||||
@@ -40,7 +41,7 @@ stds.menu_common = {
|
||||
},
|
||||
}
|
||||
|
||||
files["builtin/client/register.lua"] = {
|
||||
files["builtin/client/init.lua"] = {
|
||||
globals = {
|
||||
debug = {fields={"getinfo"}},
|
||||
}
|
||||
|
||||
@@ -14,7 +14,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 13)
|
||||
set(VERSION_MINOR 14)
|
||||
set(VERSION_PATCH 0)
|
||||
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ android {
|
||||
applicationId 'net.minetest.minetest'
|
||||
minSdkVersion 21
|
||||
compileSdk 34
|
||||
targetSdkVersion 34
|
||||
targetSdkVersion 35
|
||||
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
|
||||
versionCode versionMajor * 1000000 + versionMinor * 10000 + versionPatch * 100 + versionBuild
|
||||
}
|
||||
|
||||
4
android/app/src/main/res/values-az/strings.xml
Normal file
4
android/app/src/main/res/values-az/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="label">Luanti</string>
|
||||
</resources>
|
||||
12
android/app/src/main/res/values-el/strings.xml
Normal file
12
android/app/src/main/res/values-el/strings.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="label">Luanti</string>
|
||||
<string name="loading">Φόρτωση…</string>
|
||||
<string name="notification_channel_name">Γενική ειδοποίηση</string>
|
||||
<string name="notification_channel_description">Ειδοποιήσεις από το Luanti</string>
|
||||
<string name="unzip_notification_title">Φόρτωση του Luanti</string>
|
||||
<string name="unzip_notification_description">Λιγότερο από 1 λεπτό…</string>
|
||||
<string name="game_notification_title">Το Luanti εκτελείται</string>
|
||||
<string name="ime_dialog_done">Ολοκληρώθηκε</string>
|
||||
<string name="no_web_browser">Δεν βρέθηκε πρόγραμμα περιήγησης ιστού</string>
|
||||
</resources>
|
||||
10
android/app/src/main/res/values-fil/strings.xml
Normal file
10
android/app/src/main/res/values-fil/strings.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="unzip_notification_title">Loading ang Luanti</string>
|
||||
<string name="unzip_notification_description">Sa loob ng isang minuto…</string>
|
||||
<string name="notification_channel_name">Notification na general</string>
|
||||
<string name="notification_channel_description">Notification mula sa Luanti</string>
|
||||
<string name="game_notification_title">Pina-pagana ang Luanti</string>
|
||||
<string name="ime_dialog_done">Tapos na</string>
|
||||
<string name="no_web_browser">Walang mahanap na web browser</string>
|
||||
</resources>
|
||||
@@ -3,9 +3,10 @@
|
||||
<string name="loading">Betöltés…</string>
|
||||
<string name="notification_channel_name">Általános értesítés</string>
|
||||
<string name="notification_channel_description">Értesítések a Luanti-től</string>
|
||||
<string name="unzip_notification_title">Luanti betöltése…</string>
|
||||
<string name="unzip_notification_title">A Luanti épp betölt</string>
|
||||
<string name="ime_dialog_done">Kész</string>
|
||||
<string name="no_web_browser">Nem található webböngésző</string>
|
||||
<string name="label">Luanti</string>
|
||||
<string name="unzip_notification_description">Kevesebb, mint 1 perc…</string>
|
||||
</resources>
|
||||
<string name="game_notification_title">A Luanti jelenleg fut</string>
|
||||
</resources>
|
||||
|
||||
4
android/app/src/main/res/values-hy/strings.xml
Normal file
4
android/app/src/main/res/values-hy/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="label">Luanti</string>
|
||||
</resources>
|
||||
4
android/app/src/main/res/values-kmr/strings.xml
Normal file
4
android/app/src/main/res/values-kmr/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="label">Luanti</string>
|
||||
</resources>
|
||||
12
android/app/src/main/res/values-pt-rBR/strings.xml
Normal file
12
android/app/src/main/res/values-pt-rBR/strings.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="label">Luanti</string>
|
||||
<string name="loading">Carregando…</string>
|
||||
<string name="notification_channel_name">Notificação geral</string>
|
||||
<string name="notification_channel_description">Notificações do Luanti</string>
|
||||
<string name="unzip_notification_title">Carregando Luanti</string>
|
||||
<string name="unzip_notification_description">Menos de 1 minuto…</string>
|
||||
<string name="game_notification_title">O Luanti está em execução</string>
|
||||
<string name="ime_dialog_done">Concluído</string>
|
||||
<string name="no_web_browser">Nenhum navegador encontrado</string>
|
||||
</resources>
|
||||
12
android/app/src/main/res/values-sk/strings.xml
Normal file
12
android/app/src/main/res/values-sk/strings.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="label">Luanti</string>
|
||||
<string name="loading">Načítavam…</string>
|
||||
<string name="notification_channel_name">Hlavné oznámenie</string>
|
||||
<string name="notification_channel_description">Oznámenia Luanti</string>
|
||||
<string name="unzip_notification_title">Načítanie Luanti</string>
|
||||
<string name="unzip_notification_description">Už iba minútka…</string>
|
||||
<string name="game_notification_title">Luanti už frčí</string>
|
||||
<string name="ime_dialog_done">Hotovo</string>
|
||||
<string name="no_web_browser">Nenašiel som žiaden prehliadač</string>
|
||||
</resources>
|
||||
4
android/app/src/main/res/values-tl/strings.xml
Normal file
4
android/app/src/main/res/values-tl/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="label">ᜎᜓᜏᜈ᜔ᜆᜒ</string>
|
||||
</resources>
|
||||
@@ -5,7 +5,7 @@
|
||||
<string name="loading">Завантаження…</string>
|
||||
<string name="notification_channel_name">Загальні сповіщення</string>
|
||||
<string name="unzip_notification_title">Luanti завантажується</string>
|
||||
<string name="unzip_notification_description">Менше за 1 хвилину…</string>
|
||||
<string name="unzip_notification_description">Менше 1 хвилини…</string>
|
||||
<string name="ime_dialog_done">Готово</string>
|
||||
<string name="notification_channel_description">Сповіщення від Luanti</string>
|
||||
<string name="game_notification_title">Luanti працює</string>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// 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", 13) // Version Minor
|
||||
project.ext.set("versionMinor", 14) // Version Minor
|
||||
project.ext.set("versionPatch", 0) // Version Patch
|
||||
// ^ keep in sync with cmake
|
||||
|
||||
@@ -9,14 +9,14 @@ project.ext.set("versionBuild", 0) // Version Build
|
||||
// ^ fourth version number to allow releasing Android-only fixes and beta versions
|
||||
|
||||
buildscript {
|
||||
ext.ndk_version = '27.2.12479018'
|
||||
ext.ndk_version = '27.3.13750724'
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:8.5.1'
|
||||
classpath 'de.undercouch:gradle-download-task:4.1.1'
|
||||
classpath 'com.android.tools.build:gradle:8.12.3'
|
||||
classpath 'de.undercouch:gradle-download-task:5.6.0'
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
@@ -30,5 +30,5 @@ allprojects {
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
delete rootProject.layout.buildDirectory
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -68,5 +68,5 @@ if (new File(depsDir, 'armeabi-v7a').exists()) {
|
||||
preBuild.dependsOn getDeps
|
||||
|
||||
clean {
|
||||
delete new File(buildDir.parent, 'deps')
|
||||
delete depsDir
|
||||
}
|
||||
|
||||
@@ -13,3 +13,6 @@ dofile(commonpath .. "information_formspecs.lua")
|
||||
dofile(clientpath .. "chatcommands.lua")
|
||||
dofile(clientpath .. "misc.lua")
|
||||
assert(loadfile(commonpath .. "item_s.lua"))({}) -- Just for push/read node functions
|
||||
|
||||
-- unset, as promised in initializeSecurityClient()
|
||||
debug.getinfo = nil
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- Localize functions to avoid table lookups (better performance).
|
||||
local string_sub, string_find = string.sub, string.find
|
||||
local string_sub, string_find, string_rep = string.sub, string.find, string.rep
|
||||
local math = math
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@@ -179,7 +179,7 @@ function dump(value, indent)
|
||||
write(newline)
|
||||
|
||||
local function write_entry(k, v)
|
||||
write(indent:rep(level))
|
||||
write(string_rep(indent, level))
|
||||
write("[")
|
||||
write_value(k, level + 1)
|
||||
write("] = ")
|
||||
@@ -201,7 +201,7 @@ function dump(value, indent)
|
||||
for _, k in ipairs(keys.string) do
|
||||
local v = val[k]
|
||||
if is_valid_identifier(k) then
|
||||
write(indent:rep(level))
|
||||
write(string_rep(indent, level))
|
||||
write(k)
|
||||
write(" = ")
|
||||
write_value(v, level + 1)
|
||||
@@ -219,7 +219,7 @@ function dump(value, indent)
|
||||
end
|
||||
if #keys.number == len then -- table is a list
|
||||
for _, v in ipairs(tbl) do
|
||||
write(indent:rep(level))
|
||||
write(string_rep(indent, level))
|
||||
write_value(v, level + 1)
|
||||
write(",")
|
||||
write(newline)
|
||||
@@ -238,7 +238,7 @@ function dump(value, indent)
|
||||
end
|
||||
end
|
||||
|
||||
write(indent:rep(level - 1))
|
||||
write(string_rep(indent, level - 1))
|
||||
write("}")
|
||||
end
|
||||
write_value(value, 1)
|
||||
@@ -658,7 +658,7 @@ function core.colorize(color, message)
|
||||
lines[i] = color_code .. line
|
||||
end
|
||||
|
||||
return table.concat(lines, "\n") .. core.get_color_escape_sequence("#ffffff")
|
||||
return table.concat(lines, "\n") .. core.get_color_escape_sequence("#fff")
|
||||
end
|
||||
|
||||
|
||||
@@ -674,6 +674,7 @@ function core.strip_colors(str)
|
||||
return (str:gsub(ESCAPE_CHAR .. "%([bc]@[^)]+%)", ""))
|
||||
end
|
||||
|
||||
|
||||
local function translate(textdomain, str, num, ...)
|
||||
local start_seq
|
||||
if textdomain == "" and num == "" then
|
||||
@@ -853,22 +854,22 @@ Intended to be used in chat command parameter parsing.
|
||||
|
||||
Parameters:
|
||||
* x, y, z: Parsed x, y, and z coordinates as strings
|
||||
* relative_to: Position to which to compare the position
|
||||
* relative_to: Optional position vector as reference point
|
||||
|
||||
Syntax of x, y and z:
|
||||
* "<number>": return as number
|
||||
* "~<number>": return <number> + player position on this axis
|
||||
* "~": return player position on this axis
|
||||
* "<number>": use as number
|
||||
* "~<number>": use <number> + reference point on this axis
|
||||
* "~": use reference point on this axis
|
||||
|
||||
Returns: a vector or nil for invalid input or if player does not exist
|
||||
Returns: a vector or nil for invalid input
|
||||
]]
|
||||
function core.parse_coordinates(x, y, z, relative_to)
|
||||
if not relative_to then
|
||||
x, y, z = tonumber(x), tonumber(y), tonumber(z)
|
||||
return x and y and z and { x = x, y = y, z = z }
|
||||
return x and y and z and vector.new(x, y, z)
|
||||
end
|
||||
local rx = core.parse_relative_number(x, relative_to.x)
|
||||
local ry = core.parse_relative_number(y, relative_to.y)
|
||||
local rz = core.parse_relative_number(z, relative_to.z)
|
||||
return rx and ry and rz and { x = rx, y = ry, z = rz }
|
||||
return rx and ry and rz and vector.new(rx, ry, rz)
|
||||
end
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
local builtin_shared = ...
|
||||
local debug_getinfo = debug.getinfo
|
||||
|
||||
do
|
||||
local default = {mod = "??", name = "??"}
|
||||
@@ -56,7 +57,7 @@ function builtin_shared.make_registration()
|
||||
core.callback_origins[func] = {
|
||||
-- may be nil or return nil
|
||||
mod = core.get_current_modname and core.get_current_modname() or "??",
|
||||
name = debug.getinfo(1, "n").name or "??"
|
||||
name = debug_getinfo(1, "n").name or "??"
|
||||
}
|
||||
end
|
||||
return t, registerfunc
|
||||
@@ -69,7 +70,7 @@ function builtin_shared.make_registration_reverse()
|
||||
core.callback_origins[func] = {
|
||||
-- may be nil or return nil
|
||||
mod = core.get_current_modname and core.get_current_modname() or "??",
|
||||
name = debug.getinfo(1, "n").name or "??"
|
||||
name = debug_getinfo(1, "n").name or "??"
|
||||
}
|
||||
end
|
||||
return t, registerfunc
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
local getinfo, rawget, rawset = debug.getinfo, rawget, rawset
|
||||
local debug_getinfo, rawget, rawset = debug.getinfo, rawget, rawset
|
||||
|
||||
function core.global_exists(name)
|
||||
if type(name) ~= "string" then
|
||||
@@ -18,7 +18,7 @@ function meta:__newindex(name, value)
|
||||
if declared[name] then
|
||||
return
|
||||
end
|
||||
local info = getinfo(2, "Sl")
|
||||
local info = debug_getinfo(2, "Sl")
|
||||
if info ~= nil then
|
||||
local desc = ("%s:%d"):format(info.short_src, info.currentline)
|
||||
local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name)
|
||||
@@ -36,7 +36,7 @@ function meta:__index(name)
|
||||
if declared[name] then
|
||||
return
|
||||
end
|
||||
local info = getinfo(2, "Sl")
|
||||
local info = debug_getinfo(2, "Sl")
|
||||
if info == nil then
|
||||
return
|
||||
end
|
||||
|
||||
@@ -8,15 +8,24 @@ function core.async_event_handler(jobid, retval)
|
||||
core.async_jobs[jobid] = nil
|
||||
end
|
||||
|
||||
local job_metatable = {__index = {}}
|
||||
|
||||
function job_metatable.__index:cancel()
|
||||
local cancelled = core.cancel_async_callback(self.id)
|
||||
if cancelled then
|
||||
core.async_jobs[self.id] = nil
|
||||
end
|
||||
return cancelled
|
||||
end
|
||||
|
||||
function core.handle_async(func, callback, ...)
|
||||
assert(type(func) == "function" and type(callback) == "function",
|
||||
"Invalid core.handle_async invocation")
|
||||
local args = {n = select("#", ...), ...}
|
||||
local mod_origin = core.get_last_run_mod()
|
||||
|
||||
local jobid = core.do_async_callback(func, args, mod_origin)
|
||||
core.async_jobs[jobid] = callback
|
||||
local id = core.do_async_callback(func, args, mod_origin)
|
||||
core.async_jobs[id] = callback
|
||||
|
||||
return true
|
||||
return setmetatable({id = id}, job_metatable)
|
||||
end
|
||||
|
||||
|
||||
@@ -48,6 +48,9 @@ core.features = {
|
||||
remove_item_match_meta = true,
|
||||
httpfetch_additional_methods = true,
|
||||
object_guids = true,
|
||||
on_timer_four_args = true,
|
||||
particlespawner_exclude_player = true,
|
||||
generate_decorations_biomes = true,
|
||||
}
|
||||
|
||||
function core.has_feature(arg)
|
||||
|
||||
@@ -353,7 +353,7 @@ function core.item_place(itemstack, placer, pointed_thing, param2)
|
||||
return itemstack, nil
|
||||
end
|
||||
|
||||
function core.item_secondary_use(itemstack, placer)
|
||||
function core.item_secondary_use(itemstack, user)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
@@ -390,7 +390,7 @@ function core.item_pickup(itemstack, picker, pointed_thing, ...)
|
||||
end
|
||||
end
|
||||
|
||||
-- Pickup item.
|
||||
-- Pick up item
|
||||
local inv = picker and picker:get_inventory()
|
||||
if inv then
|
||||
return inv:add_item("main", itemstack)
|
||||
@@ -569,6 +569,26 @@ function core.node_dig(pos, node, digger)
|
||||
exclude_player = diggername,
|
||||
}, true)
|
||||
end
|
||||
-- Particles also
|
||||
if diggername ~= "" and def and def.drawtype ~= "airlike" then
|
||||
-- cf. ParticleManager::addDiggingParticles() et al
|
||||
local gravity = tonumber(core.settings:get("movement_gravity")) or 9.81
|
||||
core.add_particlespawner({
|
||||
amount = 16,
|
||||
time = 0.001,
|
||||
minpos = vector.offset(pos, -0.25, -0.25, -0.25),
|
||||
maxpos = vector.offset(pos, 0.25, 0.25, 0.25),
|
||||
minvel = vector.new(-1.5, 0, -1.5),
|
||||
maxvel = vector.new(1.5, 3, 1.5),
|
||||
minacc = vector.new(0, -gravity, 0),
|
||||
maxacc = vector.new(0, -gravity, 0),
|
||||
minexptime = 0, maxexptime = 1,
|
||||
minsize = 0, maxsize = 0, -- random
|
||||
node = node,
|
||||
blend = (def and def.use_texture_alpha == "blend") and "blend" or "clip",
|
||||
exclude_player = diggername,
|
||||
})
|
||||
end
|
||||
|
||||
-- Run callback
|
||||
if def and def.after_dig_node then
|
||||
@@ -639,6 +659,7 @@ core.nodedef_default = {
|
||||
on_drop = redef_wrapper(core, 'item_drop'), -- core.item_drop
|
||||
on_pickup = redef_wrapper(core, 'item_pickup'), -- core.item_pickup
|
||||
on_use = nil,
|
||||
after_use = nil,
|
||||
can_dig = nil,
|
||||
|
||||
on_punch = redef_wrapper(core, 'node_punch'), -- core.node_punch
|
||||
|
||||
@@ -131,6 +131,7 @@ core.protocol_versions = {
|
||||
["5.11.0"] = 47,
|
||||
["5.12.0"] = 48,
|
||||
["5.13.0"] = 49,
|
||||
["5.14.0"] = 50,
|
||||
}
|
||||
|
||||
setmetatable(core.protocol_versions, {__newindex = function()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
local builtin_shared = ...
|
||||
local S = core.get_translator("__builtin")
|
||||
local debug_getinfo = debug.getinfo
|
||||
|
||||
--
|
||||
-- Make raw registration functions inaccessible to anyone except this file
|
||||
@@ -548,7 +549,7 @@ function core.registered_on_player_hpchange(player, hp_change, reason)
|
||||
local func = core.registered_on_player_hpchanges.modifiers[i]
|
||||
hp_change, last = func(player, hp_change, reason)
|
||||
if type(hp_change) ~= "number" then
|
||||
local debuginfo = debug.getinfo(func)
|
||||
local debuginfo = debug_getinfo(func)
|
||||
error("The register_on_hp_changes function has to return a number at " ..
|
||||
debuginfo.short_src .. " line " .. debuginfo.linedefined)
|
||||
end
|
||||
@@ -570,7 +571,7 @@ function core.register_on_player_hpchange(func, modifier)
|
||||
end
|
||||
core.callback_origins[func] = {
|
||||
mod = core.get_current_modname() or "??",
|
||||
name = debug.getinfo(1, "n").name or "??"
|
||||
name = debug_getinfo(1, "n").name or "??"
|
||||
}
|
||||
end
|
||||
|
||||
@@ -584,6 +585,7 @@ core.unregister_biome = make_wrap_deregistration(core.register_biome,
|
||||
local make_registration = builtin_shared.make_registration
|
||||
local make_registration_reverse = builtin_shared.make_registration_reverse
|
||||
|
||||
-- keep in sync with profiler/instrumentation.lua
|
||||
core.registered_on_chat_messages, core.register_on_chat_message = make_registration()
|
||||
core.registered_on_chatcommands, core.register_on_chatcommand = make_registration()
|
||||
core.registered_globalsteps, core.register_globalstep = make_registration()
|
||||
|
||||
@@ -1,3 +1,246 @@
|
||||
# textdomain: __builtin
|
||||
Empty command.=Празна команда.
|
||||
Invalid command: @1=Неприемлива команда: @1
|
||||
Invalid command usage.=Неприемлива употреба на команда.
|
||||
(@1 s)= (@1 сек)
|
||||
Command execution took @1 s=Изпълнението на командата отне @1 сек.
|
||||
You don't have permission to run this command (missing privileges: @1).=Нямате права да изпълните тази команда (липсващи права: @1).
|
||||
Unable to get position of player @1.=Неуспешно получаване на позицията на играч @1.
|
||||
Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Неправилен формат на област. Очаква се: (x1,y1,z1) (x2,y2,z2)
|
||||
<action>=<действие>
|
||||
Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=Показва действие в разговорите (напр. „/me поръчва пица“ показва „<име на играч> поръчва пица“)
|
||||
Show the name of the server owner=Показва името на собственика на сървъра
|
||||
The administrator of this server is @1.=Администраторът на този сървър е @1.
|
||||
There's no administrator named in the config file.=Във файла с настройки не е зададен администратор.
|
||||
@1 does not have any privileges.=@1 няма никакви права.
|
||||
Privileges of @1: @2=Правата на @1: @2
|
||||
[<name>]=[<име>]
|
||||
Show privileges of yourself or another player=Показва вашите права или тези на друг играч
|
||||
Player @1 does not exist.=Играчът @1 не съществува.
|
||||
<privilege>=<права>
|
||||
Return list of all online players with privilege=Показва списък на играчите на линия с дадени права
|
||||
Invalid parameters (see /help haspriv).=Неприемливи параметри (вижте /help haspriv).
|
||||
Unknown privilege!=Неизвестно право!
|
||||
No online player has the "@1" privilege.=Няма играч на линия с правата „@1“.
|
||||
Players online with the "@1" privilege: @2=Играчи на линия с правата „@1“: @2
|
||||
Your privileges are insufficient.=Нямате достатъчно права.
|
||||
Your privileges are insufficient. '@1' only allows you to grant: @2=Нямате достатъчно права. „@1“ ви позволява да давате само: @2
|
||||
Unknown privilege: @1=Неизвестни права: @1
|
||||
@1 granted you privileges: @2=@1 ви даде правото: @2
|
||||
<name> (<privilege> [, <privilege2> [<...>]] | all)=<име> (<право> [, <право2> [<…>]] | all)
|
||||
Give privileges to player=Дава права на играч
|
||||
Invalid parameters (see /help grant).=Неприемливи параметри (вижте /help grant).
|
||||
<privilege> [, <privilege2> [<...>]] | all=<право> [, <право2> [<…>]] | all
|
||||
Grant privileges to yourself=Дава права на себе си
|
||||
Invalid parameters (see /help grantme).=Неприемливи параметри (вижте /help grantme).
|
||||
Your privileges are insufficient. '@1' only allows you to revoke: @2=Нямате достатъчно права. „@1“ ви позволява да отнемате само: @2
|
||||
Note: Cannot revoke in singleplayer: @1=Забележка: Не може да отнемате права в режим един играч: @1
|
||||
Note: Cannot revoke from admin: @1=Забележка: Не може да отнемате права на администратор: @1
|
||||
No privileges were revoked.=Не са отнети права.
|
||||
@1 revoked privileges from you: @2=@1 ви отне права: @2
|
||||
Remove privileges from player=Отнема права от играч
|
||||
Invalid parameters (see /help revoke).=Неприемливи параметри (вижте /help revoke).
|
||||
Revoke privileges from yourself=Отнема права от себе си
|
||||
Invalid parameters (see /help revokeme).=Неприемливи параметри (вижте /help revokeme).
|
||||
<name> <password>=<име> <парола>
|
||||
Set player's password (sent unencrypted, thus insecure)=Задава парола на играч (изпраща се нешифрована, следователно несигурно)
|
||||
Name field required.=Полето за име е задължително.
|
||||
Your password was cleared by @1.=Вашата парола е премахната от @1.
|
||||
Password of player "@1" cleared.=Паролата на играч „@1“ е премахната.
|
||||
Your password was set by @1.=Вашата парола е зададена от @1.
|
||||
Password of player "@1" set.=Паролата на играча „@1“ е зададена.
|
||||
<name>=<име>
|
||||
Set empty password for a player=Задава празна парола на играч
|
||||
Reload authentication data=Презарежда данните за удостоверяване
|
||||
Done.=Готово.
|
||||
Failed.=Грешка.
|
||||
Remove a player's data=Премахва данните на играч
|
||||
Player "@1" removed.=Играч „@1“ е премахнат.
|
||||
No such player "@1" to remove.=Няма такъв играч „@1“, който да бъде премахнат.
|
||||
Player "@1" is connected, cannot remove.=Играч „@1“ е свързан, не може да бъде премахнат.
|
||||
Unhandled remove_player return code @1.=Неподдържан код на състояние remove_player @1.
|
||||
Cannot teleport out of map bounds!=Не може да се телепортира извън границите на света!
|
||||
Cannot get player with name @1.=Не може да бъде намерен играч с име @1.
|
||||
Cannot teleport, @1 is attached to an object!=Не може да се телепортира, @1 е прикрепен към обект!
|
||||
Teleporting @1 to @2.=Телепортиране на @1 до @2.
|
||||
One does not teleport to oneself.=Не може да се телепортирате към себе си.
|
||||
Cannot get teleportee with name @1.=Не може да бъде намерен телепортиран играч с име @1.
|
||||
Cannot get target player with name @1.=Не може да бъде намерен целеви играч с име @1.
|
||||
Teleporting @1 to @2 at @3.=Телепортиране на @1 до @2 на @3.
|
||||
<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=<X>,<Y>,<Z> | <до_име> | <име> <X>,<Y>,<Z> | <име> <до_име>
|
||||
Teleport to position or player=Телепортира до координати или играч
|
||||
You don't have permission to teleport other players (missing privilege: @1).=Нямате право да телепортирате други играчи (липсващи права: @1).
|
||||
([-n] <name> <value>) | <name>=([-n] <име> <стойност>) | <име>
|
||||
Set or read server configuration setting=Задава или извежда на екрата настройка на сървъра
|
||||
Failed. Cannot modify secure settings. Edit the settings file manually.=Грешка! Настройките за сигурност не могат да бъдат променяни. Променете файла с настройки ръчно.
|
||||
Failed. Use '/set -n <name> <value>' to create a new setting.=Грешка! Използвайте „/set -n <име> <стойност>“, за да създадете нова настройка.
|
||||
@1 @= @2=@1 @= @2
|
||||
<not set>=<не е зададено>
|
||||
Invalid parameters (see /help set).=Неприемливи параметри (вижте /help set).
|
||||
Finished emerging @1 blocks in @2ms.=Зареждането на @1 блока завърши за @2 мс.
|
||||
emergeblocks update: @1/@2 blocks emerged (@3%)=обновяване на emergeblocks: @1/@2 блока заредени (@3%)
|
||||
(here [<radius>]) | (<pos1> <pos2>)=(тук [<радиус>]) | (<коорд1> <коорд2>)
|
||||
Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Зарежда (или ако липсват, генерира) блокове от света в областта от коорд1 до коорд2 (<коорд1> и <коорд2> трябва да са в скоби)
|
||||
Started emerge of area ranging from @1 to @2.=Започна зареждане на областта от @1 до @2.
|
||||
Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Премахва блокове от света в областта от коорд1 до коорд2 (<коорд1> и <коорд2> трябва да са в скоби)
|
||||
Successfully cleared area ranging from @1 to @2.=Успешно изчистена област от @1 до @2.
|
||||
Failed to clear one or more blocks in area.=Неуспешно изчистване на един или повече блока в областта.
|
||||
Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=Нулира осветлението в областта между коорд1 и коорд2 (<коорд1> и <коорд2> трябва да са в скоби)
|
||||
Successfully reset light in the area ranging from @1 to @2.=Успешно нулирано осветление в област от @1 до @2.
|
||||
Failed to load one or more blocks in area.=Неуспешно зареждане на един или повече блока в областта.
|
||||
List mods installed on the server=Показва списък с модификациите, инсталирани на сървъра
|
||||
No mods installed.=Няма инсталирани модификации.
|
||||
Cannot give an empty item.=Не може да бъде даден празен предмет.
|
||||
Cannot give an unknown item.=Не може да бъде даден неизвестен предмет.
|
||||
Giving 'ignore' is not allowed.=Не е позволено да бъде даван „ignore“.
|
||||
@1 is not a known player.=@1 не е известен играч.
|
||||
@1 partially added to inventory.=@1 частично добавен в инвентара.
|
||||
@1 could not be added to inventory.=@1 не може да бъде добавен в инвентара.
|
||||
@1 added to inventory.=@1 добавен в инвентара.
|
||||
@1 partially added to inventory of @2.=@1 частично добавен в инвентара на @2.
|
||||
@1 could not be added to inventory of @2.=@1 не може да бъде добавен в инвентара на @2.
|
||||
@1 added to inventory of @2.=@1 добавен в инвентара на @2.
|
||||
<name> <ItemString> [<count> [<wear>]]=<име> <име-на-предмет> [<брой> [<износване>]]
|
||||
Give item to player=Дава предмет на играч
|
||||
Name and ItemString required.=Изисква се име и име-на-предмет.
|
||||
<ItemString> [<count> [<wear>]]=<име-на-предмет> [<брой> [<износване>]]
|
||||
Give item to yourself=Дава предмет на себе си
|
||||
ItemString required.=Изисква се име-на-предмет.
|
||||
<EntityName> [<X>,<Y>,<Z>]=<име-на-същество> [<X>,<Y>,<Z>]
|
||||
Spawn entity at given (or your) position=Създава същество на дадена (или вашата) позиция
|
||||
EntityName required.=Изисква се име-на-същество.
|
||||
Unable to spawn entity, player is nil.=Неуспешно създаване на същество, играчът е null.
|
||||
Cannot spawn an unknown entity.=Не може да бъде създадено неизвестно същество.
|
||||
Invalid parameters (@1).=Неприемливи параметри (@1).
|
||||
@1 spawned.=@1 е създаден.
|
||||
@1 failed to spawn.=@1 не можа да бъде създаден.
|
||||
Destroy item in hand=Унищожава предмета в ръката
|
||||
Unable to pulverize, no player.=Неуспешно смачкване, няма играч.
|
||||
Unable to pulverize, no item in hand.=Неуспешно смачкване, няма предмет в ръката.
|
||||
An item was pulverized.=Предмет беше смачкан.
|
||||
[<range>] [<seconds>] [<limit>]=[<обхват>] [<секунди>] [<ограничение>]
|
||||
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=Проверява кой последно е докоснал възел или близък възел в рамките на времето, зададено от <секунди>. По подразбиране: обхват @= 0, секунди @= 86400 @= 24ч, ограничение @= 5. Задайте <секунди> на inf за без ограничение.
|
||||
Rollback functions are disabled.=Функциите за отменяне на действия са изключени.
|
||||
That limit is too high!=Ограничението е твърде голямо!
|
||||
Checking @1 ...=Проверка @1…
|
||||
Nobody has touched the specified location in @1 seconds.=Никой не е докосвал указаното място през последните @1 секунди.
|
||||
@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 преди @5 секунди.
|
||||
Punch a node (range@=@1, seconds@=@2, limit@=@3).=Удар на възел (обхват@=@1, секунди@=@2, ограничение@=@3).
|
||||
(<name> [<seconds>]) | (:<actor> [<seconds>])=(<име> [<секунди>]) | (:<променящ> [<секунди>])
|
||||
Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=Отменя действията на играч. По подразбиране <секунди> е 60. Задайте <секунди> на inf за без ограничение.
|
||||
Invalid parameters. See /help rollback and /help rollback_check.=Неприемливи параметри. Вижте /help rollback и /help rollback_check.
|
||||
Reverting actions of player '@1' since @2 seconds.=Отменяне действията на играча „@1“ отпреди @2 секунди.
|
||||
Reverting actions of @1 since @2 seconds.=Отменяне действията на @1 отпреди @2 секунди.
|
||||
(log is too long to show)=(дневникът е твърде дълъг, за да бъде показан)
|
||||
Reverting actions succeeded.=Действията са отменени.
|
||||
Reverting actions FAILED.=Грешка при отменяне на действията.
|
||||
Show server status=Показва състоянието на сървъра
|
||||
This command was disabled by a mod or game.=Тази команда е изключена от модификация или игра.
|
||||
[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>]
|
||||
Show or set time of day=Показва или задава часа на деня
|
||||
Current time is @1:@2.=Текущото време е @1:@2.
|
||||
You don't have permission to run this command (missing privilege: @1).=Нямате право да изпълните тази команда (липсващи права: @1).
|
||||
Invalid time (must be between 0 and 24000).=Неправилно време (трябва да бъде между 0 и 24000).
|
||||
Time of day changed.=Часът на деня е променен.
|
||||
Invalid hour (must be between 0 and 23 inclusive).=Неверен час (трябва да бъде между 0 и 23 включително).
|
||||
Invalid minute (must be between 0 and 59 inclusive).=Невярна минута (трябва да бъде между 0 и 59 включително).
|
||||
Show day count since world creation=Показва броя дни от създаването на света
|
||||
Current day is @1.=Текущият ден е @1.
|
||||
[<delay_in_seconds> | -1] [-r] [<message>]=[<забавяне_в_секунди> | -1] [-r] [<съобщение>]
|
||||
Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=Изключва сървъра (-1 отменя забавено спиране, -r позволява на играчите повторно да се свързват)
|
||||
Server shutting down (operator request).=Сървърът се изключва (по искане на оператор).
|
||||
Ban the IP of a player or show the ban list=Забранява играч/IP или извежда списък със забранените
|
||||
The ban list is empty.=Списъкът със забранени е празен.
|
||||
Ban list: @1=Списък със забранени: @1
|
||||
You cannot ban players in singleplayer!=Не можете да забраните играчи в режим един играч!
|
||||
Player is not online.=Играчът не е на линия.
|
||||
Failed to ban player.=Грешка при забраняване на играч.
|
||||
Banned @1.=Играчът @1 е забранен.
|
||||
<name> | <IP_address>=<име> | <IP_адрес>
|
||||
Remove IP ban belonging to a player/IP=Премахва забрана по IP на играч/IP.
|
||||
Failed to unban player/IP.=Грешка при премахване забраната на играч/IP.
|
||||
Unbanned @1.=Премахната забрана на @1.
|
||||
<name> [<reason>]=<име> [<причина>]
|
||||
Kick a player=Изгонва играч
|
||||
Failed to kick player @1.=Грешка при изгонване на играча @1.
|
||||
Kicked @1.=Играчът @1 е изгонен.
|
||||
[full | quick]=[пълно | бързо]
|
||||
Clear all objects in world=Премахва всички обекти в света
|
||||
Invalid usage, see /help clearobjects.=Неприемливи параметри. Вижте /help clearobjects.
|
||||
Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Премахване на всички обекти. Може да отнеме време. Може и времето за връзка да изтече. (by @1)
|
||||
Cleared all objects.=Премахнати са всички обекти.
|
||||
<name> <message>=<име> <съобщение>
|
||||
Send a direct message to a player=Изпраща лично съобщение на играч
|
||||
Invalid usage, see /help msg.=Неприемливи параметри. Вижте /help msg.
|
||||
The player @1 is not online.=Играчът @1 не е на линия.
|
||||
DM from @1: @2=ЛС от @1: @2
|
||||
DM sent to @1: @2=ЛС изпратено до @1: @2
|
||||
Get the last login time of a player or yourself=Получава последното влизане на играч или себе си
|
||||
@1's last login time was @2.=Последното влизане на @1 е @2.
|
||||
@1's last login time is unknown.=Последното влизане на @1 е неизвестно.
|
||||
Clear the inventory of yourself or another player=Изчиства инвентара на друг играч или вас
|
||||
You don't have permission to clear another player's inventory (missing privilege: @1).=Нямате право да изчиствате инвентара на друг играч (липсващи права: @1).
|
||||
@1 cleared your inventory.=@1 изчисти вашия инвентар.
|
||||
Cleared @1's inventory.=Инвентарът на @1 е изчистен.
|
||||
Player must be online to clear inventory!=Играчът трябва да е онлайн, за да изчистите инвентара му!
|
||||
Players can't be killed, damage has been disabled.=Играчите не могат да бъдат убивани, щетите са изключени.
|
||||
Player @1 is not online.=Играчът @1 не е на линия.
|
||||
You are already dead.=Вече сте мъртви.
|
||||
@1 is already dead.=@1 вече е мъртъв.
|
||||
@1 has been killed.=@1 е убит.
|
||||
Kill player or yourself=Убива играч или себе си
|
||||
Invalid parameters (see /help @1).=Неприемливи параметри (вижте /help @1).
|
||||
Too many arguments, try using just /help <command>=Твърде много аргументи, опитайте /help <команда>
|
||||
Available commands: @1=Достъпни команди: @1
|
||||
Use '/help <cmd>' to get more information, or '/help all' to list everything.=Използвайте „/help <cmd>“, за да получите повече информация, или „/help all“, за да видите списък с всички команди.
|
||||
Available commands:=Достъпни команди:
|
||||
Command not available: @1=Командата не е достъпна: @1
|
||||
[all | privs | <cmd>] [-t]=[all | privs | <команда>] [-t]
|
||||
Get help for commands or list privileges (-t: output in chat)=Получава помощ за команди или списък с права (-t: извежда в панела за разговори)
|
||||
Available privileges:=Достъпни права:
|
||||
You died=Умряхте
|
||||
Respawn=Прераждане
|
||||
Command=Команда
|
||||
Parameters=Параметри
|
||||
For more information, click on any entry in the list.=За повече информация щракнете върху елемент от списъка.
|
||||
Double-click to copy the entry to the chat history.=Двоен клик за копиране на елемента в историята на разговори.
|
||||
Command: @1 @2=Команда: @1 @2
|
||||
Available commands: (see also: /help <cmd>)=Достъпни команди: (вижте /help <команда>)
|
||||
Close=Затваряне
|
||||
Privilege=Права
|
||||
Description=Описание
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=Управлява инструмента за профилиране и данните от него. Може да изведе в панела за разговори (print), в дневника (dump) или във файл в света (save). Форматът може да бъде txt, csv, lua, json, json_pretty (структурите може да бъдат променени). Филтърът е шаблон на lua за ограничаване на изхода до съвпадащи имена на модификации.
|
||||
Statistics written to action log.=Статистиката е записана в дневника.
|
||||
Statistics were reset.=Статистиката е нулирана.
|
||||
@1 joined the game.=@1 се присъедини.
|
||||
@1 left the game.=@1 напусна играта.
|
||||
@1 left the game (timed out).=@1 напусна играта (изтекло време).
|
||||
(no description)=(няма описание)
|
||||
Can interact with things and modify the world=Може да взаимодейства с неща и променя света
|
||||
Can speak in chat=Може да пише съобщения
|
||||
Can modify basic privileges (@1)=Може да променя основните права (@1)
|
||||
Can modify privileges=Може да променя права
|
||||
Can teleport self=Може да телепортира себе си
|
||||
Can teleport other players=Може да телепортира играчи
|
||||
Can set the time of day using /time=Може да задава часа през деня чрез /time
|
||||
Can do server maintenance stuff=Може да извършва поддръжка на сървъра
|
||||
Can bypass node protection in the world=Може да заобикаля защитата на възли в света
|
||||
Can ban and unban players=Може да забранява и разрешава играчи
|
||||
Can kick players=Може да изгонва играчи
|
||||
Can use /give and /giveme=Може да използва /give и /giveme
|
||||
Can use /setpassword and /clearpassword=Може да използва /setpassword и /clearpassword
|
||||
Can use fly mode=Може да използва режим на летене
|
||||
Can use fast mode=Може да използва режим на бързо придвижване
|
||||
Can fly through solid nodes using noclip mode=Може да преминава през твърди възли в режим „без изрязване“
|
||||
Can use the rollback functionality=Може да използва възможността за отменяне на действия
|
||||
Can enable wireframe=Може да включва телени рамки
|
||||
Unknown Item=Неизвестен предмет
|
||||
Air=Въздух
|
||||
Ignore=Пренебрегване
|
||||
You can't place 'ignore' nodes!=Не можете да поставяте възли „пренебрегване“!
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=Стойностите по-долу показват абсолютното/относителното време за всяка стъпка на сървъра от замерваната функция.
|
||||
A total of @1 sample(s) were taken.=Взети са общи @1 проби.
|
||||
The output is limited to '@1'.=Изходът е ограничен до „@1“.
|
||||
Saving of profile failed: @1=Грешка при запазване на профила: @1
|
||||
Profile saved to @1=Профилът е запазен в @1
|
||||
|
||||
@@ -192,7 +192,7 @@ Send a direct message to a player=Eine Direktnachricht an einen Spieler senden
|
||||
Invalid usage, see /help msg.=Ungültige Verwendung, siehe /help msg.
|
||||
The player @1 is not online.=Der Spieler @1 ist nicht online.
|
||||
DM from @1: @2=DN von @1: @2
|
||||
Message sent.=Nachricht gesendet.
|
||||
DM sent to @1: @2=DN an @1 gesendet: @2
|
||||
Get the last login time of a player or yourself=Den letzten Loginzeitpunkt eines Spielers oder Ihren eigenen anfragen
|
||||
@1's last login time was @2.=Letzter Loginzeitpunkt von @1 war @2.
|
||||
@1's last login time is unknown.=Letzter Loginzeitpunkt von @1 ist unbekannt.
|
||||
@@ -207,6 +207,8 @@ You are already dead.=Sie sind schon tot.
|
||||
@1 is already dead.=@1 ist bereits tot.
|
||||
@1 has been killed.=@1 wurde getötet.
|
||||
Kill player or yourself=Einen Spieler oder Sie selbst töten
|
||||
You died=Sie sind gestorben
|
||||
Respawn=Wiederbeleben
|
||||
@1 joined the game.=@1 ist dem Spiel beigetreten.
|
||||
@1 left the game.=@1 hat das Spiel verlassen.
|
||||
@1 left the game (timed out).=@1 hat das Spiel verlassen (Netzwerkzeitüberschreitung).
|
||||
@@ -234,15 +236,11 @@ Air=Luft
|
||||
Ignore=Ignorieren
|
||||
You can't place 'ignore' nodes!=Sie können keine „ignore“-Blöcke platzieren!
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<Filter>] | dump [<Filter>] | save [<Format> [<Filter>]] | reset
|
||||
Handle the profiler and profiling data=Den Profiler und Profilingdaten verwalten
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=Den Profiler benutzen und mit Profiling-Daten arbeiten. Kann in den Chat (print), in das Action-Protokoll (dump) oder in eine Datei in der Welt (save) ausgeben. Das Format kann „txt“, „csv“, „lua“, „json“ oder „json_pretty“ sein (die Strukturen könnten sich in Zukunft ändern). Filter ist ein Lua-Pattern, das benutzt wird, um die Ausgabe auf passende Modnamen einzuschränken.
|
||||
Statistics written to action log.=Statistiken zum Aktionsprotokoll geschrieben.
|
||||
Statistics were reset.=Statistiken wurden zurückgesetzt.
|
||||
Usage: @1=Verwendung: @1
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Format kann entweder „txt“, „csv“, „lua“, „json“ oder „json_pretty“ sein (die Struktur kann sich in Zukunft ändern).
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=Die unten angegebenen Werte zeigen absolute/relative Zeitspannen, die je Server-Step von der instrumentierten Funktion in Anspruch genommen wurden.
|
||||
A total of @1 sample(s) were taken.=Es wurden insgesamt @1 Datenpunkt(e) aufgezeichnet.
|
||||
The output is limited to '@1'.=Die Ausgabe ist beschränkt auf „@1“.
|
||||
Saving of profile failed: @1=Speichern des Profils fehlgeschlagen: @1
|
||||
Profile saved to @1=Profil abgespeichert nach @1
|
||||
You died=Sie sind gestorben
|
||||
Respawn=Wiederbeleben
|
||||
|
||||
@@ -192,7 +192,7 @@ Send a direct message to a player=Sendu rekte privatan mesaĝon al ludanto
|
||||
Invalid usage, see /help msg.=Nevalida uzo, vidu /help msg.
|
||||
The player @1 is not online.=La ludanto @1 ne ĉeretas.
|
||||
DM from @1: @2=Privata mesaĝo de @1: @2
|
||||
Message sent.=Mesaĝo sendita.
|
||||
DM sent to @1: @2=
|
||||
Get the last login time of a player or yourself=Vidi la lastan salutotempon de ludanto, aŭ vi mem
|
||||
@1's last login time was @2.=Lasta salutotempo de @1 estas @2.
|
||||
@1's last login time is unknown.=Lasta salutotempo de @1 estas nesciata.
|
||||
@@ -207,6 +207,8 @@ You are already dead.=Vi jam estas mortinta.
|
||||
@1 is already dead.=@1 estas mortinta.
|
||||
@1 has been killed.=@1 estas murdita.
|
||||
Kill player or yourself=Mortigi ludanton aŭ vin mem
|
||||
You died=Vi mortis
|
||||
Respawn=Renaskiĝi
|
||||
@1 joined the game.=@1 aliĝis la ludon.
|
||||
@1 left the game.=@1 foriris de la ludo.
|
||||
@1 left the game (timed out).=@1 foriris de la ludo (tempo-elĉerpo)
|
||||
@@ -234,15 +236,11 @@ Air=Aero
|
||||
Ignore=Malatenti
|
||||
You can't place 'ignore' nodes!=Vi ne povas meti «malatentajn» monderojn!
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<filtrilo>] | dump [<filtrilo>] | save [<formo> [<filtrilo>]] | reset
|
||||
Handle the profiler and profiling data=Trakti la analizilon kaj analizajn datumojn
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
|
||||
Statistics written to action log.=Analizoj skribitaj al agoprotokolo.
|
||||
Statistics were reset.=Analizoj forviŝitaj.
|
||||
Usage: @1=Uzado: @1
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Formo povas estas txt, csv, lua, json, aŭ json_pretty (struktuoj eble iam ŝanĝiĝos).
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=Valoroj subaj montras la malrelativan/relativan tempon pasigitan de la servilo je ĉiu paŝo de la funkcio.
|
||||
A total of @1 sample(s) were taken.=Sume @1 ekzemplero(j) konserviĝis.
|
||||
The output is limited to '@1'.=La eligo estas limigita al «@1».
|
||||
Saving of profile failed: @1=Konservado de profilo malsukcesis: @1
|
||||
Profile saved to @1=Profilo konservita al @1
|
||||
You died=Vi mortis
|
||||
Respawn=Renaskiĝi
|
||||
|
||||
@@ -192,7 +192,7 @@ 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é.
|
||||
DM sent to @1: @2=
|
||||
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.
|
||||
@@ -207,6 +207,8 @@ 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.
|
||||
You died=Vous êtes mort
|
||||
Respawn=Réapparaître
|
||||
@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é).
|
||||
@@ -234,15 +236,11 @@ 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
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
|
||||
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
|
||||
You died=Vous êtes mort
|
||||
Respawn=Réapparaître
|
||||
|
||||
@@ -192,7 +192,7 @@ Send a direct message to a player=Kirim pesan langsung kepada pemain
|
||||
Invalid usage, see /help msg.=Penggunaan tidak sah. Lihat /help msg.
|
||||
The player @1 is not online.=Pemain @1 tidak daring.
|
||||
DM from @1: @2=Pesan langsung dari @1: @2
|
||||
Message sent.=Pesan terkirim.
|
||||
DM sent to @1: @2=
|
||||
Get the last login time of a player or yourself=Ambil waktu masuk terakhir pemain atau diri Anda
|
||||
@1's last login time was @2.=Waktu masuk terakhir @1 adalah @2.
|
||||
@1's last login time is unknown.=Waktu masuk terakhir @1 tidak diketahui.
|
||||
@@ -207,6 +207,8 @@ You are already dead.=Anda telah mati.
|
||||
@1 is already dead.=@1 telah mati.
|
||||
@1 has been killed.=@1 telah dibunuh.
|
||||
Kill player or yourself=Bunuh pemain atau diri Anda
|
||||
You died=Anda mati
|
||||
Respawn=Bangkit kembali
|
||||
@1 joined the game.=@1 bergabung dalam permainan.
|
||||
@1 left the game.=@1 keluar permainan.
|
||||
@1 left the game (timed out).=@1 keluar permainan (kehabisan waktu).
|
||||
@@ -234,15 +236,11 @@ Air=Udara
|
||||
Ignore=Ignore
|
||||
You can't place 'ignore' nodes!=Anda tidak dapat menaruh nodus 'ignore'!
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset
|
||||
Handle the profiler and profiling data=Menangani profiler dan data profiling
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
|
||||
Statistics written to action log.=Statistik ditulis ke log action.
|
||||
Statistics were reset.=Statistik diatur ulang.
|
||||
Usage: @1=Penggunaan: @1
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Format berupa salah satu dari txt, csv, lua, json, json_pretty (struktur mungkin berubah).
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=Nilai berikut menampilkan waktu mutlak/relatif yang dihabiskan tiap langkah server oleh fungsi instrumen.
|
||||
A total of @1 sample(s) were taken.=Total @1 sampel yang diambil.
|
||||
The output is limited to '@1'.=Keluaran dibatasi ke '@1'.
|
||||
Saving of profile failed: @1=Penyimpanan profil gagal: @1
|
||||
Profile saved to @1=Profil disimpan ke @1
|
||||
You died=Anda mati
|
||||
Respawn=Bangkit kembali
|
||||
|
||||
@@ -193,7 +193,7 @@ Send a direct message to a player=Invia un messaggio privato a unə giocatore
|
||||
Invalid usage, see /help msg.=Uso incorretto, vedi /help msg
|
||||
The player @1 is not online.=Lə giocatore @1 non è connessə.
|
||||
DM from @1: @2=Messaggio privato da @1: @2
|
||||
Message sent.=Messaggio inviato.
|
||||
DM sent to @1: @2=
|
||||
Get the last login time of a player or yourself=Ritorna l'ultimo accesso di unə giocatore o di te stessǝ
|
||||
@1's last login time was @2.=L'ultimo accesso di @1 è avvenuto il @2.
|
||||
@1's last login time is unknown.=L'ultimo accesso di @1 è ignoto.
|
||||
@@ -208,6 +208,8 @@ You are already dead.=Sei già mortǝ.
|
||||
@1 is already dead.=@1 è già mortǝ.
|
||||
@1 has been killed.=@1 è stato uccisǝ.
|
||||
Kill player or yourself=Uccide unə giocatore o te stessǝ
|
||||
You died=Sei morto
|
||||
Respawn=Rinasci
|
||||
@1 joined the game.=@1 si è connessə.
|
||||
@1 left the game.=@1 si è disconnessə.
|
||||
@1 left the game (timed out).=@1 si è disconnessə (connessione scaduta).
|
||||
@@ -235,15 +237,11 @@ Air=Aria
|
||||
Ignore=Ignora
|
||||
You can't place 'ignore' nodes!=Non puoi piazzare nodi 'ignore'!
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<filtro>] | dump [<filtro>] | save [<formato> [<filtro>]] | reset
|
||||
Handle the profiler and profiling data=Gestisce il profiler e i dati da esso elaborati
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
|
||||
Statistics written to action log.=Statistiche scritte nel registro delle azioni.
|
||||
Statistics were reset.=Le statistiche sono state resettate.
|
||||
Usage: @1=Utilizzo: @1
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=I formati supportati sono txt, csv, lua, json e json_pretty (le strutture potrebbero essere soggetti a cambiamenti).
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=I valori sottostanti mostrano i tempi assoluti/relativi impiegati su ogni singolo step dalla funzione analizzata
|
||||
A total of @1 sample(s) were taken.=Son stati ottenuti campioni per un totale di @1.
|
||||
The output is limited to '@1'.=L'output è limitato a '@1'.
|
||||
Saving of profile failed: @1=Errore nel salvare il profilo: @1
|
||||
Profile saved to @1=Profilo salvato in @1
|
||||
You died=Sei morto
|
||||
Respawn=Rinasci
|
||||
|
||||
@@ -192,7 +192,7 @@ Send a direct message to a player=Menghantar mesej terus kepada seorang pemain
|
||||
Invalid usage, see /help msg.=Kegunaan tidak sah, sila lihat /help msg.
|
||||
The player @1 is not online.=Pemain @1 tidak berada dalam talian.
|
||||
DM from @1: @2=DM daripada @1: @2
|
||||
Message sent.=Mesej telah dihantar.
|
||||
DM sent to @1: @2=
|
||||
Get the last login time of a player or yourself=Dapatkan waktu log masuk terakhir bagi seorang pemain atau diri sendiri
|
||||
@1's last login time was @2.=Waktu log masuk terakhir @1 ialah pada @2.
|
||||
@1's last login time is unknown.=Waktu log masuk terakhir @1 tidak diketahui.
|
||||
@@ -207,6 +207,8 @@ You are already dead.=Anda sudah pun mati.
|
||||
@1 is already dead.=@1 sudah pun mati.
|
||||
@1 has been killed.=@1 telah berjaya dibunuh.
|
||||
Kill player or yourself=Bunuh pemain atau diri sendiri
|
||||
You died=Anda telah meninggal
|
||||
Respawn=Jelma semula
|
||||
@1 joined the game.=@1 telah menyertai permainan.
|
||||
@1 left the game.=@1 telah meninggalkan permainan.
|
||||
@1 left the game (timed out).=@1 telah meninggalkan permainan (tamat tempoh masa).
|
||||
@@ -234,15 +236,11 @@ Air=Udara
|
||||
Ignore=Abai
|
||||
You can't place 'ignore' nodes!=Anda tidak boleh meletakkan nod 'abai'!
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<tapisan>] | dump [<tapisan>] | save [<format> [<tapisan>]] | reset
|
||||
Handle the profiler and profiling data=Uruskan pembukah dan data pembukahan
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
|
||||
Statistics written to action log.=Statistik telah ditulis ke log perlakuan.
|
||||
Statistics were reset.=Statistik telah ditetapkan semula.
|
||||
Usage: @1=Kegunaan: @1
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Format boleh jadi salah satu daripada txt, csv, lua, json, json_pretty (struktur boleh berubah kemudian).
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=Nilai di bawah menunjukkan masa mutlak/relatif yang digunakan oleh fungsi yang dipasangkan pada setiap langkah pelayan
|
||||
A total of @1 sample(s) were taken.=Sebanyak @1 sampel telah diambil secara keseluruhan.
|
||||
The output is limited to '@1'.=Output dihadkan kepada '@1'.
|
||||
Saving of profile failed: @1=Penyimpanan profil telah gagal: @1
|
||||
Profile saved to @1=Profil telah disimpan ke @1
|
||||
You died=Anda telah meninggal
|
||||
Respawn=Jelma semula
|
||||
|
||||
@@ -192,7 +192,7 @@ 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.
|
||||
DM sent to @1: @2=
|
||||
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.
|
||||
@@ -207,6 +207,8 @@ 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
|
||||
You died=Você morreu
|
||||
Respawn=Reviver
|
||||
@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)
|
||||
@@ -234,15 +236,11 @@ 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
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
|
||||
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
|
||||
You died=Você morreu
|
||||
Respawn=Reviver
|
||||
|
||||
@@ -192,7 +192,7 @@ Send a direct message to a player=Отправить прямое сообщен
|
||||
Invalid usage, see /help msg.=Недопустимое использование, см. /help msg.
|
||||
The player @1 is not online.=Игрок @1 не находится в игре.
|
||||
DM from @1: @2=DM от @1: @2
|
||||
Message sent.=Сообщение отправлено.
|
||||
DM sent to @1: @2=
|
||||
Get the last login time of a player or yourself=Вывести время последнего входа игрока или своё
|
||||
@1's last login time was @2.=Время последнего входа @1: @2.
|
||||
@1's last login time is unknown.=Время последнего входа @1 неизвестно.
|
||||
@@ -207,6 +207,8 @@ You are already dead.=Ты уже мертв.
|
||||
@1 is already dead.=@1 уже мертв.
|
||||
@1 has been killed.=@1 был убит.
|
||||
Kill player or yourself=Убить игрока или себя
|
||||
You died=Вы умерли
|
||||
Respawn=Возродиться
|
||||
@1 joined the game.=@1 присоединился к игре.
|
||||
@1 left the game.=@1 вышел из игры.
|
||||
@1 left the game (timed out).=@1 вышел из игры (тайм-аут).
|
||||
@@ -234,15 +236,11 @@ Air=Воздух
|
||||
Ignore=Игнорируемая встроенная нода (":ignore")
|
||||
You can't place 'ignore' nodes!=Вы не можете установить ноду 'ignore'!
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset
|
||||
Handle the profiler and profiling data=Работа с профайлером и данными профилирования
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
|
||||
Statistics written to action log.=Статистика записывается в журнал действий.
|
||||
Statistics were reset.=Статистика была сброшена.
|
||||
Usage: @1=Использование: @1
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Формат может быть одним из txt, csv, lua, json, json_pretty (структуры могут быть изменены).
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=Приведенные ниже значения показывают абсолютное/относительное время, затрачиваемое функцией на каждый шаг сервера.
|
||||
A total of @1 sample(s) were taken.=Всего было взято @1 образец(ов).
|
||||
The output is limited to '@1'.=Вывод ограничен значением '@1'.
|
||||
Saving of profile failed: @1=Не удалось сохранить данные профилирования: @1
|
||||
Profile saved to @1=Данные профилирования сохранены в @1
|
||||
You died=Вы умерли
|
||||
Respawn=Возродиться
|
||||
|
||||
@@ -192,7 +192,7 @@ Send a direct message to a player=
|
||||
Invalid usage, see /help msg.=
|
||||
The player @1 is not online.=
|
||||
DM from @1: @2=
|
||||
Message sent.=
|
||||
DM sent to @1: @2=
|
||||
Get the last login time of a player or yourself=
|
||||
@1's last login time was @2.=
|
||||
@1's last login time is unknown.=
|
||||
@@ -207,6 +207,8 @@ You are already dead.=
|
||||
@1 is already dead.=
|
||||
@1 has been killed.=
|
||||
Kill player or yourself=
|
||||
You died=
|
||||
Respawn=
|
||||
@1 joined the game.=
|
||||
@1 left the game.=
|
||||
@1 left the game (timed out).=
|
||||
@@ -234,11 +236,9 @@ Air=
|
||||
Ignore=
|
||||
You can't place 'ignore' nodes!=
|
||||
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=
|
||||
Handle the profiler and profiling data=
|
||||
Handle the profiler and profiling data. Can output to chat (print), action log (dump), or file in world (save). Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). Filter is a lua pattern used to limit output to matching mod names.=
|
||||
Statistics written to action log.=
|
||||
Statistics were reset.=
|
||||
Usage: @1=
|
||||
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=
|
||||
Values below show absolute/relative times spend per server step by the instrumented function.=
|
||||
A total of @1 sample(s) were taken.=
|
||||
The output is limited to '@1'.=
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"v-rob <robinsonvincent89@gmail.com>",
|
||||
"Desour/DS",
|
||||
"srifqi",
|
||||
"Gregor Parzefall (grorp)",
|
||||
"grorp",
|
||||
"Lars Müller (luatic)",
|
||||
"cx384",
|
||||
"sfence",
|
||||
@@ -47,14 +47,11 @@
|
||||
],
|
||||
"#": "For updating active/previous contributors, see the script in ./util/gather_git_credits.py",
|
||||
"contributors": [
|
||||
"Erich Schubert",
|
||||
"Lucas OH",
|
||||
"Xeno333",
|
||||
"Miguel P.L",
|
||||
"siliconsniffer",
|
||||
"JosiahWI"
|
||||
"Xeno333"
|
||||
],
|
||||
"previous_contributors": [
|
||||
"Wuzzy (Wuzzy2)",
|
||||
"Ælla Chiana Moskopp (erle) <erle@dieweltistgarnichtso.net> [Logo]",
|
||||
"numzero",
|
||||
"red-001 <red-001@outlook.ie>",
|
||||
@@ -66,6 +63,7 @@
|
||||
"Jean-Patrick Guerrero (kilbith)",
|
||||
"MoNTE48",
|
||||
"Constantin Wenger (SpeedProg)",
|
||||
"JosiahWI",
|
||||
"Ciaran Gultnieks (CiaranG)",
|
||||
"ROllerozxa",
|
||||
"Paul Ouellette (pauloue)",
|
||||
|
||||
@@ -165,11 +165,15 @@ local function get_formspec(tabview, name, tabdata)
|
||||
|
||||
local retval = ""
|
||||
|
||||
local index = filterlist.get_current_index(menudata.worldlist,
|
||||
tonumber(core.settings:get("mainmenu_last_selected_world")))
|
||||
local index = core.get_textlist_index("sp_worlds") or filterlist.get_current_index(menudata.worldlist,
|
||||
tonumber(core.settings:get("mainmenu_last_selected_world"))) or 0
|
||||
|
||||
local list = menudata.worldlist:get_list()
|
||||
local world = list and index and list[index]
|
||||
-- When changing tabs to a world list with fewer entries, the last index is selected (visually).
|
||||
-- However, the formspec fields lag behind, thus 'index > #list' can be a valid choice.
|
||||
local world = list and list[math.min(index, #list)]
|
||||
local game
|
||||
|
||||
if world then
|
||||
game = pkgmgr.find_by_gameid(world.gameid)
|
||||
else
|
||||
@@ -183,27 +187,33 @@ local function get_formspec(tabview, name, tabdata)
|
||||
local y = 0.2
|
||||
local yo = 0.5625
|
||||
|
||||
if disabled_settings["creative_mode"] == nil then
|
||||
creative = "checkbox[0,"..y..";cb_creative_mode;".. fgettext("Creative Mode") .. ";" ..
|
||||
dump(core.settings:get_bool("creative_mode")) .. "]"
|
||||
y = y + yo
|
||||
end
|
||||
if disabled_settings["enable_damage"] == nil then
|
||||
damage = "checkbox[0,"..y..";cb_enable_damage;".. fgettext("Enable Damage") .. ";" ..
|
||||
dump(core.settings:get_bool("enable_damage")) .. "]"
|
||||
y = y + yo
|
||||
end
|
||||
if disabled_settings["enable_server"] == nil then
|
||||
host = "checkbox[0,"..y..";cb_server;".. fgettext("Host Server") ..";" ..
|
||||
dump(core.settings:get_bool("enable_server")) .. "]"
|
||||
y = y + yo
|
||||
if world then
|
||||
if disabled_settings["creative_mode"] == nil then
|
||||
creative = "checkbox[0,"..y..";cb_creative_mode;".. fgettext("Creative Mode") .. ";" ..
|
||||
dump(core.settings:get_bool("creative_mode")) .. "]"
|
||||
y = y + yo
|
||||
end
|
||||
if disabled_settings["enable_damage"] == nil then
|
||||
damage = "checkbox[0,"..y..";cb_enable_damage;".. fgettext("Enable Damage") .. ";" ..
|
||||
dump(core.settings:get_bool("enable_damage")) .. "]"
|
||||
y = y + yo
|
||||
end
|
||||
if disabled_settings["enable_server"] == nil then
|
||||
host = "checkbox[0,"..y..";cb_server;".. fgettext("Host Server") ..";" ..
|
||||
dump(core.settings:get_bool("enable_server")) .. "]"
|
||||
y = y + yo
|
||||
end
|
||||
end
|
||||
|
||||
retval = retval ..
|
||||
"container[5.25,4.875]" ..
|
||||
"button[0,0;3.225,0.8;world_delete;".. fgettext("Delete") .. "]" ..
|
||||
"button[3.325,0;3.225,0.8;world_configure;".. fgettext("Select Mods") .. "]" ..
|
||||
"button[6.65,0;3.225,0.8;world_create;".. fgettext("New") .. "]" ..
|
||||
"button[6.65,0;3.225,0.8;world_create;".. fgettext("New") .. "]"
|
||||
if world then
|
||||
retval = retval ..
|
||||
"button[0,0;3.225,0.8;world_delete;".. fgettext("Delete") .. "]" ..
|
||||
"button[3.325,0;3.225,0.8;world_configure;".. fgettext("Select Mods") .. "]"
|
||||
end
|
||||
retval = retval ..
|
||||
"container_end[]" ..
|
||||
"container[0.375,0.375]" ..
|
||||
creative ..
|
||||
@@ -251,7 +261,7 @@ local function get_formspec(tabview, name, tabdata)
|
||||
end
|
||||
|
||||
retval = retval .. "container_end[]"
|
||||
else
|
||||
elseif world then
|
||||
retval = retval ..
|
||||
"button[10.1875,5.925;4.9375,0.8;play;" .. fgettext("Play Game") .. "]"
|
||||
end
|
||||
@@ -348,8 +358,6 @@ local function main_button_handler(this, fields, name, tabdata)
|
||||
gamedata.selected_world = menudata.worldlist:get_raw_index(selected)
|
||||
|
||||
if selected == nil or gamedata.selected_world == 0 then
|
||||
gamedata.errormessage =
|
||||
fgettext_ne("No world created or selected!")
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
@@ -4,18 +4,10 @@
|
||||
|
||||
local S = core.get_translator("__builtin")
|
||||
|
||||
local function get_bool_default(name, default)
|
||||
local val = core.settings:get_bool(name)
|
||||
if val == nil then
|
||||
return default
|
||||
end
|
||||
return val
|
||||
end
|
||||
|
||||
local profiler_path = core.get_builtin_path().."profiler"..DIR_DELIM
|
||||
local profiler = {}
|
||||
local sampler = assert(loadfile(profiler_path .. "sampling.lua"))(profiler)
|
||||
local instrumentation = assert(loadfile(profiler_path .. "instrumentation.lua"))(profiler, sampler, get_bool_default)
|
||||
local instrumentation = assert(loadfile(profiler_path .. "instrumentation.lua"))(profiler, sampler)
|
||||
local reporter = dofile(profiler_path .. "reporter.lua")
|
||||
profiler.instrument = instrumentation.instrument
|
||||
|
||||
@@ -24,14 +16,17 @@ profiler.instrument = instrumentation.instrument
|
||||
-- Is called later, after `core.register_chatcommand` was set up.
|
||||
--
|
||||
function profiler.init_chatcommand()
|
||||
local instrument_profiler = get_bool_default("instrument.profiler", false)
|
||||
local instrument_profiler = core.settings:get_bool("instrument.profiler", false)
|
||||
if instrument_profiler then
|
||||
instrumentation.init_chatcommand()
|
||||
end
|
||||
|
||||
local param_usage = S("print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset")
|
||||
core.register_chatcommand("profiler", {
|
||||
description = S("Handle the profiler and profiling data"),
|
||||
description = S("Handle the profiler and profiling data. "
|
||||
.. "Can output to chat (print), action log (dump), or file in world (save). "
|
||||
.. "Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change). "
|
||||
.. "Filter is a lua pattern used to limit output to matching mod names."),
|
||||
params = param_usage,
|
||||
privs = { server=true },
|
||||
func = function(name, param)
|
||||
@@ -39,10 +34,10 @@ function profiler.init_chatcommand()
|
||||
local args = arg0 and string.split(arg0, " ")
|
||||
|
||||
if command == "dump" then
|
||||
core.log("action", reporter.print(sampler.profile, arg0))
|
||||
core.log("action", reporter.print(sampler.profile, arg0, false))
|
||||
return true, S("Statistics written to action log.")
|
||||
elseif command == "print" then
|
||||
return true, reporter.print(sampler.profile, arg0)
|
||||
return true, reporter.print(sampler.profile, arg0, true)
|
||||
elseif command == "save" then
|
||||
return reporter.save(sampler.profile, args[1] or "txt", args[2])
|
||||
elseif command == "reset" then
|
||||
@@ -50,9 +45,7 @@ function profiler.init_chatcommand()
|
||||
return true, S("Statistics were reset.")
|
||||
end
|
||||
|
||||
return false,
|
||||
S("Usage: @1", param_usage) .. "\n" ..
|
||||
S("Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).")
|
||||
return false
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
@@ -2,35 +2,58 @@
|
||||
-- Copyright (C) 2016 T4im
|
||||
-- SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
local format, pairs, type = string.format, pairs, type
|
||||
local format, ipairs, type = string.format, ipairs, type
|
||||
local core, get_current_modname = core, core.get_current_modname
|
||||
local profiler, sampler, get_bool_default = ...
|
||||
local profiler, sampler = ...
|
||||
local debug_getinfo = debug.getinfo
|
||||
|
||||
local instrument_builtin = get_bool_default("instrument.builtin", false)
|
||||
local instrument_builtin = core.settings:get_bool("instrument.builtin", false)
|
||||
|
||||
local do_measure = core.settings:get_bool("profiler.measure", true)
|
||||
local do_tracy = core.settings:get_bool("profiler.tracy", false)
|
||||
if do_tracy and not core.global_exists("tracy") then
|
||||
core.log("warning", "profiler.tracy is enabled, but `tracy` was not found. Did you build with Tracy?")
|
||||
do_tracy = false
|
||||
end
|
||||
|
||||
-- keep in sync with game/register.lua
|
||||
local register_functions = {
|
||||
register_globalstep = 0,
|
||||
register_playerevent = 0,
|
||||
register_on_placenode = 0,
|
||||
register_on_dignode = 0,
|
||||
register_on_punchnode = 0,
|
||||
register_on_generated = 0,
|
||||
register_on_newplayer = 0,
|
||||
register_on_dieplayer = 0,
|
||||
register_on_respawnplayer = 0,
|
||||
register_on_prejoinplayer = 0,
|
||||
register_on_joinplayer = 0,
|
||||
register_on_leaveplayer = 0,
|
||||
register_on_cheat = 0,
|
||||
register_on_chat_message = 0,
|
||||
register_on_player_receive_fields = 0,
|
||||
register_on_craft = 0,
|
||||
register_craft_predict = 0,
|
||||
register_on_protection_violation = 0,
|
||||
register_on_item_eat = 0,
|
||||
register_on_punchplayer = 0,
|
||||
register_on_player_hpchange = 0,
|
||||
register_on_mapblocks_changed = 0,
|
||||
"register_on_player_hpchange",
|
||||
|
||||
"register_on_chat_message",
|
||||
"register_on_chatcommand",
|
||||
"register_globalstep",
|
||||
"register_playerevent",
|
||||
"register_on_mods_loaded",
|
||||
"register_on_shutdown",
|
||||
"register_on_punchnode",
|
||||
"register_on_placenode",
|
||||
"register_on_dignode",
|
||||
"register_on_generated",
|
||||
"register_on_newplayer",
|
||||
"register_on_dieplayer",
|
||||
"register_on_respawnplayer",
|
||||
"register_on_prejoinplayer",
|
||||
"register_on_joinplayer",
|
||||
"register_on_leaveplayer",
|
||||
"register_on_player_receive_fields",
|
||||
"register_on_cheat",
|
||||
"register_on_craft",
|
||||
"register_craft_predict",
|
||||
"register_on_protection_violation",
|
||||
"register_on_item_eat",
|
||||
"register_on_item_pickup",
|
||||
"register_on_punchplayer",
|
||||
"register_on_priv_grant",
|
||||
"register_on_priv_revoke",
|
||||
"register_on_authplayer",
|
||||
"register_can_bypass_userlimit",
|
||||
"register_on_modchannel_message",
|
||||
"register_on_player_inventory_action",
|
||||
"register_allow_player_inventory_action",
|
||||
"register_on_rightclickplayer",
|
||||
"register_on_liquid_transformed",
|
||||
"register_on_mapblocks_changed",
|
||||
}
|
||||
|
||||
local function regex_escape(s)
|
||||
@@ -38,28 +61,14 @@ local function regex_escape(s)
|
||||
end
|
||||
|
||||
---
|
||||
-- Create an unique instrument name.
|
||||
-- Generate a missing label with a running index number.
|
||||
-- Format `filepath#linenumber` of function, with a relative filepath.
|
||||
--
|
||||
local counts = {}
|
||||
-- FIXME: these paths are not canonicalized (i.e. can be .../luanti/bin/..)
|
||||
local worldmods_path = regex_escape(core.get_worldpath())
|
||||
local user_path = regex_escape(core.get_user_path())
|
||||
local builtin_path = regex_escape(core.get_builtin_path())
|
||||
local function generate_name(def)
|
||||
local class, label, func_name = def.class, def.label, def.func_name
|
||||
if label then
|
||||
if class or func_name then
|
||||
return format("%s '%s' %s", class or "", label, func_name or ""):trim()
|
||||
end
|
||||
return format("%s", label):trim()
|
||||
elseif label == false then
|
||||
return format("%s", class or func_name):trim()
|
||||
end
|
||||
|
||||
local index_id = def.mod .. (class or func_name)
|
||||
local index = counts[index_id] or 1
|
||||
counts[index_id] = index + 1
|
||||
local info = debug.getinfo(def.func)
|
||||
local function generate_source_location(def)
|
||||
local info = debug_getinfo(def.func)
|
||||
local modpath = regex_escape(core.get_modpath(def.mod) or "")
|
||||
local source = info.source
|
||||
if modpath ~= "" then
|
||||
@@ -68,7 +77,32 @@ local function generate_name(def)
|
||||
source = source:gsub(worldmods_path, "")
|
||||
source = source:gsub(builtin_path, "builtin" .. DIR_DELIM)
|
||||
source = source:gsub(user_path, "")
|
||||
return format("%s[%d] %s#%s", class or func_name, index, source, info.linedefined)
|
||||
return string.format("%s#%s", source, info.linedefined)
|
||||
end
|
||||
|
||||
---
|
||||
-- Create an unique instrument name.
|
||||
-- Generate a missing label with a running index number.
|
||||
-- Returns name, name_has_source.
|
||||
--
|
||||
local generate_name_counts = {}
|
||||
local function generate_name(def)
|
||||
local class, label, func_name = def.class, def.label, def.func_name
|
||||
local source = generate_source_location(def)
|
||||
|
||||
if label then
|
||||
if class or func_name then
|
||||
return format("%s '%s' %s", class or "", label, func_name or ""):trim(), false
|
||||
end
|
||||
return format("%s", label):trim(), false
|
||||
elseif label == false then
|
||||
return format("%s", class or func_name):trim(), false
|
||||
else
|
||||
local index_id = def.mod .. (class or func_name)
|
||||
local index = generate_name_counts[index_id] or 1
|
||||
generate_name_counts[index_id] = index + 1
|
||||
return format("%s[%d] %s", class or func_name, index, source), true
|
||||
end
|
||||
end
|
||||
|
||||
---
|
||||
@@ -80,6 +114,10 @@ local function measure(modname, instrument_name, start, ...)
|
||||
log(modname, instrument_name, time() - start)
|
||||
return ...
|
||||
end
|
||||
local function tracy_ZoneEnd_and_return(...)
|
||||
tracy.ZoneEnd()
|
||||
return ...
|
||||
end
|
||||
--- Automatically instrument a function to measure and log to the sampler.
|
||||
-- def = {
|
||||
-- mod = "",
|
||||
@@ -94,22 +132,38 @@ local function instrument(def)
|
||||
end
|
||||
def.mod = def.mod or get_current_modname() or "??"
|
||||
local modname = def.mod
|
||||
local instrument_name = generate_name(def)
|
||||
local instrument_name, name_has_source = generate_name(def)
|
||||
local instrument_name_with_source = name_has_source and instrument_name or
|
||||
string.format("%s %s", instrument_name, generate_source_location(def))
|
||||
local func = def.func
|
||||
|
||||
if not instrument_builtin and modname == "*builtin*" then
|
||||
return func
|
||||
end
|
||||
|
||||
return function(...)
|
||||
-- This tail-call allows passing all return values of `func`
|
||||
-- also called https://en.wikipedia.org/wiki/Continuation_passing_style
|
||||
-- Compared to table creation and unpacking it won't lose `nil` returns
|
||||
-- and is expected to be faster
|
||||
-- `measure` will be executed after func(...)
|
||||
local start = time()
|
||||
return measure(modname, instrument_name, start, func(...))
|
||||
-- These tail-calls allows passing all return values of `func_o`
|
||||
-- also called https://en.wikipedia.org/wiki/Continuation_passing_style
|
||||
-- Compared to table creation and unpacking it won't lose `nil` returns
|
||||
-- and is expected to be faster
|
||||
-- `tracy_ZoneEnd_and_return` / `measure` will be executed after `func_o(...)`
|
||||
|
||||
if do_tracy then
|
||||
local func_o = func
|
||||
func = function(...)
|
||||
tracy.ZoneBeginN(instrument_name_with_source)
|
||||
return tracy_ZoneEnd_and_return(func_o(...))
|
||||
end
|
||||
end
|
||||
|
||||
if do_measure then
|
||||
local func_o = func
|
||||
func = function(...)
|
||||
local start = time()
|
||||
return measure(modname, instrument_name, start, func_o(...))
|
||||
end
|
||||
end
|
||||
|
||||
return func
|
||||
end
|
||||
|
||||
local function can_be_called(func)
|
||||
@@ -135,7 +189,6 @@ local function instrument_register(func, func_name)
|
||||
local register_name = func_name:gsub("^register_", "", 1)
|
||||
return function(callback, ...)
|
||||
assert_can_be_called(callback, func_name, 2)
|
||||
register_functions[func_name] = register_functions[func_name] + 1
|
||||
return func(instrument {
|
||||
func = callback,
|
||||
func_name = register_name
|
||||
@@ -144,7 +197,7 @@ local function instrument_register(func, func_name)
|
||||
end
|
||||
|
||||
local function init_chatcommand()
|
||||
if get_bool_default("instrument.chatcommand", true) then
|
||||
if core.settings:get_bool("instrument.chatcommand", true) then
|
||||
local orig_register_chatcommand = core.register_chatcommand
|
||||
core.register_chatcommand = function(cmd, def)
|
||||
def.func = instrument {
|
||||
@@ -160,7 +213,7 @@ end
|
||||
-- Start instrumenting selected functions
|
||||
--
|
||||
local function init()
|
||||
if get_bool_default("instrument.entity", true) then
|
||||
if core.settings:get_bool("instrument.entity", true) then
|
||||
-- Explicitly declare entity api-methods.
|
||||
-- Simple iteration would ignore lookup via __index.
|
||||
local entity_instrumentation = {
|
||||
@@ -168,26 +221,30 @@ local function init()
|
||||
"on_deactivate",
|
||||
"on_step",
|
||||
"on_punch",
|
||||
"on_death",
|
||||
"on_rightclick",
|
||||
"on_attach_child",
|
||||
"on_detach_child",
|
||||
"on_detach",
|
||||
"get_staticdata",
|
||||
}
|
||||
-- Wrap register_entity() to instrument them on registration.
|
||||
local orig_register_entity = core.register_entity
|
||||
core.register_entity = function(name, prototype)
|
||||
core.register_entity = function(name, def)
|
||||
local modname = get_current_modname()
|
||||
for _, func_name in pairs(entity_instrumentation) do
|
||||
prototype[func_name] = instrument {
|
||||
func = prototype[func_name],
|
||||
for _, func_name in ipairs(entity_instrumentation) do
|
||||
def[func_name] = instrument {
|
||||
func = def[func_name],
|
||||
mod = modname,
|
||||
func_name = func_name,
|
||||
label = prototype.label,
|
||||
label = name,
|
||||
}
|
||||
end
|
||||
orig_register_entity(name,prototype)
|
||||
orig_register_entity(name, def)
|
||||
end
|
||||
end
|
||||
|
||||
if get_bool_default("instrument.abm", true) then
|
||||
if core.settings:get_bool("instrument.abm", true) then
|
||||
-- Wrap register_abm() to automatically instrument abms.
|
||||
local orig_register_abm = core.register_abm
|
||||
core.register_abm = function(spec)
|
||||
@@ -200,7 +257,7 @@ local function init()
|
||||
end
|
||||
end
|
||||
|
||||
if get_bool_default("instrument.lbm", true) then
|
||||
if core.settings:get_bool("instrument.lbm", true) then
|
||||
-- Wrap register_lbm() to automatically instrument lbms.
|
||||
local orig_register_lbm = core.register_lbm
|
||||
core.register_lbm = function(spec)
|
||||
@@ -214,13 +271,13 @@ local function init()
|
||||
end
|
||||
end
|
||||
|
||||
if get_bool_default("instrument.global_callback", true) then
|
||||
for func_name, _ in pairs(register_functions) do
|
||||
if core.settings:get_bool("instrument.global_callback", true) then
|
||||
for _, func_name in ipairs(register_functions) do
|
||||
core[func_name] = instrument_register(core[func_name], func_name)
|
||||
end
|
||||
end
|
||||
|
||||
if get_bool_default("instrument.profiler", false) then
|
||||
if core.settings:get_bool("instrument.profiler", false) then
|
||||
-- Measure overhead of instrumentation, but keep it down for functions
|
||||
-- So keep the `return` for better optimization.
|
||||
profiler.empty_instrument = instrument {
|
||||
@@ -233,7 +290,6 @@ local function init()
|
||||
end
|
||||
|
||||
return {
|
||||
register_functions = register_functions,
|
||||
instrument = instrument,
|
||||
init = init,
|
||||
init_chatcommand = init_chatcommand,
|
||||
|
||||
@@ -168,7 +168,7 @@ local CsvFormatter = Formatter:new {
|
||||
end
|
||||
}
|
||||
|
||||
local function format_statistics(profile, format, filter)
|
||||
local function format_statistics(profile, format, filter, enable_translation)
|
||||
local formatter
|
||||
if format == "csv" then
|
||||
formatter = CsvFormatter:new {
|
||||
@@ -180,16 +180,20 @@ local function format_statistics(profile, format, filter)
|
||||
}
|
||||
end
|
||||
formatter:format(filter)
|
||||
return formatter:flush()
|
||||
local out = formatter:flush()
|
||||
if not enable_translation then
|
||||
out = core.strip_escapes(out)
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
||||
---
|
||||
-- Format the profile ready for display and
|
||||
-- @return string to be printed to the console
|
||||
--
|
||||
function reporter.print(profile, filter)
|
||||
function reporter.print(profile, filter, enable_translation)
|
||||
if filter == "" then filter = nil end
|
||||
return format_statistics(profile, "txt", filter)
|
||||
return format_statistics(profile, "txt", filter, enable_translation)
|
||||
end
|
||||
|
||||
---
|
||||
@@ -215,7 +219,7 @@ local function serialize_profile(profile, format, filter)
|
||||
end
|
||||
end
|
||||
-- Fall back to textual formats.
|
||||
return format_statistics(profile, format, filter)
|
||||
return format_statistics(profile, format, filter, false)
|
||||
end
|
||||
|
||||
local worldpath = core.get_worldpath()
|
||||
|
||||
@@ -474,13 +474,12 @@ undersampling (Undersampling) int 1 1 8
|
||||
|
||||
# 3D support.
|
||||
# Currently supported:
|
||||
# - none: no 3d output.
|
||||
# - anaglyph: cyan/magenta color 3d.
|
||||
# - interlaced: odd/even line based polarization screen support.
|
||||
# - topbottom: split screen top/bottom.
|
||||
# - sidebyside: split screen side by side.
|
||||
# - crossview: Cross-eyed 3d
|
||||
3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside,crossview
|
||||
# - none: no 3D output
|
||||
# - anaglyph: cyan/magenta color 3D
|
||||
# - topbottom: split screen top/bottom
|
||||
# - sidebyside: split screen side-by-side
|
||||
# - crossview: cross-eyed 3D
|
||||
3d_mode (3D mode) enum none none,anaglyph,topbottom,sidebyside,crossview
|
||||
|
||||
# Strength of 3D mode parallax.
|
||||
3d_paralax_strength (3D mode parallax strength) float 0.025 -0.087 0.087
|
||||
@@ -1944,6 +1943,14 @@ enable_mod_channels (Mod channels) [server] bool false
|
||||
# Useful for mod developers and server operators.
|
||||
profiler.load (Load the game profiler) bool false
|
||||
|
||||
# Disable if you only want to instrument with Tracy.
|
||||
profiler.measure (Measure time samples) bool true
|
||||
|
||||
# Capture Tracy zones with the profiler's instrumentation.
|
||||
# You need to build with Tracy to use this, see doc/developing/profiling.md
|
||||
# for details.
|
||||
profiler.tracy (Capture Tracy zones) bool false
|
||||
|
||||
# The default format in which profiles are being saved,
|
||||
# when calling `/profiler save [format]` without format.
|
||||
profiler.default_report_format (Default report format) enum txt txt,csv,lua,json,json_pretty
|
||||
|
||||
@@ -77,30 +77,28 @@ some shader settings cannot be used on OpenGL ES.
|
||||
Changing the graphic driver setting to OpenGL will not work.
|
||||
|
||||
## Building Requirements
|
||||
In order to build, your PC has to be set up to build Luanti in the usual
|
||||
manner (see the regular Luanti documentation for how to get this done).
|
||||
In addition to what is required for Luanti in general, you will need the
|
||||
following software packages. The version number in parenthesis denotes the
|
||||
version that was tested at the time this README was drafted; newer/older
|
||||
versions may or may not work.
|
||||
|
||||
* Android SDK 29
|
||||
* Android NDK r21
|
||||
* Android Studio 3 [optional]
|
||||
In order to build, you will need the following development tools:
|
||||
|
||||
* Java JDK
|
||||
* Android SDK
|
||||
* `gettext` command line tools
|
||||
* Android Studio [optional]
|
||||
|
||||
Additionally, you'll need to have an Internet connection available on the
|
||||
build system, as the Android build will download some source packages.
|
||||
|
||||
## Build
|
||||
|
||||
The new build system Luanti Android is fully functional and is designed to
|
||||
speed up and simplify the work, as well as adding the possibility of
|
||||
cross-platform build.
|
||||
You can use `./gradlew assemblerelease` or `./gradlew assembledebug` from the
|
||||
You can use `./gradlew assembleRelease` or `./gradlew assembleDebug` from the
|
||||
command line or use Android Studio and click the build button.
|
||||
|
||||
When using gradlew, the newest NDK will be downloaded and installed
|
||||
automatically. Or you can create a `local.properties` file and specify
|
||||
`sdk.dir` and `ndk.dir` yourself.
|
||||
automatically. You have to create a `local.properties` file and specify
|
||||
`sdk.dir` yourself if you want to use an existing installation.
|
||||
|
||||
* In order to make a release build you'll have to have a keystore setup to sign
|
||||
the resulting apk package. How this is done is not part of this README. There
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Luanti Lua Client Modding API Reference 5.13.0
|
||||
Luanti Lua Client Modding API Reference 5.14.0
|
||||
==============================================
|
||||
|
||||
**WARNING**: if you're looking for the `minetest` namespace (e.g. `minetest.something`),
|
||||
|
||||
@@ -14,10 +14,10 @@ It is highly recommended to use vcpkg as package manager.
|
||||
|
||||
After you successfully built vcpkg you can easily install the required libraries:
|
||||
```powershell
|
||||
vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp gettext[tools] sdl2 --triplet x64-windows
|
||||
vcpkg install zlib zstd curl[ssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp gettext[tools] sdl2 --triplet x64-windows
|
||||
```
|
||||
|
||||
- `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store.
|
||||
- `curl` is optional, but required to read the serverlist, `curl[ssl]` is required to use the content store.
|
||||
- `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound.
|
||||
- `luajit` is optional, it replaces the integrated Lua interpreter with a faster just-in-time interpreter.
|
||||
- `gmp` and `jsoncpp` are optional, otherwise the bundled versions will be compiled
|
||||
|
||||
@@ -15,7 +15,7 @@ Notable pages:
|
||||
|
||||
## In this folder
|
||||
|
||||
- [docker.md](docker.md): Developing minetestserver with Docker
|
||||
- [docker.md](docker.md): Developing luantiserver with Docker
|
||||
- [android.md](android.md): Android tips & tricks
|
||||
- [os-compatibility.md](os-compatibility.md): OS/library compatibility policy
|
||||
- [profiling.md](profiling.md): Profiling instructions
|
||||
|
||||
@@ -26,7 +26,7 @@ adb install -r -d ./app-arm64-v8a-release-unsigned.apk
|
||||
In case debug.txt isn't enough (e.g. when debugging a crash), you can get debug
|
||||
output using logcat:
|
||||
|
||||
`adb logcat -s 'Minetest:*' '*:F'`
|
||||
`adb logcat -s Luanti '*:F'`
|
||||
|
||||
Note that you can do this even *after* the app has crashed,
|
||||
since Android keeps an internal buffer.
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# Profiling
|
||||
|
||||
## Using builtin's mod profiler
|
||||
|
||||
Builtin has a profiler for callbacks registered by mods. It measures how much
|
||||
time each callback took per server-step (on average / min / max).
|
||||
|
||||
To start, enable the `profiler.load` setting.
|
||||
(There are more settings, see `profiler.*` and `instrument.*`.)
|
||||
|
||||
Use the `profiler` chatcommand to look at the results.
|
||||
|
||||
|
||||
## Profiling Luanti on Linux with perf
|
||||
|
||||
We will be using a tool called "perf", which you can get by installing `perf` or `linux-perf` or `linux-tools-common`.
|
||||
@@ -22,12 +33,12 @@ It will give you flamegraphs, per-thread, per-function views and much more.
|
||||
|
||||
Attach perf to your running server, press *^C* to stop:
|
||||
```bash
|
||||
perf record -z --call-graph dwarf -F 400 -p "$(pidof minetestserver)"
|
||||
perf record -z --call-graph dwarf -F 400 -p "$(pidof luantiserver)"
|
||||
```
|
||||
|
||||
Collect a copy of the required libraries/executables:
|
||||
```bash
|
||||
perf buildid-list | grep -Eo '/[^ ]+(minetestserver|\.so)[^ ]*$' | \
|
||||
perf buildid-list | grep -Eo '/[^ ]+(luantiserver|\.so)[^ ]*$' | \
|
||||
tar -cvahf debug.tgz --files-from=- --ignore-failed-read
|
||||
```
|
||||
|
||||
@@ -65,13 +76,16 @@ Build Luanti with `-DDBUILD_WITH_TRACY=1`, this will fetch Tracy for building
|
||||
the Tracy client. And use `FETCH_TRACY_GIT_TAG` to get a version matching your
|
||||
Tracy server, e.g. `-DFETCH_TRACY_GIT_TAG=v0.11.0` if it's `0.11.0`.
|
||||
|
||||
To actually use Tracy, you also have to enable it with Tracy's build options:
|
||||
```
|
||||
-DTRACY_ENABLE=1 -DTRACY_ONLY_LOCALHOST=1
|
||||
```
|
||||
To actually use Tracy, you also have to enable it with Tracy's build options
|
||||
(`-DTRACY_ENABLE=1`).
|
||||
|
||||
See Tracy's documentation for more build options.
|
||||
|
||||
TL;DR:
|
||||
```
|
||||
-DDBUILD_WITH_TRACY=1 -DFETCH_TRACY_GIT_TAG=<your_version> -DTRACY_ENABLE=1 -DTRACY_ONLY_LOCALHOST=1
|
||||
```
|
||||
|
||||
### Using in C++
|
||||
|
||||
Start the Tracy server and Luanti. You should see Luanti in the menu.
|
||||
@@ -87,3 +101,6 @@ See Tracy's official documentation for more information.
|
||||
|
||||
Note: The whole Tracy Lua API is accessible to all mods. And we don't check if it
|
||||
is or becomes insecure. Run untrusted mods at your own risk.
|
||||
|
||||
Enable `profiler.load` and `profiler.tracy` to automatically instrument mod
|
||||
callback functions.
|
||||
|
||||
165
doc/lua_api.md
165
doc/lua_api.md
@@ -177,8 +177,6 @@ The file is a key-value store of modpack details.
|
||||
* `textdomain`: Textdomain used to translate title and description. Defaults to modpack name.
|
||||
See [Translating content meta](#translating-content-meta).
|
||||
|
||||
Note: to support 0.4.x, please also create an empty modpack.txt file.
|
||||
|
||||
Mod directory structure
|
||||
-----------------------
|
||||
|
||||
@@ -3614,6 +3612,8 @@ Some types may inherit styles from parent types.
|
||||
* animated_image
|
||||
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
|
||||
* box
|
||||
* **Note**: In order for any of the styling options to take effect,
|
||||
the `color` field in the box element must be left unspecified.
|
||||
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
|
||||
* Defaults to false in formspec_version version 3 or higher
|
||||
* **Note**: `colors`, `bordercolors`, and `borderwidths` accept multiple input types:
|
||||
@@ -3920,10 +3920,8 @@ The following functions provide escape sequences:
|
||||
* `color` is a ColorString
|
||||
* The escape sequence sets the text color to `color`
|
||||
* `core.colorize(color, message)`:
|
||||
* Equivalent to:
|
||||
`core.get_color_escape_sequence(color) ..
|
||||
message ..
|
||||
core.get_color_escape_sequence("#ffffff")`
|
||||
* Equivalent to including the right color escape sequence in the front,
|
||||
and resetting to `#fff` after the text (plus newline handling).
|
||||
* `core.get_background_escape_sequence(color)`
|
||||
* `color` is a ColorString
|
||||
* The escape sequence sets the background of the whole text element to
|
||||
@@ -3934,6 +3932,10 @@ The following functions provide escape sequences:
|
||||
* Removes background colors added by `get_background_escape_sequence`.
|
||||
* `core.strip_colors(str)`
|
||||
* Removes all color escape sequences.
|
||||
* `core.strip_escapes(str)`
|
||||
* Removes all escape sequences, including client-side translations and
|
||||
any unknown or future escape sequences that Luanti might define.
|
||||
* You can use this to clean text before logging or handing to an external system.
|
||||
|
||||
|
||||
Coordinate System
|
||||
@@ -5841,6 +5843,12 @@ Utilities
|
||||
httpfetch_additional_methods = true,
|
||||
-- objects have get_guid method (5.13.0)
|
||||
object_guids = true,
|
||||
-- The NodeTimer `on_timer` callback is passed additional `node` and `timeout` args (5.14.0)
|
||||
on_timer_four_args = true,
|
||||
-- `ParticleSpawner` definition supports `exclude_player` field (5.14.0)
|
||||
particlespawner_exclude_player = true,
|
||||
-- core.generate_decorations() supports `use_mapgen_biomes` parameter (5.14.0)
|
||||
generate_decorations_biomes = true,
|
||||
}
|
||||
```
|
||||
|
||||
@@ -5848,6 +5856,7 @@ Utilities
|
||||
* checks for *server-side* feature availability
|
||||
* `arg`: string or table in format `{foo=true, bar=true}`
|
||||
* `missing_features`: `{foo=true, bar=true}`
|
||||
|
||||
* `core.get_player_information(player_name)`: Table containing information
|
||||
about a player. Example return value:
|
||||
|
||||
@@ -6148,34 +6157,34 @@ Call these functions only at load time!
|
||||
* Called every server step, usually interval of 0.1s.
|
||||
* `dtime` is the time since last execution in seconds.
|
||||
* `core.register_on_mods_loaded(function())`
|
||||
* Called after mods have finished loading and before the media is cached or the
|
||||
aliases handled.
|
||||
* Called after all mods have finished loading and before the media is cached
|
||||
or aliases are handled.
|
||||
* `core.register_on_shutdown(function())`
|
||||
* Called before server shutdown
|
||||
* Players that were kicked by the shutdown procedure are still fully accessible
|
||||
in `core.get_connected_players()`.
|
||||
* Called during server shutdown before players are kicked.
|
||||
* **Warning**: If the server terminates abnormally (i.e. crashes), the
|
||||
registered callbacks **will likely not be run**. Data should be saved at
|
||||
registered callbacks will likely **not run**. Data should be saved at
|
||||
semi-frequent intervals as well as on server shutdown.
|
||||
* `core.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing))`
|
||||
* Called when a node has been placed
|
||||
* If return `true` no item is taken from `itemstack`
|
||||
* Called after a node has been placed.
|
||||
* If `true` is returned no item is taken from `itemstack`
|
||||
* `placer` may be any valid ObjectRef or nil.
|
||||
* **Not recommended**; use `on_construct` or `after_place_node` in node
|
||||
definition whenever possible.
|
||||
* `core.register_on_dignode(function(pos, oldnode, digger))`
|
||||
* Called when a node has been dug.
|
||||
* Called after a node has been dug.
|
||||
* **Not recommended**; Use `on_destruct` or `after_dig_node` in node
|
||||
definition whenever possible.
|
||||
* `core.register_on_punchnode(function(pos, node, puncher, pointed_thing))`
|
||||
* Called when a node is punched
|
||||
* `core.register_on_generated(function(minp, maxp, blockseed))`
|
||||
* Called after generating a piece of world between `minp` and `maxp`.
|
||||
* Called after a piece of world between `minp` and `maxp` has been
|
||||
generated and written into the map.
|
||||
* **Avoid using this** whenever possible. As with other callbacks this blocks
|
||||
the main thread and introduces noticeable latency.
|
||||
Consider [Mapgen environment](#mapgen-environment) for an alternative.
|
||||
* `core.register_on_newplayer(function(ObjectRef))`
|
||||
the main thread and is prone to introduce noticeable latency/lag.
|
||||
Consider [Mapgen environment](#mapgen-environment) as an alternative.
|
||||
* `core.register_on_newplayer(function(player))`
|
||||
* Called when a new player enters the world for the first time
|
||||
* `player`: ObjectRef
|
||||
* `core.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage))`
|
||||
* Called when a player is punched
|
||||
* Note: This callback is invoked even if the punched player is dead.
|
||||
@@ -6732,10 +6741,14 @@ Environment access
|
||||
* Generate all registered ores within the VoxelManip `vm` and in the area
|
||||
from `pos1` to `pos2`.
|
||||
* `pos1` and `pos2` are optional and default to mapchunk minp and maxp.
|
||||
* `core.generate_decorations(vm[, pos1, pos2])`
|
||||
* `core.generate_decorations(vm[, pos1, pos2, [use_mapgen_biomes]])`
|
||||
* Generate all registered decorations within the VoxelManip `vm` and in the
|
||||
area from `pos1` to `pos2`.
|
||||
* `pos1` and `pos2` are optional and default to mapchunk minp and maxp.
|
||||
* `use_mapgen_biomes` (optional boolean). For use in on_generated callbacks only.
|
||||
If set to true, decorations are placed in respect to the biome map of the current chunk.
|
||||
`pos1` and `pos2` must match the positions of the current chunk, or an error will be raised.
|
||||
default: `false`
|
||||
* `core.clear_objects([options])`
|
||||
* Clear all objects in the environment
|
||||
* Takes an optional table as an argument with the field `mode`.
|
||||
@@ -7116,8 +7129,12 @@ Defaults for the `on_place` and `on_drop` item definition functions
|
||||
* `core.item_pickup(itemstack, picker, pointed_thing, time_from_last_punch, ...)`
|
||||
* Runs callbacks registered by `core.register_on_item_pickup` and adds
|
||||
the item to the picker's `"main"` inventory list.
|
||||
* Parameters are the same as in `on_pickup`.
|
||||
* Returns the leftover itemstack.
|
||||
* Parameters and return value are the same as `on_pickup`.
|
||||
* **Note**: is not called when wielded item overrides `on_pickup`
|
||||
* `core.item_secondary_use(itemstack, user)`
|
||||
* Global secondary use callback. Does nothing.
|
||||
* Parameters and return value are the same as `on_secondary_use`.
|
||||
* **Note**: is not called when wielded item overrides `on_secondary_use`
|
||||
* `core.item_drop(itemstack, dropper, pos)`
|
||||
* Converts `itemstack` to an in-world Lua entity.
|
||||
* `itemstack` (`ItemStack`) is modified (cleared) on success.
|
||||
@@ -7140,7 +7157,7 @@ Defaults for the `on_punch` and `on_dig` node definition callbacks
|
||||
* Calls functions registered by `core.register_on_punchnode()`
|
||||
* `core.node_dig(pos, node, digger)`
|
||||
* Checks if node can be dug, puts item into inventory, removes node
|
||||
* Calls functions registered by `core.registered_on_dignodes()`
|
||||
* Calls functions registered by `core.register_on_dignode()`
|
||||
|
||||
Sounds
|
||||
------
|
||||
@@ -7205,12 +7222,12 @@ This allows you easy interoperability for delegating work to jobs.
|
||||
* When `func` returns the callback is called (in the normal environment)
|
||||
with all of the return values as arguments.
|
||||
* Optional: Variable number of arguments that are passed to `func`
|
||||
* Returns an `AsyncJob` async job.
|
||||
* `core.register_async_dofile(path)`:
|
||||
* 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 `core.handle_async()`.
|
||||
|
||||
|
||||
### List of APIs available in an async environment
|
||||
|
||||
Classes:
|
||||
@@ -7368,11 +7385,13 @@ Server
|
||||
* `filedata`: the data of the file to be sent [*]
|
||||
* `to_player`: name of the player the media should be sent to instead of
|
||||
all players (optional)
|
||||
* `ephemeral`: boolean that marks the media as ephemeral,
|
||||
it will not be cached on the client (optional, default false)
|
||||
* `ephemeral`: if true the server will create a copy of the file and
|
||||
forget about it once delivered (optional boolean, default false)
|
||||
* `client_cache`: hint whether the client should save the media in its cache
|
||||
(optional boolean, default `!ephemeral`, added in 5.14.0)
|
||||
* 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)
|
||||
* Pushes the specified media file to client(s) as detailed below.
|
||||
The file must be a supported image, sound or model format.
|
||||
Dynamically added media is not persisted between server restarts.
|
||||
* Returns false on error, true if the request was accepted
|
||||
@@ -7381,19 +7400,17 @@ Server
|
||||
* Details/Notes:
|
||||
* If `ephemeral`=false and `to_player` is unset the file is added to the media
|
||||
sent to clients on startup, this means the media will appear even on
|
||||
old clients if they rejoin the server.
|
||||
old clients (<5.3.0) if they rejoin the server.
|
||||
* If `ephemeral`=false the file must not be modified, deleted, moved or
|
||||
renamed after calling this function.
|
||||
* Regardless of any use of `ephemeral`, adding media files with the same
|
||||
name twice is not possible/guaranteed to work. An exception to this is the
|
||||
use of `to_player` to send the same, already existent file to multiple
|
||||
chosen players.
|
||||
renamed after calling this function. This is allowed otherwise.
|
||||
* Adding media files with the same name twice is not possible.
|
||||
An exception to this is the use of `to_player` to send the same,
|
||||
already existent file to multiple chosen players (`ephemeral`=false only).
|
||||
* You can also call this at startup time. In that case `callback` MUST
|
||||
be `nil` and you cannot use `ephemeral` or `to_player`, as these logically
|
||||
do not make sense.
|
||||
* Clients will attempt to fetch files added this way via remote media,
|
||||
this can make transfer of bigger files painless (if set up). Nevertheless
|
||||
it is advised not to use dynamic media for big media files.
|
||||
this can make transfer of bigger files painless (if set up).
|
||||
|
||||
IPC
|
||||
---
|
||||
@@ -7464,6 +7481,7 @@ Particles
|
||||
---------
|
||||
|
||||
* `core.add_particle(particle definition)`
|
||||
* Spawn a single particle
|
||||
* Deprecated: `core.add_particle(pos, velocity, acceleration,
|
||||
expirationtime, size, collisiondetection, texture, playername)`
|
||||
|
||||
@@ -8045,6 +8063,15 @@ use the provided load and write functions for this.
|
||||
* `from_file(filename)`: Experimental. Like `from_string()`, but reads the data
|
||||
from a file.
|
||||
|
||||
`AsyncJob`
|
||||
----------
|
||||
An `AsyncJob` is a reference to a job to be run in an async environment.
|
||||
|
||||
### Methods
|
||||
* `cancel()`: try to cancel the job
|
||||
* Returns whether the job was cancelled.
|
||||
* A job can only be cancelled if it has not started.
|
||||
|
||||
`InvRef`
|
||||
--------
|
||||
|
||||
@@ -9542,7 +9569,8 @@ Player properties need to be saved manually.
|
||||
stepheight = 0,
|
||||
-- If positive number, object will climb upwards when it moves
|
||||
-- horizontally against a `walkable` node, if the height difference
|
||||
-- is within `stepheight`.
|
||||
-- is within `stepheight` and if the object current max Y in the world
|
||||
-- is greater or equal than the node min Y.
|
||||
|
||||
automatic_face_movement_dir = 0.0,
|
||||
-- Automatically set yaw to movement direction, offset in degrees.
|
||||
@@ -9576,6 +9604,16 @@ Player properties need to be saved manually.
|
||||
-- `false` will cause the background to be set automatically based on user settings.
|
||||
-- Default: false
|
||||
|
||||
nametag_fontsize = 1,
|
||||
-- Sets the font size of the nametag in pixels.
|
||||
-- `false` will cause the size to be set automatically based on user settings.
|
||||
-- Default: false
|
||||
|
||||
nametag_scale_z = false,
|
||||
-- If enabled, the nametag will be scaled by Z in screen space, meaning it becomes
|
||||
-- smaller the further away the object is.
|
||||
-- Default: false
|
||||
|
||||
infotext = "",
|
||||
-- Same as infotext for nodes. Empty by default
|
||||
|
||||
@@ -9988,15 +10026,15 @@ Used by `core.register_node`, `core.register_craftitem`, and
|
||||
-- When item is eaten with `core.do_item_eat`
|
||||
|
||||
punch_use = <SimpleSoundSpec>,
|
||||
-- When item is used with the 'punch/mine' key pointing at a node or entity
|
||||
-- When item is used with the 'punch/dig' key pointing at a node or entity
|
||||
|
||||
punch_use_air = <SimpleSoundSpec>,
|
||||
-- When item is used with the 'punch/mine' key pointing at nothing (air)
|
||||
-- When item is used with the 'punch/dig' key pointing at nothing (air)
|
||||
},
|
||||
|
||||
on_place = function(itemstack, placer, pointed_thing),
|
||||
-- When the 'place' key was pressed with the item in hand
|
||||
-- and a node was pointed at.
|
||||
-- Called when the 'place' key was pressed with the item in hand
|
||||
-- and pointing at a node.
|
||||
-- Shall place item and return the leftover itemstack
|
||||
-- or nil to not modify the inventory.
|
||||
-- The placer may be any ObjectRef or nil.
|
||||
@@ -10007,7 +10045,7 @@ Used by `core.register_node`, `core.register_craftitem`, and
|
||||
-- Function must return either nil if inventory shall not be modified,
|
||||
-- or an itemstack to replace the original itemstack.
|
||||
-- The user may be any ObjectRef or nil.
|
||||
-- default: nil
|
||||
-- default: core.item_secondary_use
|
||||
|
||||
on_drop = function(itemstack, dropper, pos),
|
||||
-- Shall drop item and return the leftover itemstack.
|
||||
@@ -10025,28 +10063,26 @@ Used by `core.register_node`, `core.register_craftitem`, and
|
||||
-- luaentity) as `type="object"` `pointed_thing`.
|
||||
-- * `time_from_last_punch, ...` (optional): Other parameters from
|
||||
-- `luaentity:on_punch`.
|
||||
-- default: `core.item_pickup`
|
||||
-- default: core.item_pickup
|
||||
|
||||
on_use = function(itemstack, user, pointed_thing),
|
||||
-- default: nil
|
||||
-- When user pressed the 'punch/mine' key with the item in hand.
|
||||
-- Called when user presses the 'punch/dig' key with the item in hand.
|
||||
-- Function must return either nil if inventory shall not be modified,
|
||||
-- or an itemstack to replace the original itemstack.
|
||||
-- e.g. itemstack:take_item(); return itemstack
|
||||
-- Otherwise, the function is free to do what it wants.
|
||||
-- The user may be any ObjectRef or nil.
|
||||
-- The default functions handle regular use cases.
|
||||
-- Note that defining this callback will prevent normal punching/digging
|
||||
-- behavior on the client, as the interaction is instead "forwarded" to the
|
||||
-- server.
|
||||
-- default: nil
|
||||
|
||||
after_use = function(itemstack, user, node, digparams),
|
||||
-- default: nil
|
||||
-- If defined, should return an itemstack and will be called instead of
|
||||
-- wearing out the item (if tool). If returns nil, does nothing.
|
||||
-- If after_use doesn't exist, it is the same as:
|
||||
-- function(itemstack, user, node, digparams)
|
||||
-- itemstack:add_wear(digparams.wear)
|
||||
-- return itemstack
|
||||
-- end
|
||||
-- Called after a tool is used to dig a node and will replace the default
|
||||
-- tool wear-out handling.
|
||||
-- Shall return the leftover itemstack or nil to not
|
||||
-- modify the dropped item.
|
||||
-- The user may be any ObjectRef or nil.
|
||||
-- default: nil
|
||||
|
||||
_custom_field = whatever,
|
||||
-- Add your own custom fields. By convention, all custom field names
|
||||
@@ -10470,8 +10506,6 @@ Used by `core.register_node`.
|
||||
-- itemstack will hold clicker's wielded item.
|
||||
-- Shall return the leftover itemstack.
|
||||
-- Note: pointed_thing can be nil, if a mod calls this function.
|
||||
-- This function does not get triggered by clients <=0.4.16 if the
|
||||
-- "formspec" node metadata field is set.
|
||||
|
||||
on_dig = function(pos, node, digger),
|
||||
-- default: core.node_dig
|
||||
@@ -10479,10 +10513,12 @@ Used by `core.register_node`.
|
||||
-- return true if the node was dug successfully, false otherwise.
|
||||
-- Deprecated: returning nil is the same as returning true.
|
||||
|
||||
on_timer = function(pos, elapsed),
|
||||
on_timer = function(pos, elapsed, node, timeout),
|
||||
-- default: nil
|
||||
-- called by NodeTimers, see core.get_node_timer and NodeTimerRef.
|
||||
-- elapsed is the total time passed since the timer was started.
|
||||
-- `elapsed`: total time passed since the timer was started.
|
||||
-- `node`: node table (since 5.14)
|
||||
-- `timeout`: timeout value of the just ended timer (since 5.14)
|
||||
-- return true to run the timer for another cycle with the same timeout
|
||||
-- value.
|
||||
|
||||
@@ -11472,6 +11508,9 @@ Used by `core.add_particle`.
|
||||
playername = "singleplayer",
|
||||
-- Optional, if specified spawns particle only on the player's client
|
||||
|
||||
-- Note that `exclude_player` is not supported here. You can use a single-use
|
||||
-- particlespawner if needed.
|
||||
|
||||
animation = {Tile Animation definition},
|
||||
-- Optional, specifies how to animate the particle texture
|
||||
|
||||
@@ -11535,6 +11574,9 @@ will be ignored.
|
||||
-- If time is 0 spawner has infinite lifespan and spawns the `amount` on
|
||||
-- a per-second basis.
|
||||
|
||||
size = 1,
|
||||
-- Size of the particle.
|
||||
|
||||
collisiondetection = false,
|
||||
-- If true collide with `walkable` nodes and, depending on the
|
||||
-- `object_collision` field, objects too.
|
||||
@@ -11561,7 +11603,12 @@ will be ignored.
|
||||
-- following section.
|
||||
|
||||
playername = "singleplayer",
|
||||
-- Optional, if specified spawns particles only on the player's client
|
||||
-- Optional, if specified spawns particles only for this player
|
||||
-- Can't be used together with `exclude_player`.
|
||||
|
||||
exclude_player = "singleplayer",
|
||||
-- Optional, if specified spawns particles not for this player
|
||||
-- Added in v5.14.0. Can't be used together with `playername`.
|
||||
|
||||
animation = {Tile Animation definition},
|
||||
-- Optional, specifies how to animate the particles' texture
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Luanti Lua Mainmenu API Reference 5.13.0
|
||||
Luanti Lua Mainmenu API Reference 5.14.0
|
||||
========================================
|
||||
|
||||
Introduction
|
||||
|
||||
@@ -43,8 +43,9 @@ core.register_node("callbacks:callback_node", {
|
||||
print_to_everything("callbacks:callback_node:after_dig_node("..core.pos_to_string(pos)..")")
|
||||
end,
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
print_to_everything("callbacks:callback_node:on_timer(): elapsed="..dump(elapsed))
|
||||
on_timer = function(pos, elapsed, node, timeout)
|
||||
print_to_everything("callbacks:callback_node:on_timer(): elapsed="..
|
||||
elapsed .. " node=" .. dump(node) .. " timeout=" .. timeout)
|
||||
return true
|
||||
end,
|
||||
})
|
||||
|
||||
@@ -85,6 +85,28 @@ core.register_entity("testentities:sam", {
|
||||
},
|
||||
on_activate = function(self)
|
||||
self.object:set_animation({x = 0, y = 219}, 30, 0, true)
|
||||
self._timer = 0
|
||||
self._grow_head = true
|
||||
self:_animate_head()
|
||||
end,
|
||||
_head_anim_duration = 2,
|
||||
_animate_head = function(self)
|
||||
local s = self._grow_head and 2 or 1
|
||||
self.object:set_bone_override("Head", {
|
||||
scale = {
|
||||
vec = vector.new(s, s, s),
|
||||
absolute = true,
|
||||
interpolation = self._head_anim_duration,
|
||||
},
|
||||
})
|
||||
end,
|
||||
on_step = function(self, dtime)
|
||||
self._timer = self._timer + dtime
|
||||
if self._timer >= self._head_anim_duration then
|
||||
self._timer = 0
|
||||
self._grow_head = not self._grow_head
|
||||
self:_animate_head()
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
@@ -207,3 +207,32 @@ local function test_vector_preserve(cb)
|
||||
end, {vec})
|
||||
end
|
||||
unittests.register("test_async_vector", test_vector_preserve, {async=true})
|
||||
|
||||
local function test_async_job_replacement(cb)
|
||||
core.ipc_set("unittests:end_blocking", nil)
|
||||
local capacity = core.get_async_threading_capacity()
|
||||
for _ = 1, capacity do
|
||||
core.handle_async(function()
|
||||
core.ipc_poll("unittests:end_blocking", 1000)
|
||||
end, function() end)
|
||||
end
|
||||
local job = core.handle_async(function()
|
||||
end, function()
|
||||
return cb("Canceled async job ran")
|
||||
end)
|
||||
if not job:cancel() then
|
||||
return cb("AsyncJob:cancel sanity check failed")
|
||||
end
|
||||
core.ipc_set("unittests:end_blocking", true)
|
||||
|
||||
-- Try to cancel a job that is already run.
|
||||
job = core.handle_async(function(x)
|
||||
return x
|
||||
end, function(ret)
|
||||
if job:cancel() then
|
||||
return cb("AsyncJob:cancel canceled a completed job")
|
||||
end
|
||||
cb()
|
||||
end, 1)
|
||||
end
|
||||
unittests.register("test_async_job_replacement", test_async_job_replacement, {async=true})
|
||||
|
||||
@@ -52,6 +52,7 @@ local function test_dynamic_media(cb, player)
|
||||
local ok = core.dynamic_add_media({
|
||||
filepath = path,
|
||||
to_player = player:get_player_name(),
|
||||
client_cache = false,
|
||||
}, function(name)
|
||||
if not call_ok then
|
||||
return cb("impossible condition")
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
|
||||
namespace gui
|
||||
{
|
||||
|
||||
class IGUIScrollBar;
|
||||
|
||||
class CGUIEditBox : public IGUIEditBox
|
||||
{
|
||||
public:
|
||||
@@ -133,7 +136,10 @@ class CGUIEditBox : public IGUIEditBox
|
||||
void updateAbsolutePosition() override;
|
||||
|
||||
//! Returns whether the element takes input from the IME
|
||||
bool acceptsIME() override;
|
||||
bool acceptsIME() override { return isEnabled() && IsWritable; };
|
||||
|
||||
//! set true if this EditBox is writable
|
||||
void setWritable(bool writable) { IsWritable = writable; }
|
||||
|
||||
protected:
|
||||
//! Breaks the single text line.
|
||||
@@ -154,10 +160,23 @@ class CGUIEditBox : public IGUIEditBox
|
||||
void sendGuiEvent(EGUI_EVENT_TYPE type);
|
||||
//! set text markers
|
||||
void setTextMarkers(s32 begin, s32 end);
|
||||
//! delete current selection or next char
|
||||
bool keyDelete();
|
||||
//! update the vertical scrollBar (visibilty & position)
|
||||
void updateVScrollBar();
|
||||
|
||||
bool processKey(const SEvent &event);
|
||||
//! KEY_LEFT / KEY_RIGHT inputs
|
||||
void processKeyLR(const SEvent::SKeyInput &input, s32 &new_mark_begin,
|
||||
s32 &new_mark_end);
|
||||
|
||||
bool onKeyUp(const SEvent &event, s32 &mark_begin, s32 &mark_end);
|
||||
bool onKeyDown(const SEvent &event, s32 &mark_begin, s32 &mark_end);
|
||||
void onKeyControlC(const SEvent &event);
|
||||
bool onKeyControlX(const SEvent &event, s32 &mark_begin, s32 &mark_end);
|
||||
bool onKeyControlV(const SEvent &event, s32 &mark_begin, s32 &mark_end);
|
||||
bool onKeyBack();
|
||||
//! delete current selection or next char
|
||||
bool onKeyDelete();
|
||||
|
||||
bool processMouse(const SEvent &event);
|
||||
s32 getCursorPos(s32 x, s32 y);
|
||||
|
||||
@@ -169,6 +188,7 @@ class CGUIEditBox : public IGUIEditBox
|
||||
s32 MarkBegin;
|
||||
s32 MarkEnd;
|
||||
|
||||
video::SColor OverrideBgColor = 0;
|
||||
video::SColor OverrideColor;
|
||||
gui::IGUIFont *OverrideFont, *LastBreakFont;
|
||||
IOSOperator *Operator;
|
||||
@@ -179,8 +199,15 @@ class CGUIEditBox : public IGUIEditBox
|
||||
s32 CursorPos;
|
||||
s32 HScrollPos, VScrollPos; // scroll position in characters
|
||||
u32 Max;
|
||||
u32 VScrollBarWidth = 0;
|
||||
IGUIScrollBar *VScrollBar = nullptr;
|
||||
|
||||
bool WordWrap = false,
|
||||
MultiLine = false,
|
||||
AutoScroll = true,
|
||||
PasswordBox = false,
|
||||
IsWritable = true;
|
||||
|
||||
bool WordWrap, MultiLine, AutoScroll, PasswordBox;
|
||||
wchar_t PasswordChar;
|
||||
EGUI_ALIGNMENT HAlign, VAlign;
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
#include "IReferenceCounted.h"
|
||||
#include "IFileArchive.h"
|
||||
|
||||
namespace video
|
||||
{
|
||||
class IVideoDriver;
|
||||
} // end namespace video
|
||||
namespace io
|
||||
{
|
||||
|
||||
|
||||
@@ -8,15 +8,9 @@
|
||||
#include "EPrimitiveTypes.h"
|
||||
#include "path.h"
|
||||
|
||||
namespace io
|
||||
{
|
||||
class IReadFile;
|
||||
} // end namespace io
|
||||
|
||||
namespace video
|
||||
{
|
||||
|
||||
class IVideoDriver;
|
||||
class IShaderConstantSetCallBack;
|
||||
|
||||
//! Interface making it possible to create and use programs running on the GPU.
|
||||
|
||||
@@ -16,8 +16,6 @@ class IEventReceiver;
|
||||
|
||||
namespace io
|
||||
{
|
||||
class IReadFile;
|
||||
class IWriteFile;
|
||||
class IFileSystem;
|
||||
} // end namespace io
|
||||
namespace video
|
||||
@@ -44,7 +42,6 @@ class IGUITabControl;
|
||||
class IGUITab;
|
||||
class IGUIComboBox;
|
||||
class IGUIButton;
|
||||
class IGUIWindow;
|
||||
|
||||
//! GUI Environment. Used as factory and manager of all other GUI elements.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements):
|
||||
|
||||
@@ -51,6 +51,17 @@ class IGUIScrollBar : public IGUIElement
|
||||
|
||||
//! sets the current position of the scrollbar
|
||||
virtual void setPos(s32 pos) = 0;
|
||||
|
||||
//! Smooth scroll: target position
|
||||
virtual s32 getTargetPos() const { return getPos(); }
|
||||
|
||||
//! Smooth scroll: move to position
|
||||
virtual void setPosInterpolated(s32 pos) { setPos(pos); }
|
||||
|
||||
//! For automatic thumb scaling
|
||||
/** Sets the full height (e.g. content to scroll), in pixels.
|
||||
Set to 0 to disable (default). */
|
||||
virtual void setPageSize(s32 size) = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
|
||||
@@ -11,8 +11,6 @@ namespace scene
|
||||
{
|
||||
class IMesh;
|
||||
class IAnimatedMesh;
|
||||
class IAnimatedMeshSceneNode;
|
||||
class IMeshLoader;
|
||||
|
||||
//! The mesh cache stores already loaded meshes and provides an interface to them.
|
||||
/** You can access it using ISceneManager::getMeshCache(). All existing
|
||||
|
||||
@@ -11,28 +11,16 @@
|
||||
#include "SColor.h"
|
||||
#include "ESceneNodeTypes.h"
|
||||
|
||||
struct SKeyMap;
|
||||
struct SEvent;
|
||||
|
||||
namespace io
|
||||
{
|
||||
class IReadFile;
|
||||
class IWriteFile;
|
||||
class IFileSystem;
|
||||
} // end namespace io
|
||||
|
||||
namespace gui
|
||||
{
|
||||
class IGUIFont;
|
||||
class IGUIEnvironment;
|
||||
} // end namespace gui
|
||||
|
||||
namespace video
|
||||
{
|
||||
class IVideoDriver;
|
||||
class SMaterial;
|
||||
class IImage;
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
|
||||
namespace scene
|
||||
@@ -89,14 +77,12 @@ class ICameraSceneNode;
|
||||
class IDummyTransformationSceneNode;
|
||||
class IMesh;
|
||||
class SkinnedMesh;
|
||||
class IMeshBuffer;
|
||||
class IMeshCache;
|
||||
class ISceneCollisionManager;
|
||||
class IMeshLoader;
|
||||
class IMeshManipulator;
|
||||
class IMeshSceneNode;
|
||||
class ISceneNode;
|
||||
class ISceneNodeFactory;
|
||||
|
||||
//! The Scene Manager manages scene nodes, mesh resources, cameras and all the other stuff.
|
||||
/** All Scene nodes can be created only here.
|
||||
|
||||
@@ -66,6 +66,11 @@ enum E_TEXTURE_CREATION_FLAG
|
||||
not recommended to enable this flag. */
|
||||
ETCF_NO_ALPHA_CHANNEL = 0x00000020,
|
||||
|
||||
/** Creates Render Target Textures with mipmap levels.
|
||||
See also: `ETCF_CREATE_MIP_MAPS` for other textures.
|
||||
This is disabled by default. */
|
||||
ETCF_CREATE_RTT_MIP_MAPS = 0x00000040,
|
||||
|
||||
//! Allow the driver to keep a copy of the texture in memory
|
||||
/** Enabling this makes calls to ITexture::lock a lot faster, but costs main memory.
|
||||
This is disabled by default.
|
||||
|
||||
@@ -40,7 +40,6 @@ namespace video
|
||||
{
|
||||
class IContextManager;
|
||||
class IImage;
|
||||
class ITexture;
|
||||
class IVideoDriver;
|
||||
extern "C" bool isDriverSupported(E_DRIVER_TYPE driver);
|
||||
} // end namespace video
|
||||
|
||||
@@ -119,6 +119,11 @@ const c8 *const ColorFormatNames[] = {
|
||||
static_assert(sizeof(ColorFormatNames) / sizeof(ColorFormatNames[0])
|
||||
== ECF_UNKNOWN + 2, "name table size mismatch");
|
||||
|
||||
inline const c8 *ColorFormatName(ECOLOR_FORMAT format)
|
||||
{
|
||||
return ColorFormatNames[format < ECF_UNKNOWN ? format : ECF_UNKNOWN];
|
||||
}
|
||||
|
||||
//! Creates a 16 bit A1R5G5B5 color
|
||||
inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a = 0xFF)
|
||||
{
|
||||
|
||||
@@ -9,9 +9,6 @@
|
||||
namespace scene
|
||||
{
|
||||
|
||||
class IMesh;
|
||||
class IMeshBuffer;
|
||||
struct SMesh;
|
||||
|
||||
//! Interface for vertex manipulators.
|
||||
/** You should derive your manipulator from this class if it shall be called for every vertex, getting as parameter just the vertex.
|
||||
|
||||
@@ -43,14 +43,8 @@ typedef float f32;
|
||||
/** This is a typedef for double, it ensures portability of the engine. */
|
||||
typedef double f64;
|
||||
|
||||
//! Defines for snprintf_irr because snprintf method does not match the ISO C
|
||||
//! standard on Windows platforms.
|
||||
//! We want int snprintf_irr(char *str, size_t size, const char *format, ...);
|
||||
#if defined(_MSC_VER)
|
||||
#define snprintf_irr sprintf_s
|
||||
#else
|
||||
//! Note: cannot assume that positional arguments are supported (not on Windows)
|
||||
#define snprintf_irr snprintf
|
||||
#endif // _MSC_VER
|
||||
|
||||
//! Type name for character type used by the file system (legacy).
|
||||
typedef char fschar_t;
|
||||
|
||||
@@ -171,7 +171,8 @@ void CAnimatedMeshSceneNode::OnAnimate(u32 timeMs)
|
||||
}
|
||||
|
||||
// set CurrentFrameNr
|
||||
buildFrameNr(timeMs - LastTimeMs);
|
||||
const u32 dtimeMs = timeMs - LastTimeMs;
|
||||
buildFrameNr(dtimeMs);
|
||||
LastTimeMs = timeMs;
|
||||
|
||||
// This needs to be done on animate, which is called recursively *before*
|
||||
@@ -183,7 +184,7 @@ void CAnimatedMeshSceneNode::OnAnimate(u32 timeMs)
|
||||
copyOldTransforms();
|
||||
|
||||
if (OnAnimateCallback)
|
||||
OnAnimateCallback(timeMs / 1000.0f);
|
||||
OnAnimateCallback(dtimeMs / 1000.0f);
|
||||
|
||||
IAnimatedMeshSceneNode::OnAnimate(timeMs);
|
||||
|
||||
@@ -399,7 +400,7 @@ IBoneSceneNode *CAnimatedMeshSceneNode::getJointNode(const c8 *jointName)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return PerJoint.SceneNodes[*number];
|
||||
return PerJoint.SceneNodes[*number].get();
|
||||
}
|
||||
|
||||
//! Returns a pointer to a child node, which has the same transformation as
|
||||
@@ -418,7 +419,7 @@ IBoneSceneNode *CAnimatedMeshSceneNode::getJointNode(u32 jointID)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return PerJoint.SceneNodes[jointID];
|
||||
return PerJoint.SceneNodes[jointID].get();
|
||||
}
|
||||
|
||||
//! Gets joint count.
|
||||
@@ -440,8 +441,8 @@ bool CAnimatedMeshSceneNode::removeChild(ISceneNode *child)
|
||||
if (ISceneNode::removeChild(child)) {
|
||||
if (JointsUsed) { // stop weird bugs caused while changing parents as the joints are being created
|
||||
for (u32 i = 0; i < PerJoint.SceneNodes.size(); ++i) {
|
||||
if (PerJoint.SceneNodes[i] == child) {
|
||||
PerJoint.SceneNodes[i] = 0; // remove link to child
|
||||
if (PerJoint.SceneNodes[i].get() == child) {
|
||||
PerJoint.SceneNodes[i].reset(); // remove link to child
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -550,13 +551,13 @@ void CAnimatedMeshSceneNode::addJoints()
|
||||
const auto *joint = joints[i];
|
||||
ISceneNode *parent = this;
|
||||
if (joint->ParentJointID)
|
||||
parent = PerJoint.SceneNodes.at(*joint->ParentJointID); // exists because of topo. order
|
||||
parent = PerJoint.SceneNodes.at(*joint->ParentJointID).get(); // exists because of topo. order
|
||||
assert(parent);
|
||||
const auto *matrix = std::get_if<core::matrix4>(&joint->transform);
|
||||
PerJoint.SceneNodes.push_back(new CBoneSceneNode(
|
||||
PerJoint.SceneNodes.push_back(irr_ptr<CBoneSceneNode>(new CBoneSceneNode(
|
||||
parent, SceneManager, 0, i, joint->Name,
|
||||
matrix ? core::Transform{} : std::get<core::Transform>(joint->transform),
|
||||
matrix ? *matrix : std::optional<core::matrix4>{}));
|
||||
matrix ? *matrix : std::optional<core::matrix4>{})));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -609,7 +610,7 @@ void CAnimatedMeshSceneNode::checkJoints()
|
||||
|
||||
if (!JointsUsed) {
|
||||
for (u32 i = 0; i < PerJoint.SceneNodes.size(); ++i)
|
||||
removeChild(PerJoint.SceneNodes[i]);
|
||||
removeChild(PerJoint.SceneNodes[i].get());
|
||||
addJoints();
|
||||
|
||||
JointsUsed = true;
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
|
||||
#include "SkinnedMesh.h"
|
||||
#include "Transform.h"
|
||||
#include "irr_ptr.h"
|
||||
#include "matrix4.h"
|
||||
|
||||
namespace scene
|
||||
{
|
||||
class IDummyTransformationSceneNode;
|
||||
|
||||
class CAnimatedMeshSceneNode : public IAnimatedMeshSceneNode
|
||||
{
|
||||
@@ -173,7 +173,7 @@ class CAnimatedMeshSceneNode : public IAnimatedMeshSceneNode
|
||||
std::function<void(f32)> OnAnimateCallback;
|
||||
|
||||
struct PerJointData {
|
||||
std::vector<CBoneSceneNode *> SceneNodes;
|
||||
std::vector<irr_ptr<CBoneSceneNode>> SceneNodes;
|
||||
std::vector<core::matrix4> GlobalMatrices;
|
||||
std::vector<std::optional<core::Transform>> PreTransSaves;
|
||||
void setN(u16 n) {
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
namespace io
|
||||
{
|
||||
|
||||
class CZipReader;
|
||||
|
||||
/*!
|
||||
FileSystem which uses normal files and one zipfile
|
||||
|
||||
@@ -7,10 +7,12 @@
|
||||
#include "IGUISkin.h"
|
||||
#include "IGUIEnvironment.h"
|
||||
#include "IGUIFont.h"
|
||||
#include "IGUIScrollBar.h"
|
||||
#include "IVideoDriver.h"
|
||||
#include "rect.h"
|
||||
#include "os.h"
|
||||
#include "Keycodes.h"
|
||||
#include <cwctype> // std::iswspace, std::iswpunct
|
||||
|
||||
/*
|
||||
todo:
|
||||
@@ -33,7 +35,6 @@ CGUIEditBox::CGUIEditBox(const wchar_t *text, bool border,
|
||||
Border(border), Background(true), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0),
|
||||
OverrideColor(video::SColor(101, 255, 255, 255)), OverrideFont(0), LastBreakFont(0),
|
||||
Operator(0), BlinkStartTime(0), CursorBlinkTime(350), CursorChar(L"_"), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0),
|
||||
WordWrap(false), MultiLine(false), AutoScroll(true), PasswordBox(false),
|
||||
PasswordChar(L'*'), HAlign(EGUIA_UPPERLEFT), VAlign(EGUIA_CENTER),
|
||||
CurrentTextRect(0, 0, 1, 1), FrameRect(rectangle)
|
||||
{
|
||||
@@ -58,6 +59,9 @@ CGUIEditBox::CGUIEditBox(const wchar_t *text, bool border,
|
||||
//! destructor
|
||||
CGUIEditBox::~CGUIEditBox()
|
||||
{
|
||||
if (VScrollBar)
|
||||
VScrollBar->drop();
|
||||
|
||||
if (OverrideFont)
|
||||
OverrideFont->drop();
|
||||
|
||||
@@ -265,86 +269,13 @@ bool CGUIEditBox::processKey(const SEvent &event)
|
||||
newMarkEnd = Text.size();
|
||||
break;
|
||||
case KEY_KEY_C:
|
||||
// copy to clipboard
|
||||
if (!PasswordBox && Operator && MarkBegin != MarkEnd) {
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
core::stringc s;
|
||||
wStringToUTF8(s, Text.subString(realmbgn, realmend - realmbgn));
|
||||
Operator->copyToClipboard(s.c_str());
|
||||
}
|
||||
onKeyControlC(event);
|
||||
break;
|
||||
case KEY_KEY_X:
|
||||
// cut to the clipboard
|
||||
if (!PasswordBox && Operator && MarkBegin != MarkEnd) {
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
// copy
|
||||
core::stringc sc;
|
||||
wStringToUTF8(sc, Text.subString(realmbgn, realmend - realmbgn));
|
||||
Operator->copyToClipboard(sc.c_str());
|
||||
|
||||
if (isEnabled()) {
|
||||
// delete
|
||||
core::stringw s;
|
||||
s = Text.subString(0, realmbgn);
|
||||
s.append(Text.subString(realmend, Text.size() - realmend));
|
||||
Text = s;
|
||||
|
||||
CursorPos = realmbgn;
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
textChanged = true;
|
||||
}
|
||||
}
|
||||
textChanged = onKeyControlX(event, newMarkBegin, newMarkEnd);
|
||||
break;
|
||||
case KEY_KEY_V:
|
||||
if (!isEnabled())
|
||||
break;
|
||||
|
||||
// paste from the clipboard
|
||||
if (Operator) {
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
// add the string
|
||||
const c8 *p = Operator->getTextFromClipboard();
|
||||
if (p) {
|
||||
core::stringw widep;
|
||||
core::utf8ToWString(widep, p);
|
||||
|
||||
if (MarkBegin == MarkEnd) {
|
||||
// insert text
|
||||
core::stringw s = Text.subString(0, CursorPos);
|
||||
s.append(widep);
|
||||
s.append(Text.subString(CursorPos, Text.size() - CursorPos));
|
||||
|
||||
if (!Max || s.size() <= Max) { // thx to Fish FH for fix
|
||||
Text = s;
|
||||
s = widep;
|
||||
CursorPos += s.size();
|
||||
}
|
||||
} else {
|
||||
// replace text
|
||||
|
||||
core::stringw s = Text.subString(0, realmbgn);
|
||||
s.append(widep);
|
||||
s.append(Text.subString(realmend, Text.size() - realmend));
|
||||
|
||||
if (!Max || s.size() <= Max) { // thx to Fish FH for fix
|
||||
Text = s;
|
||||
s = widep;
|
||||
CursorPos = realmbgn + s.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
textChanged = true;
|
||||
}
|
||||
textChanged = onKeyControlV(event, newMarkBegin, newMarkEnd);
|
||||
break;
|
||||
case KEY_HOME:
|
||||
// move/highlight to start of text
|
||||
@@ -370,12 +301,15 @@ bool CGUIEditBox::processKey(const SEvent &event)
|
||||
newMarkEnd = 0;
|
||||
}
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
case KEY_RIGHT:
|
||||
processKeyLR(event.KeyInput, newMarkBegin, newMarkEnd);
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Some special keys - but only handle them if KeyInput.Char is null as on some systems (X11) they might have same key-code as ansi-keys otherwise
|
||||
else if (event.KeyInput.Char == 0) {
|
||||
} else {
|
||||
switch (event.KeyInput.Key) {
|
||||
case KEY_END: {
|
||||
s32 p = Text.size();
|
||||
@@ -417,113 +351,6 @@ bool CGUIEditBox::processKey(const SEvent &event)
|
||||
CursorPos = p;
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
} break;
|
||||
case KEY_LEFT:
|
||||
|
||||
if (event.KeyInput.Shift) {
|
||||
if (CursorPos > 0) {
|
||||
if (MarkBegin == MarkEnd)
|
||||
newMarkBegin = CursorPos;
|
||||
|
||||
newMarkEnd = CursorPos - 1;
|
||||
}
|
||||
} else {
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
}
|
||||
|
||||
if (CursorPos > 0)
|
||||
CursorPos--;
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
break;
|
||||
|
||||
case KEY_RIGHT:
|
||||
if (event.KeyInput.Shift) {
|
||||
if (Text.size() > (u32)CursorPos) {
|
||||
if (MarkBegin == MarkEnd)
|
||||
newMarkBegin = CursorPos;
|
||||
|
||||
newMarkEnd = CursorPos + 1;
|
||||
}
|
||||
} else {
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
}
|
||||
|
||||
if (Text.size() > (u32)CursorPos)
|
||||
CursorPos++;
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
break;
|
||||
case KEY_UP:
|
||||
if (MultiLine || (WordWrap && BrokenText.size() > 1)) {
|
||||
s32 lineNo = getLineFromPos(CursorPos);
|
||||
s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin > MarkEnd ? MarkBegin : MarkEnd);
|
||||
if (lineNo > 0) {
|
||||
s32 cp = CursorPos - BrokenTextPositions[lineNo];
|
||||
if ((s32)BrokenText[lineNo - 1].size() < cp)
|
||||
CursorPos = BrokenTextPositions[lineNo - 1] + core::max_((u32)1, BrokenText[lineNo - 1].size()) - 1;
|
||||
else
|
||||
CursorPos = BrokenTextPositions[lineNo - 1] + cp;
|
||||
}
|
||||
|
||||
if (event.KeyInput.Shift) {
|
||||
newMarkBegin = mb;
|
||||
newMarkEnd = CursorPos;
|
||||
} else {
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
if (MultiLine || (WordWrap && BrokenText.size() > 1)) {
|
||||
s32 lineNo = getLineFromPos(CursorPos);
|
||||
s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin < MarkEnd ? MarkBegin : MarkEnd);
|
||||
if (lineNo < (s32)BrokenText.size() - 1) {
|
||||
s32 cp = CursorPos - BrokenTextPositions[lineNo];
|
||||
if ((s32)BrokenText[lineNo + 1].size() < cp)
|
||||
CursorPos = BrokenTextPositions[lineNo + 1] + core::max_((u32)1, BrokenText[lineNo + 1].size()) - 1;
|
||||
else
|
||||
CursorPos = BrokenTextPositions[lineNo + 1] + cp;
|
||||
}
|
||||
|
||||
if (event.KeyInput.Shift) {
|
||||
newMarkBegin = mb;
|
||||
newMarkEnd = CursorPos;
|
||||
} else {
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KEY_INSERT:
|
||||
if (!isEnabled())
|
||||
break;
|
||||
|
||||
OverwriteMode = !OverwriteMode;
|
||||
break;
|
||||
case KEY_DELETE:
|
||||
if (!isEnabled())
|
||||
break;
|
||||
|
||||
if (keyDelete()) {
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
textChanged = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// default keyboard handling
|
||||
switch (event.KeyInput.Key) {
|
||||
case KEY_RETURN:
|
||||
if (MultiLine) {
|
||||
inputChar(L'\n');
|
||||
@@ -532,64 +359,43 @@ bool CGUIEditBox::processKey(const SEvent &event)
|
||||
sendGuiEvent(EGET_EDITBOX_ENTER);
|
||||
}
|
||||
return true;
|
||||
|
||||
case KEY_BACK:
|
||||
if (!isEnabled())
|
||||
case KEY_LEFT:
|
||||
case KEY_RIGHT:
|
||||
processKeyLR(event.KeyInput, newMarkBegin, newMarkEnd);
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
break;
|
||||
case KEY_UP:
|
||||
if (!onKeyUp(event, newMarkBegin, newMarkEnd)) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
if (!onKeyDown(event, newMarkBegin, newMarkEnd)) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KEY_INSERT:
|
||||
if (!isEnabled() || !IsWritable)
|
||||
break;
|
||||
|
||||
if (Text.size()) {
|
||||
core::stringw s;
|
||||
|
||||
if (MarkBegin != MarkEnd) {
|
||||
// delete marked text
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
s = Text.subString(0, realmbgn);
|
||||
s.append(Text.subString(realmend, Text.size() - realmend));
|
||||
Text = s;
|
||||
|
||||
CursorPos = realmbgn;
|
||||
} else {
|
||||
// delete text behind cursor
|
||||
if (CursorPos > 0)
|
||||
s = Text.subString(0, CursorPos - 1);
|
||||
else
|
||||
s = L"";
|
||||
s.append(Text.subString(CursorPos, Text.size() - CursorPos));
|
||||
Text = s;
|
||||
--CursorPos;
|
||||
}
|
||||
|
||||
if (CursorPos < 0)
|
||||
CursorPos = 0;
|
||||
OverwriteMode = !OverwriteMode;
|
||||
break;
|
||||
case KEY_BACK:
|
||||
textChanged = onKeyBack();
|
||||
if (textChanged) {
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
textChanged = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_DELETE:
|
||||
|
||||
// At least on X11 we get a char with 127 when the delete key is pressed.
|
||||
// We get no char when the delete key on numkeys is pressed with numlock off (handled in the other case calling keyDelete as Char is then 0).
|
||||
// We get a keykode != 127 when delete key on numlock is pressed with numlock on.
|
||||
if (event.KeyInput.Char == 127) {
|
||||
if (!isEnabled())
|
||||
break;
|
||||
|
||||
if (keyDelete()) {
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
textChanged = true;
|
||||
}
|
||||
break;
|
||||
} else {
|
||||
inputChar(event.KeyInput.Char);
|
||||
return true;
|
||||
textChanged = onKeyDelete();
|
||||
if (textChanged) {
|
||||
BlinkStartTime = os::Timer::getTime();
|
||||
newMarkBegin = 0;
|
||||
newMarkEnd = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_ESCAPE:
|
||||
case KEY_TAB:
|
||||
@@ -642,30 +448,77 @@ bool CGUIEditBox::processKey(const SEvent &event)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGUIEditBox::keyDelete()
|
||||
void CGUIEditBox::processKeyLR(const SEvent::SKeyInput &input, s32 &new_mark_begin,
|
||||
s32 &new_mark_end)
|
||||
{
|
||||
if (Text.size() != 0) {
|
||||
core::stringw s;
|
||||
const s8 dir = input.Key == KEY_RIGHT ? 1 : -1;
|
||||
|
||||
if (MarkBegin != MarkEnd) {
|
||||
// delete marked text
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
s32 new_pos = CursorPos;
|
||||
if (input.Control) {
|
||||
// Advance to next/previous word
|
||||
wchar_t prev_c = L'\0';
|
||||
for (s32 i = new_pos; i >= 0 && i <= (s32)Text.size(); i += dir) {
|
||||
// This only handles Latin characters.
|
||||
const wchar_t c = Text[i];
|
||||
|
||||
s = Text.subString(0, realmbgn);
|
||||
s.append(Text.subString(realmend, Text.size() - realmend));
|
||||
Text = s;
|
||||
new_pos = i;
|
||||
if (std::abs(i - CursorPos) > 2) {
|
||||
// End of word
|
||||
if (!std::iswspace(prev_c) && std::iswspace(c))
|
||||
break;
|
||||
// End of a sentence.
|
||||
if (std::iswpunct(prev_c) && !std::iswpunct(c))
|
||||
break;
|
||||
}
|
||||
prev_c = c;
|
||||
}
|
||||
} else {
|
||||
// Advance by +1/-1 character
|
||||
new_pos += dir;
|
||||
}
|
||||
|
||||
CursorPos = realmbgn;
|
||||
} else {
|
||||
// delete text before cursor
|
||||
s = Text.subString(0, CursorPos);
|
||||
s.append(Text.subString(CursorPos + 1, Text.size() - CursorPos - 1));
|
||||
Text = s;
|
||||
if (!input.Shift) {
|
||||
// Reset selection
|
||||
new_mark_begin = 0;
|
||||
new_mark_end = 0;
|
||||
}
|
||||
|
||||
if (new_pos >= 0 && new_pos <= (s32)Text.size()) {
|
||||
// Update cursor (and selection)
|
||||
if (input.Shift) {
|
||||
if (MarkBegin == MarkEnd)
|
||||
new_mark_begin = CursorPos;
|
||||
|
||||
new_mark_end = new_pos;
|
||||
}
|
||||
|
||||
if (CursorPos > (s32)Text.size())
|
||||
CursorPos = (s32)Text.size();
|
||||
CursorPos = new_pos;
|
||||
}
|
||||
}
|
||||
|
||||
bool CGUIEditBox::onKeyUp(const SEvent &event, s32 &mark_begin, s32 &mark_end)
|
||||
{
|
||||
if (MultiLine || (WordWrap && BrokenText.size() > 1)) {
|
||||
s32 lineNo = getLineFromPos(CursorPos);
|
||||
s32 mb = (MarkBegin == MarkEnd) ? CursorPos :
|
||||
(MarkBegin > MarkEnd ? MarkBegin : MarkEnd);
|
||||
if (lineNo > 0) {
|
||||
s32 cp = CursorPos - BrokenTextPositions[lineNo];
|
||||
if ((s32)BrokenText[lineNo - 1].size() < cp) {
|
||||
CursorPos = BrokenTextPositions[lineNo - 1] +
|
||||
core::max_((u32)1, BrokenText[lineNo - 1].size()) - 1;
|
||||
}
|
||||
else
|
||||
CursorPos = BrokenTextPositions[lineNo - 1] + cp;
|
||||
}
|
||||
|
||||
if (event.KeyInput.Shift) {
|
||||
mark_begin = mb;
|
||||
mark_end = CursorPos;
|
||||
} else {
|
||||
mark_begin = 0;
|
||||
mark_end = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -673,6 +526,192 @@ bool CGUIEditBox::keyDelete()
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGUIEditBox::onKeyDown(const SEvent &event, s32 &mark_begin, s32 &mark_end)
|
||||
{
|
||||
if (MultiLine || (WordWrap && BrokenText.size() > 1)) {
|
||||
s32 lineNo = getLineFromPos(CursorPos);
|
||||
s32 mb = (MarkBegin == MarkEnd) ? CursorPos :
|
||||
(MarkBegin < MarkEnd ? MarkBegin : MarkEnd);
|
||||
if (lineNo < (s32)BrokenText.size() - 1) {
|
||||
s32 cp = CursorPos - BrokenTextPositions[lineNo];
|
||||
if ((s32)BrokenText[lineNo + 1].size() < cp) {
|
||||
CursorPos = BrokenTextPositions[lineNo + 1] +
|
||||
core::max_((u32)1, BrokenText[lineNo + 1].size()) - 1;
|
||||
}
|
||||
else
|
||||
CursorPos = BrokenTextPositions[lineNo + 1] + cp;
|
||||
}
|
||||
|
||||
if (event.KeyInput.Shift) {
|
||||
mark_begin = mb;
|
||||
mark_end = CursorPos;
|
||||
} else {
|
||||
mark_begin = 0;
|
||||
mark_end = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CGUIEditBox::onKeyControlC(const SEvent &event)
|
||||
{
|
||||
// copy to clipboard
|
||||
if (PasswordBox || !Operator || MarkBegin == MarkEnd)
|
||||
return;
|
||||
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
core::stringc s;
|
||||
wStringToUTF8(s, Text.subString(realmbgn, realmend - realmbgn));
|
||||
Operator->copyToClipboard(s.c_str());
|
||||
}
|
||||
|
||||
bool CGUIEditBox::onKeyControlX(const SEvent &event, s32 &mark_begin, s32 &mark_end)
|
||||
{
|
||||
// First copy to clipboard
|
||||
onKeyControlC(event);
|
||||
|
||||
if (!IsWritable)
|
||||
return false;
|
||||
|
||||
if (PasswordBox || !Operator || MarkBegin == MarkEnd)
|
||||
return false;
|
||||
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
// Now remove from box if enabled
|
||||
if (isEnabled()) {
|
||||
// delete
|
||||
core::stringw s;
|
||||
s = Text.subString(0, realmbgn);
|
||||
s.append(Text.subString(realmend, Text.size() - realmend));
|
||||
Text = s;
|
||||
|
||||
CursorPos = realmbgn;
|
||||
mark_begin = 0;
|
||||
mark_end = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGUIEditBox::onKeyControlV(const SEvent &event, s32 &mark_begin, s32 &mark_end)
|
||||
{
|
||||
if (!isEnabled() || !IsWritable)
|
||||
return false;
|
||||
|
||||
// paste from the clipboard
|
||||
if (!Operator)
|
||||
return false;
|
||||
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
// add new character
|
||||
if (const c8 *p = Operator->getTextFromClipboard()) {
|
||||
core::stringw inserted_text;
|
||||
core::utf8ToWString(inserted_text, p);
|
||||
if (MarkBegin == MarkEnd) {
|
||||
// insert text
|
||||
core::stringw s = Text.subString(0, CursorPos);
|
||||
s.append(inserted_text);
|
||||
s.append(Text.subString(
|
||||
CursorPos, Text.size() - CursorPos));
|
||||
|
||||
if (!Max || s.size() <= Max) {
|
||||
Text = s;
|
||||
CursorPos += inserted_text.size();
|
||||
}
|
||||
} else {
|
||||
// replace text
|
||||
|
||||
core::stringw s = Text.subString(0, realmbgn);
|
||||
s.append(inserted_text);
|
||||
s.append(Text.subString(realmend, Text.size() - realmend));
|
||||
|
||||
if (!Max || s.size() <= Max) {
|
||||
Text = s;
|
||||
CursorPos = realmbgn + inserted_text.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mark_begin = 0;
|
||||
mark_end = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGUIEditBox::onKeyBack()
|
||||
{
|
||||
if (!isEnabled() || Text.empty() || !IsWritable)
|
||||
return false;
|
||||
|
||||
core::stringw s;
|
||||
|
||||
if (MarkBegin != MarkEnd) {
|
||||
// delete marked text
|
||||
const s32 realmbgn =
|
||||
MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend =
|
||||
MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
s = Text.subString(0, realmbgn);
|
||||
s.append(Text.subString(realmend, Text.size() - realmend));
|
||||
Text = s;
|
||||
|
||||
CursorPos = realmbgn;
|
||||
} else {
|
||||
// delete text behind cursor
|
||||
if (CursorPos > 0)
|
||||
s = Text.subString(0, CursorPos - 1);
|
||||
else
|
||||
s = L"";
|
||||
s.append(Text.subString(CursorPos, Text.size() - CursorPos));
|
||||
Text = s;
|
||||
--CursorPos;
|
||||
}
|
||||
|
||||
if (CursorPos < 0)
|
||||
CursorPos = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGUIEditBox::onKeyDelete()
|
||||
{
|
||||
if (!isEnabled() || Text.empty() || !IsWritable)
|
||||
return false;
|
||||
|
||||
core::stringw s;
|
||||
|
||||
if (MarkBegin != MarkEnd) {
|
||||
// delete marked text
|
||||
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
|
||||
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
|
||||
|
||||
s = Text.subString(0, realmbgn);
|
||||
s.append(Text.subString(realmend, Text.size() - realmend));
|
||||
Text = s;
|
||||
|
||||
CursorPos = realmbgn;
|
||||
} else {
|
||||
// delete text before cursor
|
||||
s = Text.subString(0, CursorPos);
|
||||
s.append(Text.subString(CursorPos + 1, Text.size() - CursorPos - 1));
|
||||
Text = s;
|
||||
}
|
||||
|
||||
if (CursorPos > (s32)Text.size())
|
||||
CursorPos = (s32)Text.size();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//! draws the element and its children
|
||||
void CGUIEditBox::draw()
|
||||
{
|
||||
@@ -685,21 +724,25 @@ void CGUIEditBox::draw()
|
||||
if (!skin)
|
||||
return;
|
||||
|
||||
EGUI_DEFAULT_COLOR bgCol = EGDC_GRAY_EDITABLE;
|
||||
if (isEnabled())
|
||||
bgCol = focus ? EGDC_FOCUSED_EDITABLE : EGDC_EDITABLE;
|
||||
video::SColor bgColor = OverrideBgColor;
|
||||
if (OverrideBgColor.color == 0) {
|
||||
EGUI_DEFAULT_COLOR bgCol = EGDC_GRAY_EDITABLE;
|
||||
if (isEnabled())
|
||||
bgCol = focus ? EGDC_FOCUSED_EDITABLE : EGDC_EDITABLE;
|
||||
bgColor = skin->getColor(bgCol);
|
||||
}
|
||||
|
||||
if (!Border && Background) {
|
||||
skin->draw2DRectangle(this, skin->getColor(bgCol), AbsoluteRect, &AbsoluteClippingRect);
|
||||
skin->draw2DRectangle(this, bgColor, AbsoluteRect, &AbsoluteClippingRect);
|
||||
}
|
||||
|
||||
if (Border) {
|
||||
if (Border && IsWritable) {
|
||||
// draw the border
|
||||
skin->draw3DSunkenPane(this, skin->getColor(bgCol), false, Background, AbsoluteRect, &AbsoluteClippingRect);
|
||||
|
||||
calculateFrameRect();
|
||||
skin->draw3DSunkenPane(this, bgColor, false, Background, AbsoluteRect, &AbsoluteClippingRect);
|
||||
}
|
||||
|
||||
calculateFrameRect();
|
||||
|
||||
core::rect<s32> localClipRect = FrameRect;
|
||||
localClipRect.clipAgainst(AbsoluteClippingRect);
|
||||
|
||||
@@ -822,7 +865,7 @@ void CGUIEditBox::draw()
|
||||
}
|
||||
|
||||
// draw cursor
|
||||
if (isEnabled()) {
|
||||
if (isEnabled() && IsWritable) {
|
||||
if (WordWrap || MultiLine) {
|
||||
cursorLine = getLineFromPos(CursorPos);
|
||||
txtLine = &BrokenText[cursorLine];
|
||||
@@ -993,6 +1036,14 @@ bool CGUIEditBox::processMouse(const SEvent &event)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
if (VScrollBar && VScrollBar->isVisible()) {
|
||||
s32 pos = VScrollBar->getTargetPos();
|
||||
s32 step = VScrollBar->getSmallStep();
|
||||
VScrollBar->setPosInterpolated(pos - event.MouseInput.Wheel * step);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case EMIE_MMOUSE_PRESSED_DOWN: {
|
||||
if (!AbsoluteClippingRect.isPointInside(core::position2d<s32>(
|
||||
event.MouseInput.X, event.MouseInput.Y)))
|
||||
@@ -1091,7 +1142,9 @@ void CGUIEditBox::breakText()
|
||||
s32 lastLineStart = 0;
|
||||
s32 size = Text.size();
|
||||
s32 length = 0;
|
||||
s32 elWidth = RelativeRect.getWidth() - 6;
|
||||
s32 elWidth = RelativeRect.getWidth() - 10;
|
||||
if (VScrollBar)
|
||||
elWidth -= VScrollBarWidth;
|
||||
wchar_t c;
|
||||
|
||||
for (s32 i = 0; i < size; ++i) {
|
||||
@@ -1259,7 +1312,7 @@ void CGUIEditBox::inputChar(wchar_t c)
|
||||
|
||||
void CGUIEditBox::inputString(const core::stringw &str)
|
||||
{
|
||||
if (!isEnabled())
|
||||
if (!isEnabled() || !IsWritable)
|
||||
return;
|
||||
|
||||
core::stringw s;
|
||||
@@ -1426,6 +1479,10 @@ void CGUIEditBox::calculateScrollPos()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (VScrollBar) {
|
||||
VScrollBar->setPos(VScrollPos);
|
||||
}
|
||||
}
|
||||
|
||||
void CGUIEditBox::calculateFrameRect()
|
||||
@@ -1440,6 +1497,8 @@ void CGUIEditBox::calculateFrameRect()
|
||||
FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X) + 1;
|
||||
FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y) + 1;
|
||||
}
|
||||
|
||||
updateVScrollBar();
|
||||
}
|
||||
|
||||
//! set text markers
|
||||
@@ -1477,10 +1536,52 @@ void CGUIEditBox::sendGuiEvent(EGUI_EVENT_TYPE type)
|
||||
}
|
||||
}
|
||||
|
||||
//! Returns whether the element takes input from the IME
|
||||
bool CGUIEditBox::acceptsIME()
|
||||
void CGUIEditBox::updateVScrollBar()
|
||||
{
|
||||
return isEnabled();
|
||||
if (!VScrollBar) {
|
||||
return;
|
||||
}
|
||||
|
||||
// OnScrollBarChanged(...)
|
||||
if (VScrollBar->getPos() != VScrollPos) {
|
||||
s32 deltaScrollY = VScrollBar->getPos() - VScrollPos;
|
||||
CurrentTextRect.UpperLeftCorner.Y -= deltaScrollY;
|
||||
CurrentTextRect.LowerRightCorner.Y -= deltaScrollY;
|
||||
|
||||
s32 scrollymax = getTextDimension().Height - FrameRect.getHeight();
|
||||
if (scrollymax != VScrollBar->getMax()) {
|
||||
// manage a newline or a deleted line
|
||||
VScrollBar->setMax(scrollymax);
|
||||
VScrollBar->setPageSize(s32(getTextDimension().Height));
|
||||
calculateScrollPos();
|
||||
} else {
|
||||
// manage a newline or a deleted line
|
||||
VScrollPos = VScrollBar->getPos();
|
||||
}
|
||||
}
|
||||
|
||||
// check if a vertical scrollbar is needed ?
|
||||
if (getTextDimension().Height > (u32)FrameRect.getHeight()) {
|
||||
FrameRect.LowerRightCorner.X -= VScrollBarWidth;
|
||||
|
||||
s32 scrollymax = getTextDimension().Height - FrameRect.getHeight();
|
||||
if (scrollymax != VScrollBar->getMax()) {
|
||||
VScrollBar->setMax(scrollymax);
|
||||
VScrollBar->setPageSize(s32(getTextDimension().Height));
|
||||
}
|
||||
|
||||
if (!VScrollBar->isVisible()) {
|
||||
VScrollBar->setVisible(true);
|
||||
}
|
||||
} else {
|
||||
if (VScrollBar->isVisible()) {
|
||||
VScrollBar->setVisible(false);
|
||||
VScrollPos = 0;
|
||||
VScrollBar->setPos(0);
|
||||
VScrollBar->setMax(1);
|
||||
VScrollBar->setPageSize(s32(getTextDimension().Height));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // end namespace gui
|
||||
|
||||
@@ -59,6 +59,9 @@ class CGUIScrollBar : public IGUIScrollBar
|
||||
//! sets the position of the scrollbar
|
||||
void setPos(s32 pos) override;
|
||||
|
||||
//! sets the content height to scroll
|
||||
void setPageSize(s32 size) override { }
|
||||
|
||||
//! updates the rectangle
|
||||
void updateAbsolutePosition() override;
|
||||
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
#include "IrrlichtDevice.h"
|
||||
#include "ICursorControl.h"
|
||||
#include "os.h"
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
}
|
||||
|
||||
#ifdef _IRR_COMPILE_WITH_X11_
|
||||
|
||||
|
||||
@@ -1408,7 +1408,7 @@ void CIrrDeviceSDL::createKeyMap()
|
||||
// select missing
|
||||
KeyMap.emplace(SDLK_PRINTSCREEN, KEY_PRINT);
|
||||
// execute missing
|
||||
KeyMap.emplace(SDLK_PRINTSCREEN, KEY_SNAPSHOT);
|
||||
// snapshot missing
|
||||
|
||||
KeyMap.emplace(SDLK_INSERT, KEY_INSERT);
|
||||
KeyMap.emplace(SDLK_DELETE, KEY_DELETE);
|
||||
|
||||
@@ -17,11 +17,6 @@
|
||||
#endif
|
||||
|
||||
#include <SDL.h>
|
||||
// DirectFB is removed in SDL3, thou distribution as Alpine currently ships SDL2
|
||||
// with enabled DirectFB, but requiring another fix at a top of SDL2.
|
||||
// We don't need DirectFB in Irrlicht/Minetest, so simply disable it here to prevent issues.
|
||||
#undef SDL_VIDEO_DRIVER_DIRECTFB
|
||||
#include <SDL_syswm.h>
|
||||
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include "CIrrDeviceStub.h"
|
||||
#include "IrrlichtDevice.h"
|
||||
#include "ITexture.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#include "IReadFile.h"
|
||||
#include "irrString.h"
|
||||
|
||||
class CUnicodeConverter;
|
||||
|
||||
namespace io
|
||||
{
|
||||
|
||||
@@ -492,7 +492,6 @@ add_library(IRRGUIOBJ OBJECT
|
||||
CGUIButton.h
|
||||
CGUICheckBox.h
|
||||
CGUIComboBox.h
|
||||
CGUIEditBox.h
|
||||
CGUIEnvironment.h
|
||||
CGUIFileOpenDialog.h
|
||||
CGUIFont.h
|
||||
|
||||
@@ -85,8 +85,16 @@ CNullDriver::CNullDriver(io::IFileSystem *io, const core::dimension2d<u32> &scre
|
||||
InitMaterial2D.ZWriteEnable = video::EZW_OFF;
|
||||
InitMaterial2D.ZBuffer = video::ECFN_DISABLED;
|
||||
InitMaterial2D.UseMipMaps = false;
|
||||
InitMaterial2D.forEachTexture([](auto &tex) {
|
||||
InitMaterial2D.forEachTexture([](video::SMaterialLayer &tex) {
|
||||
// Best preset for 2D pixel-perfect graphics
|
||||
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
|
||||
|
||||
// Best preset for downscaled 2D graphics using trilinear interpolation
|
||||
//tex.MinFilter = video::ETMINF_LINEAR_MIPMAP_LINEAR;
|
||||
// Lower bias -> more crisp images, more jitter
|
||||
// Higher bias -> burry images, less jitter
|
||||
//tex.LODBias = -1;
|
||||
|
||||
tex.MagFilter = video::ETMAGF_NEAREST;
|
||||
tex.TextureWrapU = video::ETC_REPEAT;
|
||||
tex.TextureWrapV = video::ETC_REPEAT;
|
||||
|
||||
@@ -56,15 +56,18 @@ class COpenGLCoreTexture : public ITexture
|
||||
HasMipMaps = Driver->getTextureCreationFlag(ETCF_CREATE_MIP_MAPS);
|
||||
KeepImage = Driver->getTextureCreationFlag(ETCF_ALLOW_MEMORY_COPY);
|
||||
|
||||
if (!name.empty())
|
||||
os::Printer::log("COpenGLCoreTexture: name", name.c_str(), ELL_DEBUG);
|
||||
|
||||
getImageValues(srcImages[0]);
|
||||
if (!InternalFormat)
|
||||
return;
|
||||
|
||||
char lbuf[128];
|
||||
snprintf_irr(lbuf, sizeof(lbuf),
|
||||
"COpenGLCoreTexture: Type = %d Size = %dx%d (%dx%d) ColorFormat = %d (%d)%s -> %#06x %#06x %#06x%s",
|
||||
"COpenGLCoreTexture: Type = %d Size = %dx%d (%dx%d) ColorFormat = %s (%s)%s -> %#06x %#06x %#06x%s",
|
||||
(int)Type, Size.Width, Size.Height, OriginalSize.Width, OriginalSize.Height,
|
||||
(int)ColorFormat, (int)OriginalColorFormat,
|
||||
ColorFormatName(ColorFormat), ColorFormatName(OriginalColorFormat),
|
||||
HasMipMaps ? " +Mip" : "",
|
||||
InternalFormat, PixelFormat, PixelType, Converter ? " (c)" : ""
|
||||
);
|
||||
@@ -100,14 +103,6 @@ class COpenGLCoreTexture : public ITexture
|
||||
GL.TexParameteri(TextureType, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
GL.TexParameteri(TextureType, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
|
||||
if (HasMipMaps) {
|
||||
if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED))
|
||||
GL.Hint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
|
||||
else if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_QUALITY))
|
||||
GL.Hint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
|
||||
else
|
||||
GL.Hint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE);
|
||||
}
|
||||
TEST_GL_ERROR(Driver);
|
||||
|
||||
initTexture(tmpImages->size());
|
||||
@@ -144,9 +139,12 @@ class COpenGLCoreTexture : public ITexture
|
||||
DriverType = Driver->getDriverType();
|
||||
assert(Type != ETT_2D_ARRAY); // not supported by this constructor
|
||||
TextureType = TextureTypeIrrToGL(Type);
|
||||
HasMipMaps = false;
|
||||
HasMipMaps = Driver->getTextureCreationFlag(ETCF_CREATE_RTT_MIP_MAPS);
|
||||
IsRenderTarget = true;
|
||||
|
||||
if (!name.empty())
|
||||
os::Printer::log("COpenGLCoreTexture: name", name.c_str(), ELL_DEBUG);
|
||||
|
||||
OriginalColorFormat = format;
|
||||
|
||||
if (ECF_UNKNOWN == OriginalColorFormat)
|
||||
@@ -157,10 +155,17 @@ class COpenGLCoreTexture : public ITexture
|
||||
OriginalSize = size;
|
||||
Size = OriginalSize;
|
||||
|
||||
if (core::min_(Size.Width, Size.Height) == 0 || core::max_(Size.Width, Size.Height) > Driver->MaxTextureSize) {
|
||||
char buf[32];
|
||||
snprintf_irr(buf, sizeof(buf), "%dx%d", Size.Width, Size.Height);
|
||||
os::Printer::log("Invalid size for render target", buf, ELL_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
Pitch = Size.Width * IImage::getBitsPerPixelFromFormat(ColorFormat) / 8;
|
||||
|
||||
if (!Driver->getColorFormatParameters(ColorFormat, InternalFormat, PixelFormat, PixelType, &Converter)) {
|
||||
os::Printer::log("COpenGLCoreTexture: Color format is not supported", ColorFormatNames[ColorFormat < ECF_UNKNOWN ? ColorFormat : ECF_UNKNOWN], ELL_ERROR);
|
||||
os::Printer::log("COpenGLCoreTexture: Color format is not supported", ColorFormatName(ColorFormat), ELL_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -174,10 +179,11 @@ class COpenGLCoreTexture : public ITexture
|
||||
}
|
||||
#endif
|
||||
|
||||
char lbuf[100];
|
||||
char lbuf[200];
|
||||
snprintf_irr(lbuf, sizeof(lbuf),
|
||||
"COpenGLCoreTexture: RTT Type = %d Size = %dx%d ColorFormat = %d -> %#06x %#06x %#06x%s",
|
||||
(int)Type, Size.Width, Size.Height, (int)ColorFormat,
|
||||
"COpenGLCoreTexture: RTT Type = %d Size = %dx%d (S:%d) ColorFormat = %s%s -> %#06x %#06x %#06x%s",
|
||||
(int)Type, Size.Width, Size.Height, (int)MSAA, ColorFormatName(ColorFormat),
|
||||
HasMipMaps ? " +Mip" : "",
|
||||
InternalFormat, PixelFormat, PixelType, Converter ? " (c)" : ""
|
||||
);
|
||||
os::Printer::log(lbuf, ELL_DEBUG);
|
||||
@@ -384,13 +390,21 @@ class COpenGLCoreTexture : public ITexture
|
||||
if (!HasMipMaps || (Size.Width <= 1 && Size.Height <= 1))
|
||||
return;
|
||||
|
||||
const COpenGLCoreTexture *prevTexture = Driver->getCacheHandler()->getTextureCache().get(0);
|
||||
Driver->getCacheHandler()->getTextureCache().set(0, this);
|
||||
auto &cache = Driver->getCacheHandler()->getTextureCache();
|
||||
const COpenGLCoreTexture *prevTexture = cache.get(0);
|
||||
cache.set(0, this);
|
||||
|
||||
if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED))
|
||||
GL.Hint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
|
||||
else if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_QUALITY))
|
||||
GL.Hint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
|
||||
else
|
||||
GL.Hint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE);
|
||||
|
||||
Driver->irrGlGenerateMipmap(TextureType);
|
||||
TEST_GL_ERROR(Driver);
|
||||
|
||||
Driver->getCacheHandler()->getTextureCache().set(0, prevTexture);
|
||||
cache.set(0, prevTexture);
|
||||
}
|
||||
|
||||
GLenum getOpenGLTextureType() const
|
||||
@@ -458,7 +472,7 @@ class COpenGLCoreTexture : public ITexture
|
||||
ColorFormat = getBestColorFormat(OriginalColorFormat);
|
||||
|
||||
if (!Driver->getColorFormatParameters(ColorFormat, InternalFormat, PixelFormat, PixelType, &Converter)) {
|
||||
os::Printer::log("getImageValues: Color format is not supported", ColorFormatNames[ColorFormat < ECF_UNKNOWN ? ColorFormat : ECF_UNKNOWN], ELL_ERROR);
|
||||
os::Printer::log("getImageValues: Color format is not supported", ColorFormatName(ColorFormat), ELL_ERROR);
|
||||
InternalFormat = 0;
|
||||
return;
|
||||
}
|
||||
@@ -471,7 +485,9 @@ class COpenGLCoreTexture : public ITexture
|
||||
Size = OriginalSize;
|
||||
|
||||
if (Size.Width == 0 || Size.Height == 0) {
|
||||
os::Printer::log("Invalid size of image for texture.", ELL_ERROR);
|
||||
char buf[32];
|
||||
snprintf_irr(buf, sizeof(buf), "%dx%d", Size.Width, Size.Height);
|
||||
os::Printer::log("Invalid size of image for texture", buf, ELL_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -520,6 +536,7 @@ class COpenGLCoreTexture : public ITexture
|
||||
if (HasMipMaps) {
|
||||
levels = core::u32_log2(core::max_(Size.Width, Size.Height)) + 1;
|
||||
}
|
||||
assert(levels > 0);
|
||||
|
||||
// reference: <https://www.khronos.org/opengl/wiki/Texture_Storage>
|
||||
bool use_tex_storage = Driver->getFeature().TexStorage;
|
||||
@@ -543,7 +560,7 @@ class COpenGLCoreTexture : public ITexture
|
||||
TEST_GL_ERROR(Driver);
|
||||
break;
|
||||
case ETT_2D_MS: {
|
||||
GLint max_samples = 0;
|
||||
GLint max_samples = 1;
|
||||
GL.GetIntegerv(GL_MAX_SAMPLES, &max_samples);
|
||||
MSAA = core::min_(MSAA, (u8)max_samples);
|
||||
|
||||
@@ -663,7 +680,8 @@ class COpenGLCoreTexture : public ITexture
|
||||
return GL_TEXTURE_2D_ARRAY;
|
||||
}
|
||||
|
||||
os::Printer::log("COpenGLCoreTexture::TextureTypeIrrToGL unknown texture type", ELL_WARNING);
|
||||
auto s = std::to_string(type);
|
||||
os::Printer::log("COpenGLCoreTexture: unknown texture type", s.c_str(), ELL_WARNING);
|
||||
return GL_TEXTURE_2D;
|
||||
}
|
||||
|
||||
|
||||
@@ -1597,6 +1597,7 @@ inline void COpenGLDriver::getGLTextureMatrix(GLfloat *o, const core::matrix4 &m
|
||||
|
||||
ITexture *COpenGLDriver::createDeviceDependentTexture(const io::path &name, E_TEXTURE_TYPE type, const std::vector<IImage*> &images)
|
||||
{
|
||||
assert(type == ETT_2D);
|
||||
return new COpenGLTexture(name, images, ETT_2D, this);
|
||||
}
|
||||
|
||||
@@ -2613,10 +2614,6 @@ ITexture *COpenGLDriver::addRenderTargetTextureMs(const core::dimension2d<u32> &
|
||||
if (IImage::isCompressedFormat(format))
|
||||
return 0;
|
||||
|
||||
// disable mip-mapping
|
||||
bool generateMipLevels = getTextureCreationFlag(ETCF_CREATE_MIP_MAPS);
|
||||
setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, false);
|
||||
|
||||
bool supportForFBO = (Feature.ColorAttachment > 0);
|
||||
|
||||
core::dimension2du destSize(size);
|
||||
@@ -2630,9 +2627,6 @@ ITexture *COpenGLDriver::addRenderTargetTextureMs(const core::dimension2d<u32> &
|
||||
addTexture(renderTargetTexture);
|
||||
renderTargetTexture->drop();
|
||||
|
||||
// restore mip-mapping
|
||||
setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, generateMipLevels);
|
||||
|
||||
return renderTargetTexture;
|
||||
}
|
||||
|
||||
@@ -2642,10 +2636,6 @@ ITexture *COpenGLDriver::addRenderTargetTextureCubemap(const u32 sideLen, const
|
||||
if (IImage::isCompressedFormat(format))
|
||||
return 0;
|
||||
|
||||
// disable mip-mapping
|
||||
bool generateMipLevels = getTextureCreationFlag(ETCF_CREATE_MIP_MAPS);
|
||||
setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, false);
|
||||
|
||||
bool supportForFBO = (Feature.ColorAttachment > 0);
|
||||
|
||||
const core::dimension2d<u32> size(sideLen, sideLen);
|
||||
@@ -2660,9 +2650,6 @@ ITexture *COpenGLDriver::addRenderTargetTextureCubemap(const u32 sideLen, const
|
||||
addTexture(renderTargetTexture);
|
||||
renderTargetTexture->drop();
|
||||
|
||||
// restore mip-mapping
|
||||
setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, generateMipLevels);
|
||||
|
||||
return renderTargetTexture;
|
||||
}
|
||||
|
||||
@@ -2681,6 +2668,13 @@ bool COpenGLDriver::setRenderTargetEx(IRenderTarget *target, u16 clearFlag, SCol
|
||||
return false;
|
||||
}
|
||||
|
||||
if (CurrentRenderTarget) {
|
||||
// Update mip-map of the generated texture, if enabled.
|
||||
auto textures = CurrentRenderTarget->getTexture();
|
||||
for (size_t i = 0; i < textures.size(); ++i)
|
||||
textures[i]->regenerateMipMapLevels();
|
||||
}
|
||||
|
||||
bool supportForFBO = (Feature.ColorAttachment > 0);
|
||||
|
||||
core::dimension2d<u32> destRenderTargetSize(0, 0);
|
||||
|
||||
@@ -6,10 +6,6 @@
|
||||
|
||||
#include "SIrrCreationParameters.h"
|
||||
|
||||
class CIrrDeviceWin32;
|
||||
class CIrrDeviceLinux;
|
||||
class CIrrDeviceSDL;
|
||||
class CIrrDeviceMacOSX;
|
||||
|
||||
#ifdef _IRR_COMPILE_WITH_OPENGL_
|
||||
|
||||
|
||||
@@ -12,10 +12,6 @@
|
||||
#include "irrArray.h"
|
||||
#include "IMeshLoader.h"
|
||||
|
||||
namespace io
|
||||
{
|
||||
class IFileSystem;
|
||||
}
|
||||
namespace scene
|
||||
{
|
||||
class IMeshCache;
|
||||
|
||||
@@ -14,7 +14,6 @@ class IReadFile;
|
||||
} // end namespace io
|
||||
namespace scene
|
||||
{
|
||||
class IMeshManipulator;
|
||||
|
||||
//! Meshloader capable of loading x meshes.
|
||||
class CXMeshFileLoader : public IMeshLoader
|
||||
|
||||
@@ -22,7 +22,6 @@ namespace video
|
||||
|
||||
// Forward declarations.
|
||||
|
||||
class COpenGLCoreFeature;
|
||||
|
||||
template <class TOpenGLDriver>
|
||||
class COpenGLCoreTexture;
|
||||
@@ -38,7 +37,6 @@ typedef COpenGLCoreTexture<COpenGL3DriverBase> COpenGL3Texture;
|
||||
typedef COpenGLCoreRenderTarget<COpenGL3DriverBase, COpenGL3Texture> COpenGL3RenderTarget;
|
||||
typedef COpenGLCoreCacheHandler<COpenGL3DriverBase, COpenGL3Texture> COpenGL3CacheHandler;
|
||||
|
||||
class OpenGLVBO;
|
||||
|
||||
enum OpenGLSpec : u8
|
||||
{
|
||||
|
||||
@@ -139,7 +139,7 @@ void COpenGL3DriverBase::debugCb(GLenum source, GLenum type, GLuint id, GLenum s
|
||||
ll = ELL_ERROR;
|
||||
else if (severity == GL_DEBUG_SEVERITY_MEDIUM)
|
||||
ll = ELL_WARNING;
|
||||
char buf[300];
|
||||
char buf[512];
|
||||
snprintf_irr(buf, sizeof(buf), "%04x %04x %.*s", source, type, length, message);
|
||||
os::Printer::log("GL", buf, ll);
|
||||
}
|
||||
@@ -266,7 +266,6 @@ bool COpenGL3DriverBase::genericDriverInit(const core::dimension2d<u32> &screenS
|
||||
|
||||
GL.ClearDepthf(1.0f);
|
||||
|
||||
GL.Hint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
|
||||
GL.FrontFace(GL_CW);
|
||||
|
||||
// create material renderers
|
||||
@@ -278,9 +277,6 @@ bool COpenGL3DriverBase::genericDriverInit(const core::dimension2d<u32> &screenS
|
||||
// set fog mode
|
||||
setFog(FogColor, FogType, FogStart, FogEnd, FogDensity, PixelFog, RangeFog);
|
||||
|
||||
// create matrix for flipping textures
|
||||
TextureFlipMatrix.buildTextureTransform(0.0f, core::vector2df(0, 0), core::vector2df(0, 1.0f), core::vector2df(1.0f, -1.0f));
|
||||
|
||||
// We need to reset once more at the beginning of the first rendering.
|
||||
// This fixes problems with intermediate changes to the material during texture load.
|
||||
ResetRenderStates = true;
|
||||
@@ -1666,26 +1662,15 @@ ITexture *COpenGL3DriverBase::addRenderTargetTexture(const core::dimension2d<u32
|
||||
ITexture *COpenGL3DriverBase::addRenderTargetTextureMs(const core::dimension2d<u32> &size, u8 msaa,
|
||||
const io::path &name, const ECOLOR_FORMAT format)
|
||||
{
|
||||
// disable mip-mapping
|
||||
bool generateMipLevels = getTextureCreationFlag(ETCF_CREATE_MIP_MAPS);
|
||||
setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, false);
|
||||
|
||||
COpenGL3Texture *renderTargetTexture = new COpenGL3Texture(name, size, msaa > 0 ? ETT_2D_MS : ETT_2D, format, this, msaa);
|
||||
addTexture(renderTargetTexture);
|
||||
renderTargetTexture->drop();
|
||||
|
||||
// restore mip-mapping
|
||||
setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, generateMipLevels);
|
||||
|
||||
return renderTargetTexture;
|
||||
}
|
||||
|
||||
ITexture *COpenGL3DriverBase::addRenderTargetTextureCubemap(const u32 sideLen, const io::path &name, const ECOLOR_FORMAT format)
|
||||
{
|
||||
// disable mip-mapping
|
||||
bool generateMipLevels = getTextureCreationFlag(ETCF_CREATE_MIP_MAPS);
|
||||
setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, false);
|
||||
|
||||
bool supportForFBO = (Feature.ColorAttachment > 0);
|
||||
|
||||
const core::dimension2d<u32> size(sideLen, sideLen);
|
||||
@@ -1700,9 +1685,6 @@ ITexture *COpenGL3DriverBase::addRenderTargetTextureCubemap(const u32 sideLen, c
|
||||
addTexture(renderTargetTexture);
|
||||
renderTargetTexture->drop();
|
||||
|
||||
// restore mip-mapping
|
||||
setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, generateMipLevels);
|
||||
|
||||
return renderTargetTexture;
|
||||
}
|
||||
|
||||
@@ -1719,6 +1701,13 @@ bool COpenGL3DriverBase::setRenderTargetEx(IRenderTarget *target, u16 clearFlag,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (CurrentRenderTarget) {
|
||||
// Update mip-map of the generated texture, if enabled.
|
||||
auto textures = CurrentRenderTarget->getTexture();
|
||||
for (size_t i = 0; i < textures.size(); ++i)
|
||||
textures[i]->regenerateMipMapLevels();
|
||||
}
|
||||
|
||||
core::dimension2d<u32> destRenderTargetSize(0, 0);
|
||||
|
||||
if (target) {
|
||||
|
||||
@@ -20,7 +20,6 @@ namespace video
|
||||
{
|
||||
struct VertexType;
|
||||
|
||||
class COpenGL3FixedPipelineRenderer;
|
||||
class COpenGL3Renderer2D;
|
||||
|
||||
class COpenGL3DriverBase : public CNullDriver, public IMaterialRendererServices, public COpenGL3ExtensionHandler
|
||||
@@ -325,15 +324,13 @@ class COpenGL3DriverBase : public CNullDriver, public IMaterialRendererServices,
|
||||
bool LockRenderStateMode;
|
||||
u8 AntiAlias;
|
||||
|
||||
core::matrix4 TextureFlipMatrix;
|
||||
|
||||
using FColorConverter = void (*)(const void *source, s32 count, void *dest);
|
||||
struct STextureFormatInfo
|
||||
{
|
||||
GLenum InternalFormat;
|
||||
GLenum PixelFormat;
|
||||
GLenum PixelType;
|
||||
FColorConverter Converter;
|
||||
GLenum InternalFormat = 0;
|
||||
GLenum PixelFormat = 0;
|
||||
GLenum PixelType = 0;
|
||||
FColorConverter Converter = nullptr;
|
||||
};
|
||||
STextureFormatInfo TextureFormats[ECF_UNKNOWN] = {};
|
||||
|
||||
|
||||
@@ -588,13 +588,12 @@
|
||||
|
||||
# 3D support.
|
||||
# Currently supported:
|
||||
# - none: no 3d output.
|
||||
# - anaglyph: cyan/magenta color 3d.
|
||||
# - interlaced: odd/even line based polarization screen support.
|
||||
# - topbottom: split screen top/bottom.
|
||||
# - sidebyside: split screen side by side.
|
||||
# - crossview: Cross-eyed 3d
|
||||
# type: enum values: none, anaglyph, interlaced, topbottom, sidebyside, crossview
|
||||
# - none: no 3D output
|
||||
# - anaglyph: cyan/magenta color 3D
|
||||
# - topbottom: split screen top/bottom
|
||||
# - sidebyside: split screen side-by-side
|
||||
# - crossview: cross-eyed 3D
|
||||
# type: enum values: none, anaglyph, topbottom, sidebyside, crossview
|
||||
# 3d_mode = none
|
||||
|
||||
# Strength of 3D mode parallax.
|
||||
@@ -3027,6 +3026,16 @@
|
||||
# type: bool
|
||||
# profiler.load = false
|
||||
|
||||
# Disable if you only want to instrument with Tracy.
|
||||
# type: bool
|
||||
# profiler.measure = true
|
||||
|
||||
# Capture Tracy zones with the profiler's instrumentation.
|
||||
# You need to build with Tracy to use this, see doc/developing/profiling.md
|
||||
# for details.
|
||||
# type: bool
|
||||
# profiler.tracy = false
|
||||
|
||||
# The default format in which profiles are being saved,
|
||||
# when calling `/profiler save [format]` without format.
|
||||
# type: enum values: txt, csv, lua, json, json_pretty
|
||||
|
||||
@@ -174,6 +174,6 @@
|
||||
<update_contact>celeron55@gmail.com</update_contact>
|
||||
|
||||
<releases>
|
||||
<release date="2025-08-01" version="5.13.0"/>
|
||||
<release date="2025-10-05" version="5.14.0"/>
|
||||
</releases>
|
||||
</component>
|
||||
|
||||
226
po/ar/luanti.po
226
po/ar/luanti.po
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: minetest\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-07-11 19:59+0200\n"
|
||||
"POT-Creation-Date: 2025-09-23 19:19+0200\n"
|
||||
"PO-Revision-Date: 2024-05-21 09:01+0000\n"
|
||||
"Last-Translator: Jamil Mohamad Alhussein <jamilmohamadalhoseen@gmail.com>\n"
|
||||
"Language-Team: Arabic <https://hosted.weblate.org/projects/minetest/minetest/"
|
||||
@@ -1249,10 +1249,6 @@ msgstr ""
|
||||
msgid "New"
|
||||
msgstr "جديد"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "No world created or selected!"
|
||||
msgstr "لم تنشئ او تحدد عالما!"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "Play Game"
|
||||
msgstr "إلعب"
|
||||
@@ -1864,10 +1860,6 @@ msgstr "محلل البيانات مخفي"
|
||||
msgid "Profiler shown (page %d of %d)"
|
||||
msgstr "محلل البيانات ظاهر ( صفحة %d من %d)"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Apps"
|
||||
msgstr "تطبيقات"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Backspace"
|
||||
msgstr "Backspace"
|
||||
@@ -1902,49 +1894,19 @@ msgid "Down Arrow"
|
||||
msgstr "السهم لأسفل"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "End"
|
||||
msgstr "End"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Erase EOF"
|
||||
msgstr "مسح EOF"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Execute"
|
||||
msgstr "شغّل"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
msgstr "مساعدة"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Home"
|
||||
msgstr "الرئيسية"
|
||||
#, fuzzy
|
||||
msgid "End Key"
|
||||
msgstr "Menu"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Accept"
|
||||
msgstr "IME Accept"
|
||||
msgid "Help Key"
|
||||
msgstr "إحذف"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Convert"
|
||||
msgstr "IME Convert"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Escape"
|
||||
msgstr "IME Escape"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Mode Change"
|
||||
msgstr "IME Mode Change"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Nonconvert"
|
||||
msgstr "IME Nonconvert"
|
||||
msgid "Home Key"
|
||||
msgstr "كبِر"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
@@ -1957,8 +1919,9 @@ msgid "Left Arrow"
|
||||
msgstr "Left Control"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Button"
|
||||
msgstr "الزر الأيسر"
|
||||
#, fuzzy
|
||||
msgid "Left Click"
|
||||
msgstr "Left Control"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
@@ -1974,20 +1937,28 @@ msgstr "القائمة اليسرى"
|
||||
msgid "Left Shift"
|
||||
msgstr "Left Shift"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Left Windows"
|
||||
msgstr "Left Windows"
|
||||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Menu Key"
|
||||
msgstr "Menu"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
msgstr "الزر الأوسط"
|
||||
msgid "Middle Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
@@ -2069,11 +2040,6 @@ msgstr "Numpad 8"
|
||||
msgid "Numpad 9"
|
||||
msgstr "Numpad 9"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "OEM Clear"
|
||||
msgstr "OEM Clear"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Page Down"
|
||||
@@ -2112,8 +2078,9 @@ msgid "Right Arrow"
|
||||
msgstr "Right Control"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Button"
|
||||
msgstr "الزر الايمن"
|
||||
#, fuzzy
|
||||
msgid "Right Click"
|
||||
msgstr "Right Control"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
@@ -2130,6 +2097,7 @@ msgstr "Right Menu"
|
||||
msgid "Right Shift"
|
||||
msgstr "Right Shift"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Right Windows"
|
||||
@@ -2140,56 +2108,30 @@ msgstr "Right Windows"
|
||||
msgid "Scroll Lock"
|
||||
msgstr "Scroll Lock"
|
||||
|
||||
#. ~ Key name
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Select"
|
||||
msgstr "Select"
|
||||
msgid "Select Key"
|
||||
msgstr "إحذف"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Shift Key"
|
||||
msgstr "Shift"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Sleep"
|
||||
msgstr "Sleep"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Snapshot"
|
||||
msgstr "Snapshot"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Space"
|
||||
msgstr "مسافة"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Tab"
|
||||
msgstr "Tab"
|
||||
msgid "Tab Key"
|
||||
msgstr "مفتاح الكسر"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Up Arrow"
|
||||
msgstr "سهم للاعلى"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "X Button 1"
|
||||
msgstr "X Button 1"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "X Button 2"
|
||||
msgstr "X Button 2"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Zoom Key"
|
||||
msgstr "كبِر"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
msgstr "الخريطة المصغرة مخفية"
|
||||
@@ -2598,12 +2540,11 @@ msgstr ""
|
||||
msgid ""
|
||||
"3D support.\n"
|
||||
"Currently supported:\n"
|
||||
"- none: no 3d output.\n"
|
||||
"- anaglyph: cyan/magenta color 3d.\n"
|
||||
"- interlaced: odd/even line based polarization screen support.\n"
|
||||
"- topbottom: split screen top/bottom.\n"
|
||||
"- sidebyside: split screen side by side.\n"
|
||||
"- crossview: Cross-eyed 3d"
|
||||
"- none: no 3D output\n"
|
||||
"- anaglyph: cyan/magenta color 3D\n"
|
||||
"- topbottom: split screen top/bottom\n"
|
||||
"- sidebyside: split screen side-by-side\n"
|
||||
"- crossview: cross-eyed 3D"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
@@ -2943,6 +2884,17 @@ msgstr "انسيابية حركة الكامير"
|
||||
msgid "Camera smoothing in cinematic mode"
|
||||
msgstr "انسيابية حركة الكامير في الوضع السنيمائي"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Capture Tracy zones"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Capture Tracy zones with the profiler's instrumentation.\n"
|
||||
"You need to build with Tracy to use this, see doc/developing/profiling.md\n"
|
||||
"for details."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise"
|
||||
msgstr ""
|
||||
@@ -3449,6 +3401,10 @@ msgstr ""
|
||||
msgid "Developer Options"
|
||||
msgstr "المطورون الرئيسيون"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disable if you only want to instrument with Tracy."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disallow empty passwords"
|
||||
msgstr ""
|
||||
@@ -5199,6 +5155,10 @@ msgstr ""
|
||||
msgid "Maximum users"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Measure time samples"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Message of the day"
|
||||
msgstr ""
|
||||
@@ -7097,6 +7057,80 @@ msgstr ""
|
||||
msgid "cURL parallel limit"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "تطبيقات"
|
||||
|
||||
#~ msgid "End"
|
||||
#~ msgstr "End"
|
||||
|
||||
#~ msgid "Erase EOF"
|
||||
#~ msgstr "مسح EOF"
|
||||
|
||||
#~ msgid "Execute"
|
||||
#~ msgstr "شغّل"
|
||||
|
||||
#~ msgid "Help"
|
||||
#~ msgstr "مساعدة"
|
||||
|
||||
#~ msgid "Home"
|
||||
#~ msgstr "الرئيسية"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Key for toggling cinematic mode."
|
||||
#~ msgstr "انسيابية حركة الكامير في الوضع السنيمائي"
|
||||
#~ msgid "IME Accept"
|
||||
#~ msgstr "IME Accept"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Convert"
|
||||
#~ msgstr "IME Convert"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Escape"
|
||||
#~ msgstr "IME Escape"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Mode Change"
|
||||
#~ msgstr "IME Mode Change"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Nonconvert"
|
||||
#~ msgstr "IME Nonconvert"
|
||||
|
||||
#~ msgid "Left Button"
|
||||
#~ msgstr "الزر الأيسر"
|
||||
|
||||
#~ msgid "Middle Button"
|
||||
#~ msgstr "الزر الأوسط"
|
||||
|
||||
#~ msgid "No world created or selected!"
|
||||
#~ msgstr "لم تنشئ او تحدد عالما!"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "OEM Clear"
|
||||
#~ msgstr "OEM Clear"
|
||||
|
||||
#~ msgid "Right Button"
|
||||
#~ msgstr "الزر الايمن"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Select"
|
||||
#~ msgstr "Select"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Sleep"
|
||||
#~ msgstr "Sleep"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Snapshot"
|
||||
#~ msgstr "Snapshot"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "X Button 1"
|
||||
#~ msgstr "X Button 1"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "X Button 2"
|
||||
#~ msgstr "X Button 2"
|
||||
|
||||
6764
po/az/luanti.po
Normal file
6764
po/az/luanti.po
Normal file
File diff suppressed because it is too large
Load Diff
145
po/bar/luanti.po
145
po/bar/luanti.po
@@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luanti\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-07-11 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-06-08 13:07+0000\n"
|
||||
"Last-Translator: gogu <sidtirouluca@proton.me>\n"
|
||||
"POT-Creation-Date: 2025-09-23 19:19+0200\n"
|
||||
"PO-Revision-Date: 2025-08-02 09:02+0000\n"
|
||||
"Last-Translator: Krock <mk939@ymail.com>\n"
|
||||
"Language-Team: Bavarian <https://hosted.weblate.org/projects/minetest/"
|
||||
"minetest/bar/>\n"
|
||||
"Language: bar\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.12-dev\n"
|
||||
"X-Generator: Weblate 5.13-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
@@ -1202,10 +1202,6 @@ msgstr ""
|
||||
msgid "New"
|
||||
msgstr "Noi"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "No world created or selected!"
|
||||
msgstr ""
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "Play Game"
|
||||
msgstr ""
|
||||
@@ -1785,10 +1781,6 @@ msgstr ""
|
||||
msgid "Profiler shown (page %d of %d)"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Apps"
|
||||
msgstr "Programme"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Backspace"
|
||||
msgstr ""
|
||||
@@ -1819,45 +1811,19 @@ msgid "Down Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "End"
|
||||
msgstr "Ende"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Erase EOF"
|
||||
msgid "End Key"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Execute"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "Help Key"
|
||||
msgstr "Hilfe"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Home"
|
||||
#, fuzzy
|
||||
msgid "Home Key"
|
||||
msgstr "Hoam"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Accept"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Convert"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Escape"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Mode Change"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Nonconvert"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Insert"
|
||||
msgstr "Infügn"
|
||||
@@ -1867,7 +1833,7 @@ msgid "Left Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Button"
|
||||
msgid "Left Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
@@ -1882,17 +1848,25 @@ msgstr ""
|
||||
msgid "Left Shift"
|
||||
msgstr ""
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Windows"
|
||||
msgstr ""
|
||||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Menu Key"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
msgid "Middle Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
@@ -1959,10 +1933,6 @@ msgstr ""
|
||||
msgid "Numpad 9"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "OEM Clear"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Page Down"
|
||||
msgstr ""
|
||||
@@ -1994,7 +1964,7 @@ msgid "Right Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Button"
|
||||
msgid "Right Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
@@ -2009,6 +1979,7 @@ msgstr ""
|
||||
msgid "Right Shift"
|
||||
msgstr ""
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Windows"
|
||||
msgstr ""
|
||||
@@ -2017,47 +1988,27 @@ msgstr ""
|
||||
msgid "Scroll Lock"
|
||||
msgstr ""
|
||||
|
||||
#. ~ Key name
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Select"
|
||||
#, fuzzy
|
||||
msgid "Select Key"
|
||||
msgstr "Auswouln"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Shift Key"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Sleep"
|
||||
msgstr "Schlouf"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Space"
|
||||
msgstr "Laartaste"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Tab"
|
||||
msgstr "Tabulator"
|
||||
msgid "Tab Key"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Up Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Zoom Key"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
msgstr ""
|
||||
@@ -2287,7 +2238,7 @@ msgstr ""
|
||||
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
|
||||
#: src/script/lua_api/l_mainmenu.cpp
|
||||
msgid "LANG_CODE"
|
||||
msgstr ""
|
||||
msgstr "bar"
|
||||
|
||||
#: src/network/clientpackethandler.cpp
|
||||
msgid ""
|
||||
@@ -2449,12 +2400,11 @@ msgstr ""
|
||||
msgid ""
|
||||
"3D support.\n"
|
||||
"Currently supported:\n"
|
||||
"- none: no 3d output.\n"
|
||||
"- anaglyph: cyan/magenta color 3d.\n"
|
||||
"- interlaced: odd/even line based polarization screen support.\n"
|
||||
"- topbottom: split screen top/bottom.\n"
|
||||
"- sidebyside: split screen side by side.\n"
|
||||
"- crossview: Cross-eyed 3d"
|
||||
"- none: no 3D output\n"
|
||||
"- anaglyph: cyan/magenta color 3D\n"
|
||||
"- topbottom: split screen top/bottom\n"
|
||||
"- sidebyside: split screen side-by-side\n"
|
||||
"- crossview: cross-eyed 3D"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
@@ -2775,6 +2725,17 @@ msgstr ""
|
||||
msgid "Camera smoothing in cinematic mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Capture Tracy zones"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Capture Tracy zones with the profiler's instrumentation.\n"
|
||||
"You need to build with Tracy to use this, see doc/developing/profiling.md\n"
|
||||
"for details."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise"
|
||||
msgstr ""
|
||||
@@ -3255,6 +3216,10 @@ msgstr ""
|
||||
msgid "Developer Options"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disable if you only want to instrument with Tracy."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disallow empty passwords"
|
||||
msgstr ""
|
||||
@@ -4932,6 +4897,10 @@ msgstr ""
|
||||
msgid "Maximum users"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Measure time samples"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Message of the day"
|
||||
msgstr ""
|
||||
@@ -6796,3 +6765,15 @@ msgstr ""
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "cURL parallel limit"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Programme"
|
||||
|
||||
#~ msgid "End"
|
||||
#~ msgstr "Ende"
|
||||
|
||||
#~ msgid "Sleep"
|
||||
#~ msgstr "Schlouf"
|
||||
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tabulator"
|
||||
|
||||
224
po/be/luanti.po
224
po/be/luanti.po
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Belarusian (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-07-11 19:59+0200\n"
|
||||
"POT-Creation-Date: 2025-09-23 19:19+0200\n"
|
||||
"PO-Revision-Date: 2019-11-19 23:04+0000\n"
|
||||
"Last-Translator: Viktar Vauchkevich <victorenator@gmail.com>\n"
|
||||
"Language-Team: Belarusian <https://hosted.weblate.org/projects/minetest/"
|
||||
@@ -1275,10 +1275,6 @@ msgstr ""
|
||||
msgid "New"
|
||||
msgstr "Новы"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "No world created or selected!"
|
||||
msgstr "Няма створанага альбо абранага свету!"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "Play Game"
|
||||
msgstr "Гуляць"
|
||||
@@ -1896,10 +1892,6 @@ msgstr "Прафіліроўшчык схаваны"
|
||||
msgid "Profiler shown (page %d of %d)"
|
||||
msgstr "Прафіліроўшчык паказваецца (старонка %d з %d)"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Apps"
|
||||
msgstr "Праграмы"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Backspace"
|
||||
msgstr "Backspace"
|
||||
@@ -1934,44 +1926,19 @@ msgid "Down Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "End"
|
||||
msgstr "End"
|
||||
#, fuzzy
|
||||
msgid "End Key"
|
||||
msgstr "Меню"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Erase EOF"
|
||||
msgstr "Ачысціць EOF"
|
||||
#, fuzzy
|
||||
msgid "Help Key"
|
||||
msgstr "Выдаліць"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Execute"
|
||||
msgstr "Выканаць"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
msgstr "Даведка"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Accept"
|
||||
msgstr "IME Accept"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Convert"
|
||||
msgstr "Пераўтварыць IME"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Escape"
|
||||
msgstr "IME Escape"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Mode Change"
|
||||
msgstr "Змяніць рэжым IME"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Nonconvert"
|
||||
msgstr "IME без пераўтварэння"
|
||||
#, fuzzy
|
||||
msgid "Home Key"
|
||||
msgstr "Павялічыць"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Insert"
|
||||
@@ -1983,8 +1950,9 @@ msgid "Left Arrow"
|
||||
msgstr "Левы Ctrl"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Button"
|
||||
msgstr "Левая кнопка"
|
||||
#, fuzzy
|
||||
msgid "Left Click"
|
||||
msgstr "Левы Ctrl"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Control"
|
||||
@@ -1998,19 +1966,27 @@ msgstr "Левае меню"
|
||||
msgid "Left Shift"
|
||||
msgstr "Левы Shift"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Windows"
|
||||
msgstr "Левы Super"
|
||||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Menu Key"
|
||||
msgstr "Меню"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
msgstr "Сярэдняя кнопка"
|
||||
msgid "Middle Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Num Lock"
|
||||
@@ -2076,10 +2052,6 @@ msgstr "Дадат. 8"
|
||||
msgid "Numpad 9"
|
||||
msgstr "Дадат. 9"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "OEM Clear"
|
||||
msgstr "Ачысціць OEM"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Page Down"
|
||||
@@ -2116,8 +2088,9 @@ msgid "Right Arrow"
|
||||
msgstr "Правы Ctrl"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Button"
|
||||
msgstr "Правая кнопка"
|
||||
#, fuzzy
|
||||
msgid "Right Click"
|
||||
msgstr "Правы Ctrl"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Control"
|
||||
@@ -2131,6 +2104,7 @@ msgstr "Правае меню"
|
||||
msgid "Right Shift"
|
||||
msgstr "Правы Shift"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Windows"
|
||||
msgstr "Правы Super"
|
||||
@@ -2139,49 +2113,29 @@ msgstr "Правы Super"
|
||||
msgid "Scroll Lock"
|
||||
msgstr "Scroll Lock"
|
||||
|
||||
#. ~ Key name
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Select"
|
||||
msgstr "Абраць"
|
||||
#, fuzzy
|
||||
msgid "Select Key"
|
||||
msgstr "Выдаліць"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Shift Key"
|
||||
msgstr "Shift"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Sleep"
|
||||
msgstr "Сон"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Snapshot"
|
||||
msgstr "Здымак"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Space"
|
||||
msgstr "Прагал"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Tab"
|
||||
msgstr "Табуляцыя"
|
||||
#, fuzzy
|
||||
msgid "Tab Key"
|
||||
msgstr "Клавіша \"красціся\""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Up Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 1"
|
||||
msgstr "Дадат. кнопка 1"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 2"
|
||||
msgstr "Дадат. кнопка 2"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Zoom Key"
|
||||
msgstr "Павялічыць"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
msgstr "Мінімапа схаваная"
|
||||
@@ -2608,12 +2562,11 @@ msgstr "3D-шум, што вызначае колькасць падзямелл
|
||||
msgid ""
|
||||
"3D support.\n"
|
||||
"Currently supported:\n"
|
||||
"- none: no 3d output.\n"
|
||||
"- anaglyph: cyan/magenta color 3d.\n"
|
||||
"- interlaced: odd/even line based polarization screen support.\n"
|
||||
"- topbottom: split screen top/bottom.\n"
|
||||
"- sidebyside: split screen side by side.\n"
|
||||
"- crossview: Cross-eyed 3d"
|
||||
"- none: no 3D output\n"
|
||||
"- anaglyph: cyan/magenta color 3D\n"
|
||||
"- topbottom: split screen top/bottom\n"
|
||||
"- sidebyside: split screen side-by-side\n"
|
||||
"- crossview: cross-eyed 3D"
|
||||
msgstr ""
|
||||
"3D-падтрымка.\n"
|
||||
"Зараз падтрымліваюцца:\n"
|
||||
@@ -2726,8 +2679,8 @@ msgstr ""
|
||||
"Клавіша \"красціся\".\n"
|
||||
"Таксама выкарыстоўваецца для спускання і апускання ў ваду, калі "
|
||||
"aux1_descends выключана.\n"
|
||||
"Глядзіце http://irrlicht.sourceforge.net/docu/namespaceirr."
|
||||
"html#a54da2a0e231901735e3da1b0edf72eb3"
|
||||
"Глядзіце http://irrlicht.sourceforge.net/docu/"
|
||||
"namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
@@ -2990,6 +2943,17 @@ msgstr "Згладжванне камеры"
|
||||
msgid "Camera smoothing in cinematic mode"
|
||||
msgstr "Згладжванне камеры ў кінематаграфічным рэжыме"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Capture Tracy zones"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Capture Tracy zones with the profiler's instrumentation.\n"
|
||||
"You need to build with Tracy to use this, see doc/developing/profiling.md\n"
|
||||
"for details."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise"
|
||||
msgstr "Шум пячор"
|
||||
@@ -3517,6 +3481,10 @@ msgstr ""
|
||||
msgid "Developer Options"
|
||||
msgstr "Ітэрацыі"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disable if you only want to instrument with Tracy."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disallow empty passwords"
|
||||
msgstr "Забараніць пустыя паролі"
|
||||
@@ -5473,6 +5441,10 @@ msgstr ""
|
||||
msgid "Maximum users"
|
||||
msgstr "Максімальная колькасць карыстальнікаў"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Measure time samples"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Message of the day"
|
||||
msgstr "Паведамленне дня"
|
||||
@@ -7563,8 +7535,8 @@ msgid "Will also disable autoforward, when active."
|
||||
msgstr ""
|
||||
"Клавіша для руху назад.\n"
|
||||
"Таксама выключае аўтабег, калі той актыўны.\n"
|
||||
"Глядзіце http://irrlicht.sourceforge.net/docu/namespaceirr."
|
||||
"html#a54da2a0e231901735e3da1b0edf72eb3"
|
||||
"Глядзіце http://irrlicht.sourceforge.net/docu/"
|
||||
"namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Window maximized"
|
||||
@@ -7680,14 +7652,68 @@ msgstr "Таймаўт cURL"
|
||||
msgid "cURL parallel limit"
|
||||
msgstr "Ліміт адначасовых злучэнняў cURL"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Key for taking screenshots."
|
||||
#~ msgstr "Фармат здымкаў экрана."
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Праграмы"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Key for toggling cinematic mode."
|
||||
#~ msgstr "Згладжванне камеры ў кінематаграфічным рэжыме"
|
||||
#~ msgid "End"
|
||||
#~ msgstr "End"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Key for toggling fullscreen mode."
|
||||
#~ msgstr "Поўнаэкранны рэжым."
|
||||
#~ msgid "Erase EOF"
|
||||
#~ msgstr "Ачысціць EOF"
|
||||
|
||||
#~ msgid "Execute"
|
||||
#~ msgstr "Выканаць"
|
||||
|
||||
#~ msgid "Help"
|
||||
#~ msgstr "Даведка"
|
||||
|
||||
#~ msgid "Home"
|
||||
#~ msgstr "Home"
|
||||
|
||||
#~ msgid "IME Accept"
|
||||
#~ msgstr "IME Accept"
|
||||
|
||||
#~ msgid "IME Convert"
|
||||
#~ msgstr "Пераўтварыць IME"
|
||||
|
||||
#~ msgid "IME Escape"
|
||||
#~ msgstr "IME Escape"
|
||||
|
||||
#~ msgid "IME Mode Change"
|
||||
#~ msgstr "Змяніць рэжым IME"
|
||||
|
||||
#~ msgid "IME Nonconvert"
|
||||
#~ msgstr "IME без пераўтварэння"
|
||||
|
||||
#~ msgid "Left Button"
|
||||
#~ msgstr "Левая кнопка"
|
||||
|
||||
#~ msgid "Middle Button"
|
||||
#~ msgstr "Сярэдняя кнопка"
|
||||
|
||||
#~ msgid "No world created or selected!"
|
||||
#~ msgstr "Няма створанага альбо абранага свету!"
|
||||
|
||||
#~ msgid "OEM Clear"
|
||||
#~ msgstr "Ачысціць OEM"
|
||||
|
||||
#~ msgid "Right Button"
|
||||
#~ msgstr "Правая кнопка"
|
||||
|
||||
#~ msgid "Select"
|
||||
#~ msgstr "Абраць"
|
||||
|
||||
#~ msgid "Sleep"
|
||||
#~ msgstr "Сон"
|
||||
|
||||
#~ msgid "Snapshot"
|
||||
#~ msgstr "Здымак"
|
||||
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Табуляцыя"
|
||||
|
||||
#~ msgid "X Button 1"
|
||||
#~ msgstr "Дадат. кнопка 1"
|
||||
|
||||
#~ msgid "X Button 2"
|
||||
#~ msgstr "Дадат. кнопка 2"
|
||||
|
||||
1823
po/bg/luanti.po
1823
po/bg/luanti.po
File diff suppressed because it is too large
Load Diff
361
po/br/luanti.po
361
po/br/luanti.po
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luanti\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-07-11 19:59+0200\n"
|
||||
"PO-Revision-Date: 2025-04-22 22:19+0000\n"
|
||||
"POT-Creation-Date: 2025-09-23 19:19+0200\n"
|
||||
"PO-Revision-Date: 2025-09-07 00:02+0000\n"
|
||||
"Last-Translator: Divarrek <a.guechoum@proton.me>\n"
|
||||
"Language-Team: Breton <https://hosted.weblate.org/projects/minetest/minetest/"
|
||||
"br/>\n"
|
||||
@@ -21,11 +21,11 @@ msgstr ""
|
||||
"&& n % 100 != 92) ? 1 : ((((n % 10 == 3 || n % 10 == 4) || n % 10 == 9) && "
|
||||
"(n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 "
|
||||
"< 90 || n % 100 > 99)) ? 2 : ((n != 0 && n % 1000000 == 0) ? 3 : 4)));\n"
|
||||
"X-Generator: Weblate 5.11.1-dev\n"
|
||||
"X-Generator: Weblate 5.14-dev\n"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Clear the out chat queue"
|
||||
msgstr ""
|
||||
msgstr "Skarzhañ lostennad ar flapadenn"
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "Empty command."
|
||||
@@ -53,7 +53,7 @@ msgstr "C'hoarierien enlinenn: "
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "The out chat queue is now empty."
|
||||
msgstr ""
|
||||
msgstr "Goullo eo lostennad ar flapadenn."
|
||||
|
||||
#: builtin/client/chatcommands.lua
|
||||
msgid "This command is disabled by server."
|
||||
@@ -73,7 +73,7 @@ msgstr "Urzhiad dihegerz: "
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid "Get help for commands (-t: output in chat)"
|
||||
msgstr ""
|
||||
msgstr "Kaout skoazell an urzhiadoù (-t: diskouez ar flapadenn)"
|
||||
|
||||
#: builtin/common/chatcommands.lua
|
||||
msgid ""
|
||||
@@ -92,16 +92,15 @@ msgstr "Merdeiñ"
|
||||
|
||||
#: builtin/common/settings/components.lua
|
||||
msgid "Conflicts with \"$1\""
|
||||
msgstr ""
|
||||
msgstr "Kenniñv gant \"$1\""
|
||||
|
||||
#: builtin/common/settings/components.lua
|
||||
msgid "Edit"
|
||||
msgstr "Embann"
|
||||
|
||||
#: builtin/common/settings/components.lua
|
||||
#, fuzzy
|
||||
msgid "Remove keybinding"
|
||||
msgstr "Berradennoù klavier."
|
||||
msgstr "Dilemel ar verradenn klavier"
|
||||
|
||||
#: builtin/common/settings/components.lua
|
||||
msgid "Select directory"
|
||||
@@ -113,11 +112,11 @@ msgstr "Diuzañ ur restr"
|
||||
|
||||
#: builtin/common/settings/components.lua
|
||||
msgid "Set"
|
||||
msgstr ""
|
||||
msgstr "Arventennañ"
|
||||
|
||||
#: builtin/common/settings/dlg_change_mapgen_flags.lua
|
||||
msgid "(No description of setting given)"
|
||||
msgstr ""
|
||||
msgstr "(Deskrivadur ebet evit an arventenn-mañ)"
|
||||
|
||||
#: builtin/common/settings/dlg_change_mapgen_flags.lua
|
||||
msgid "2D Noise"
|
||||
@@ -168,15 +167,15 @@ msgstr "Hadenn"
|
||||
|
||||
#: builtin/common/settings/dlg_change_mapgen_flags.lua
|
||||
msgid "X spread"
|
||||
msgstr ""
|
||||
msgstr "Strewiñ X"
|
||||
|
||||
#: builtin/common/settings/dlg_change_mapgen_flags.lua
|
||||
msgid "Y spread"
|
||||
msgstr ""
|
||||
msgstr "Strewiñ Y"
|
||||
|
||||
#: builtin/common/settings/dlg_change_mapgen_flags.lua
|
||||
msgid "Z spread"
|
||||
msgstr ""
|
||||
msgstr "Strewiñ Z"
|
||||
|
||||
#. ~ "absvalue" is a noise parameter flag.
|
||||
#. It is short for "absolute value".
|
||||
@@ -199,7 +198,7 @@ msgstr "dre ziouer"
|
||||
#. the settings menu.
|
||||
#: builtin/common/settings/dlg_change_mapgen_flags.lua
|
||||
msgid "eased"
|
||||
msgstr ""
|
||||
msgstr "aesaet"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua
|
||||
msgid "(The game will need to enable automatic exposure as well)"
|
||||
@@ -233,7 +232,7 @@ msgstr "Distreiñ"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua
|
||||
msgid "Buttons with crosshair"
|
||||
msgstr ""
|
||||
msgstr "Boutonoù gant ur buker"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua src/gui/touchscreenlayout.cpp
|
||||
#: src/settings_translation_file.cpp
|
||||
@@ -263,7 +262,7 @@ msgstr "Hollek"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua
|
||||
msgid "Long tap"
|
||||
msgstr ""
|
||||
msgstr "Stokad hir"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua
|
||||
msgid "Movement"
|
||||
@@ -288,7 +287,7 @@ msgstr "Klask"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua
|
||||
msgid "Short tap"
|
||||
msgstr ""
|
||||
msgstr "Stokad berr"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua
|
||||
msgid "Show advanced settings"
|
||||
@@ -299,9 +298,8 @@ msgid "Show technical names"
|
||||
msgstr "Diskouez an anvioù teknikel"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua
|
||||
#, fuzzy
|
||||
msgid "Tap"
|
||||
msgstr "Taolenn"
|
||||
msgstr "Stokad"
|
||||
|
||||
#: builtin/common/settings/dlg_settings.lua
|
||||
msgid "Tap with crosshair"
|
||||
@@ -313,7 +311,7 @@ msgstr "Aozadur ar skramm-stekiñ"
|
||||
|
||||
#: builtin/common/settings/settingtypes.lua
|
||||
msgid "Client Mods"
|
||||
msgstr ""
|
||||
msgstr "Kemmoù an arval"
|
||||
|
||||
#: builtin/common/settings/settingtypes.lua
|
||||
msgid "Content: Games"
|
||||
@@ -346,15 +344,15 @@ msgstr "Izel"
|
||||
|
||||
#: builtin/common/settings/shadows_component.lua
|
||||
msgid "Medium"
|
||||
msgstr ""
|
||||
msgstr "Etre"
|
||||
|
||||
#: builtin/common/settings/shadows_component.lua
|
||||
msgid "Very High"
|
||||
msgstr ""
|
||||
msgstr "Uhel kenañ"
|
||||
|
||||
#: builtin/common/settings/shadows_component.lua
|
||||
msgid "Very Low"
|
||||
msgstr ""
|
||||
msgstr "Izel kenañ"
|
||||
|
||||
#: builtin/fstk/ui.lua
|
||||
msgid "<none available>"
|
||||
@@ -390,7 +388,7 @@ msgstr "Ne genglot ket handelv ar c'homenad. "
|
||||
|
||||
#: builtin/mainmenu/common.lua
|
||||
msgid "Server enforces protocol version $1. "
|
||||
msgstr ""
|
||||
msgstr "An dafariad a lak da ret handelv $1 ar c'homenad. "
|
||||
|
||||
#: builtin/mainmenu/common.lua
|
||||
msgid "Server supports protocol versions between $1 and $2. "
|
||||
@@ -400,7 +398,7 @@ msgstr ""
|
||||
|
||||
#: builtin/mainmenu/common.lua
|
||||
msgid "We only support protocol version $1."
|
||||
msgstr ""
|
||||
msgstr "Skoret e vez ganeomp handelv $1 ar c'homenad nemetken."
|
||||
|
||||
#: builtin/mainmenu/common.lua
|
||||
msgid "We support protocol versions between version $1 and $2."
|
||||
@@ -452,7 +450,7 @@ msgstr "O pellgargañ..."
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Featured"
|
||||
msgstr ""
|
||||
msgstr "Dibabet"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Games"
|
||||
@@ -479,7 +477,7 @@ msgstr "Hizivadur ebet"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Queued"
|
||||
msgstr ""
|
||||
msgstr "Da heul"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_contentdb.lua
|
||||
msgid "Texture Packs"
|
||||
@@ -495,7 +493,7 @@ msgstr "Hizivaat pep tra [$1}"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
msgid "$1 and $2 dependencies will be installed."
|
||||
msgstr ""
|
||||
msgstr "$1 a vo bet staliet asambles gant $2 amzalc'h."
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
msgid "$1 by $2"
|
||||
@@ -515,12 +513,12 @@ msgstr "Staliet dija"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
msgid "Base Game:"
|
||||
msgstr ""
|
||||
msgstr "C'hoari diazez:"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
|
||||
msgid "Dependencies:"
|
||||
msgstr ""
|
||||
msgstr "Amzalc'hioù:"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
msgid "Error getting dependencies for package $1"
|
||||
@@ -537,7 +535,7 @@ msgstr "Staliañ $1"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
msgid "Install missing dependencies"
|
||||
msgstr ""
|
||||
msgstr "Staliañ an amzalc'hioù a vank"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
msgid "Not found"
|
||||
@@ -549,7 +547,7 @@ msgstr ""
|
||||
|
||||
#: builtin/mainmenu/content/dlg_install.lua
|
||||
msgid "You need to install a game before you can install a mod"
|
||||
msgstr ""
|
||||
msgstr "Ur c'hoari a vez ret staliañ a-raok bezañ gouest da staliañ ur c'hemm"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_overwrite.lua
|
||||
msgid "\"$1\" already exists. Would you like to overwrite it?"
|
||||
@@ -569,7 +567,7 @@ msgstr "Deskrivadur"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_package.lua
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
msgstr "Donezonañ"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_package.lua
|
||||
msgid "Error loading package information"
|
||||
@@ -621,13 +619,12 @@ msgid "Website"
|
||||
msgstr "Lec'hienn web"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_package.lua
|
||||
#, fuzzy
|
||||
msgid "by $1"
|
||||
msgstr "$1 gant $2"
|
||||
msgstr "gant $1"
|
||||
|
||||
#: builtin/mainmenu/content/dlg_package.lua
|
||||
msgid "by $1 — $2 downloads — +$3 / $4 / -$5"
|
||||
msgstr ""
|
||||
msgstr "gant $1 — $2 a bellgargadennoù — +$3 / $4 / -$5"
|
||||
|
||||
#: builtin/mainmenu/content/pkgmgr.lua
|
||||
msgid "$1 (Enabled)"
|
||||
@@ -635,7 +632,7 @@ msgstr "$1 (Gweredekaet)"
|
||||
|
||||
#: builtin/mainmenu/content/pkgmgr.lua
|
||||
msgid "$1 mods"
|
||||
msgstr ""
|
||||
msgstr "$1 a gemmoù"
|
||||
|
||||
#: builtin/mainmenu/content/pkgmgr.lua
|
||||
msgid "Failed to install $1 to $2"
|
||||
@@ -662,6 +659,8 @@ msgid ""
|
||||
"Players connected to\n"
|
||||
"$1"
|
||||
msgstr ""
|
||||
"C'hoarierien kennasket ouzh\n"
|
||||
"$1"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "(Enabled, has error)"
|
||||
@@ -677,7 +676,7 @@ msgstr "Diweredekaat pep tra"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "Disable modpack"
|
||||
msgstr ""
|
||||
msgstr "Diweredekaat ar pakad kemmoù"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "Enable all"
|
||||
@@ -685,7 +684,7 @@ msgstr "Gweredekaat pep tra"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "Enable modpack"
|
||||
msgstr ""
|
||||
msgstr "Gweredekaat ar pakad kemmoù"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid ""
|
||||
@@ -695,15 +694,15 @@ msgstr ""
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "Find More Mods"
|
||||
msgstr ""
|
||||
msgstr "Kavout kemmoù ouzhpenn"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "Mod:"
|
||||
msgstr ""
|
||||
msgstr "Kemm:"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "No (optional) dependencies"
|
||||
msgstr ""
|
||||
msgstr "Amzalc'h (diret) ebet"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "No game description provided."
|
||||
@@ -719,11 +718,11 @@ msgstr ""
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "No optional dependencies"
|
||||
msgstr ""
|
||||
msgstr "Amzalc'h diret ebet"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
|
||||
msgid "Optional dependencies:"
|
||||
msgstr ""
|
||||
msgstr "Amzalc'hioù diret:"
|
||||
|
||||
#: builtin/mainmenu/dlg_config_world.lua
|
||||
msgid "World:"
|
||||
@@ -789,7 +788,7 @@ msgstr ""
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Dungeons"
|
||||
msgstr ""
|
||||
msgstr "Doñjonoù"
|
||||
|
||||
#: builtin/mainmenu/dlg_create_world.lua
|
||||
msgid "Flat terrain"
|
||||
@@ -952,17 +951,15 @@ msgstr ""
|
||||
|
||||
#: builtin/mainmenu/dlg_rebind_keys.lua
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "Serriñ"
|
||||
|
||||
#: builtin/mainmenu/dlg_rebind_keys.lua
|
||||
#, fuzzy
|
||||
msgid "Keybindings changed"
|
||||
msgstr "Berradennoù klavier."
|
||||
msgstr "Cheñchet eo bet ar berradennoù klavier"
|
||||
|
||||
#: builtin/mainmenu/dlg_rebind_keys.lua
|
||||
#, fuzzy
|
||||
msgid "Open settings"
|
||||
msgstr "Arventennoù"
|
||||
msgstr "Digeriñ an arventennoù"
|
||||
|
||||
#: builtin/mainmenu/dlg_rebind_keys.lua
|
||||
msgid "The input handling system was reworked in Luanti 5.12.0."
|
||||
@@ -1101,7 +1098,7 @@ msgstr "A-zivout"
|
||||
|
||||
#: builtin/mainmenu/tab_about.lua
|
||||
msgid "Active Contributors"
|
||||
msgstr ""
|
||||
msgstr "Perzhidi pennañ"
|
||||
|
||||
#: builtin/mainmenu/tab_about.lua
|
||||
msgid "Active renderer:"
|
||||
@@ -1230,10 +1227,6 @@ msgstr ""
|
||||
msgid "New"
|
||||
msgstr "Nevez"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "No world created or selected!"
|
||||
msgstr "Bed ebet bet krouet pe diuzet!"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "Play Game"
|
||||
msgstr "C'hoari"
|
||||
@@ -1359,7 +1352,7 @@ msgstr "Graet!"
|
||||
#: src/client/client.cpp
|
||||
#, c-format
|
||||
msgid "Failed to save screenshot to \"%s\""
|
||||
msgstr ""
|
||||
msgstr "C'hwitadenn war an enrollañ an dapadenn-skramm da \"%s\""
|
||||
|
||||
#: src/client/client.cpp
|
||||
msgid "Initializing nodes"
|
||||
@@ -1378,9 +1371,9 @@ msgid "Rebuilding shaders..."
|
||||
msgstr ""
|
||||
|
||||
#: src/client/client.cpp
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Saved screenshot to \"%s\""
|
||||
msgstr "Tapadennoù skramm"
|
||||
msgstr "Tapadenn skramm enrollet da \"%s\""
|
||||
|
||||
#: src/client/clientlauncher.cpp
|
||||
msgid "Could not find or load game: "
|
||||
@@ -1819,10 +1812,6 @@ msgstr ""
|
||||
msgid "Profiler shown (page %d of %d)"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Apps"
|
||||
msgstr "Arloadoù"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Backspace"
|
||||
msgstr "Kilesaouiñ"
|
||||
@@ -1853,45 +1842,19 @@ msgid "Down Arrow"
|
||||
msgstr "Bir traoñ"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "End"
|
||||
msgstr "Dibenn"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Erase EOF"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Execute"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
msgstr "Skoazell"
|
||||
#, fuzzy
|
||||
msgid "End Key"
|
||||
msgstr "Lañser"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Home"
|
||||
msgstr "Degemer"
|
||||
msgid "Help Key"
|
||||
msgstr "Dilemel"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Accept"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Convert"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Escape"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Mode Change"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Nonconvert"
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Home Key"
|
||||
msgstr "Zoum"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Insert"
|
||||
@@ -1902,8 +1865,9 @@ msgid "Left Arrow"
|
||||
msgstr "Bir kleiz"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Button"
|
||||
msgstr "Klik kleiz"
|
||||
#, fuzzy
|
||||
msgid "Left Click"
|
||||
msgstr "Reol. kleiz"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Control"
|
||||
@@ -1917,19 +1881,27 @@ msgstr "Lañser kleiz"
|
||||
msgid "Left Shift"
|
||||
msgstr "Pennlizh. kleiz"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Windows"
|
||||
msgstr "Windows kleiz"
|
||||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Menu Key"
|
||||
msgstr "Lañser"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
msgstr "Bouton kreiz"
|
||||
msgid "Middle Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Num Lock"
|
||||
@@ -1995,10 +1967,6 @@ msgstr "Klavier niverel 8"
|
||||
msgid "Numpad 9"
|
||||
msgstr "Klavier niverel 9"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "OEM Clear"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Page Down"
|
||||
msgstr "Pajenn traoñ"
|
||||
@@ -2019,19 +1987,20 @@ msgstr "C'hoari"
|
||||
#. ~ "Print screen" key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
msgstr "Tap. skramm"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Return Key"
|
||||
msgstr ""
|
||||
msgstr "Distro"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Arrow"
|
||||
msgstr "Bir dehoù"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Button"
|
||||
msgstr "Klik dehou"
|
||||
#, fuzzy
|
||||
msgid "Right Click"
|
||||
msgstr "Reol. dehoù"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Control"
|
||||
@@ -2045,6 +2014,7 @@ msgstr "Lañser dehoù"
|
||||
msgid "Right Shift"
|
||||
msgstr "Pennlizh. dehoù"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Windows"
|
||||
msgstr "Windows dehoù"
|
||||
@@ -2053,50 +2023,31 @@ msgstr "Windows dehoù"
|
||||
msgid "Scroll Lock"
|
||||
msgstr "Prennañ dibun"
|
||||
|
||||
#. ~ Key name
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Select"
|
||||
msgstr "Diuzañ"
|
||||
#, fuzzy
|
||||
msgid "Select Key"
|
||||
msgstr "Dilemel"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Shift Key"
|
||||
msgstr "Pennlizherenn"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Sleep"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Space"
|
||||
msgstr "Esaouenn"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Tab"
|
||||
msgstr "Taolenn"
|
||||
#, fuzzy
|
||||
msgid "Tab Key"
|
||||
msgstr "Ehan"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Up Arrow"
|
||||
msgstr "Bir krec'h"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 1"
|
||||
msgstr "Bouton X 1"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 2"
|
||||
msgstr "Bouton X 2"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Zoom Key"
|
||||
msgstr "Zoum"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
msgstr ""
|
||||
msgstr "Minikartenn guzhet"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
#, c-format
|
||||
@@ -2194,7 +2145,7 @@ msgstr "Mud"
|
||||
#: src/gui/guiVolumeChange.cpp
|
||||
#, c-format
|
||||
msgid "Sound Volume: %d%%"
|
||||
msgstr ""
|
||||
msgstr "Tregern ar son: %d%%"
|
||||
|
||||
#: src/gui/touchscreeneditor.cpp
|
||||
msgid "Add button"
|
||||
@@ -2262,7 +2213,7 @@ msgstr ""
|
||||
|
||||
#: src/gui/touchscreenlayout.cpp src/settings_translation_file.cpp
|
||||
msgid "Place/use"
|
||||
msgstr ""
|
||||
msgstr "Plasañ/implijout"
|
||||
|
||||
#: src/gui/touchscreenlayout.cpp
|
||||
msgid "Range select"
|
||||
@@ -2290,7 +2241,7 @@ msgstr "(Di)weredekaat an nijal"
|
||||
|
||||
#: src/gui/touchscreenlayout.cpp src/settings_translation_file.cpp
|
||||
msgid "Toggle minimap"
|
||||
msgstr ""
|
||||
msgstr "(De)weredekaat ar minikartenn"
|
||||
|
||||
#: src/gui/touchscreenlayout.cpp src/settings_translation_file.cpp
|
||||
msgid "Toggle noclip"
|
||||
@@ -2495,12 +2446,11 @@ msgstr ""
|
||||
msgid ""
|
||||
"3D support.\n"
|
||||
"Currently supported:\n"
|
||||
"- none: no 3d output.\n"
|
||||
"- anaglyph: cyan/magenta color 3d.\n"
|
||||
"- interlaced: odd/even line based polarization screen support.\n"
|
||||
"- topbottom: split screen top/bottom.\n"
|
||||
"- sidebyside: split screen side by side.\n"
|
||||
"- crossview: Cross-eyed 3d"
|
||||
"- none: no 3D output\n"
|
||||
"- anaglyph: cyan/magenta color 3D\n"
|
||||
"- topbottom: split screen top/bottom\n"
|
||||
"- sidebyside: split screen side-by-side\n"
|
||||
"- crossview: cross-eyed 3D"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
@@ -2713,7 +2663,7 @@ msgstr "Aodio"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Automatic jumping"
|
||||
msgstr ""
|
||||
msgstr "Lammat ez-emgefreek"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Automatically jump up single-node obstacles."
|
||||
@@ -2823,6 +2773,17 @@ msgstr ""
|
||||
msgid "Camera smoothing in cinematic mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Capture Tracy zones"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Capture Tracy zones with the profiler's instrumentation.\n"
|
||||
"You need to build with Tracy to use this, see doc/developing/profiling.md\n"
|
||||
"for details."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise"
|
||||
msgstr "Trouz ar greier"
|
||||
@@ -2883,7 +2844,7 @@ msgstr "Urzhiadoù ar flapiñ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Chat font size"
|
||||
msgstr ""
|
||||
msgstr "Ment nodrezh ar flapiñ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Chat log level"
|
||||
@@ -3103,7 +3064,7 @@ msgstr "Kemennadenn sac'hadenn"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Crosshair alpha"
|
||||
msgstr ""
|
||||
msgstr "Demerez ar buker"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
@@ -3304,6 +3265,10 @@ msgstr ""
|
||||
msgid "Developer Options"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disable if you only want to instrument with Tracy."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disallow empty passwords"
|
||||
msgstr "Na aotren ket gerioù-tremen goullo"
|
||||
@@ -3350,15 +3315,15 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Dungeon maximum Y"
|
||||
msgstr ""
|
||||
msgstr "Y uheloc'h an doñjonoù"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Dungeon minimum Y"
|
||||
msgstr ""
|
||||
msgstr "Y izeloc'h an doñjonoù"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Dungeon noise"
|
||||
msgstr ""
|
||||
msgstr "Trouz an doñjonoù"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Effects"
|
||||
@@ -3791,7 +3756,7 @@ msgstr "Skramm a-bezh"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Fullscreen mode."
|
||||
msgstr ""
|
||||
msgstr "Mod skrammad a-bezh."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "GUI"
|
||||
@@ -3834,11 +3799,11 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Graphics"
|
||||
msgstr ""
|
||||
msgstr "Kevregañ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Graphics and Audio"
|
||||
msgstr ""
|
||||
msgstr "Kevregañ hag aodio"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Gravity"
|
||||
@@ -3854,7 +3819,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "HTTP mods"
|
||||
msgstr ""
|
||||
msgstr "Kemmoù HTTP"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "HUD"
|
||||
@@ -4263,7 +4228,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Increase volume"
|
||||
msgstr ""
|
||||
msgstr "Kreskaat an tregern"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Initial vertical speed when jumping, in nodes per second."
|
||||
@@ -4301,7 +4266,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Interaction style"
|
||||
msgstr ""
|
||||
msgstr "Doare etrewezhiañ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Interval of saving important changes in the world, stated in seconds."
|
||||
@@ -4473,9 +4438,8 @@ msgid "Key for toggling the display of the profiler. Used for development."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Keybindings"
|
||||
msgstr "Berradennoù klavier."
|
||||
msgstr "Berradennoù klavier"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Keyboard and Mouse"
|
||||
@@ -4593,7 +4557,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Lighting"
|
||||
msgstr "Sklerijennañ"
|
||||
msgstr "Goulaouiñ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
@@ -4987,6 +4951,11 @@ msgstr ""
|
||||
msgid "Maximum users"
|
||||
msgstr "Niver uhelañ a c'hoarierien"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Measure time samples"
|
||||
msgstr "Temploù an dezerzh"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Message of the day"
|
||||
msgstr "Kemennadenn an deiz"
|
||||
@@ -5913,7 +5882,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Smooth lighting"
|
||||
msgstr ""
|
||||
msgstr "Goulaouiñ lenkr"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Smooth scrolling"
|
||||
@@ -5941,11 +5910,11 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Soft clouds"
|
||||
msgstr ""
|
||||
msgstr "Koumoul dous"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Soft shadow radius"
|
||||
msgstr ""
|
||||
msgstr "Skin ar skeud kuñv"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Sound"
|
||||
@@ -5953,7 +5922,7 @@ msgstr "Aodio"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Sound Extensions Blacklist"
|
||||
msgstr ""
|
||||
msgstr "Roll du an askouezhioù aodio"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
@@ -6369,7 +6338,7 @@ msgstr "Skramm-stekiñ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Touchscreen controls"
|
||||
msgstr ""
|
||||
msgstr "Reolerezhioù ar skramm-stekiñ"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Touchscreen sensitivity"
|
||||
@@ -6381,7 +6350,7 @@ msgstr "Lieskementer kizidigezh ar skramm-stekiñ."
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Tradeoffs for performance"
|
||||
msgstr ""
|
||||
msgstr "Treuzvarc'hadoù a-fed an digonusted"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Translucent foliage"
|
||||
@@ -6416,7 +6385,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Trusted mods"
|
||||
msgstr ""
|
||||
msgstr "Kemmoù fiziañs enno"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
@@ -6527,7 +6496,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "User Interfaces"
|
||||
msgstr ""
|
||||
msgstr "Ketalioù an arveriaded"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "VSync"
|
||||
@@ -6593,7 +6562,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Video driver"
|
||||
msgstr ""
|
||||
msgstr "Stur video"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "View bobbing factor"
|
||||
@@ -6613,7 +6582,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Volume"
|
||||
msgstr ""
|
||||
msgstr "Tregern"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Volume multiplier when the window is unfocused."
|
||||
@@ -6631,7 +6600,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Volumetric lighting"
|
||||
msgstr ""
|
||||
msgstr "Goulaouiñ trimentek"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
@@ -6664,19 +6633,19 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Waving Nodes"
|
||||
msgstr ""
|
||||
msgstr "Gwagenniñ ar c'hlomoù"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Waving leaves"
|
||||
msgstr ""
|
||||
msgstr "Gwagenniñ an delioù"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Waving liquids"
|
||||
msgstr ""
|
||||
msgstr "Gwagenniñ an dourennoù"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Waving liquids wave height"
|
||||
msgstr ""
|
||||
msgstr "Uhelded gwagenniñ an dourennoù"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Waving liquids wave speed"
|
||||
@@ -6688,7 +6657,7 @@ msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Waving plants"
|
||||
msgstr ""
|
||||
msgstr "Gwagenniñ ar plant"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Weblink color"
|
||||
@@ -6869,3 +6838,43 @@ msgstr ""
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "cURL parallel limit"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Arloadoù"
|
||||
|
||||
#~ msgid "End"
|
||||
#~ msgstr "Dibenn"
|
||||
|
||||
#~ msgid "Help"
|
||||
#~ msgstr "Skoazell"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Home"
|
||||
#~ msgstr "Degemer"
|
||||
|
||||
#~ msgid "Left Button"
|
||||
#~ msgstr "Klik kleiz"
|
||||
|
||||
#~ msgid "Middle Button"
|
||||
#~ msgstr "Klik kreiz"
|
||||
|
||||
#~ msgid "No world created or selected!"
|
||||
#~ msgstr "Bed ebet bet krouet pe diuzet!"
|
||||
|
||||
#~ msgid "Right Button"
|
||||
#~ msgstr "Klik dehou"
|
||||
|
||||
#~ msgid "Select"
|
||||
#~ msgstr "Diuzañ"
|
||||
|
||||
#~ msgid "Sleep"
|
||||
#~ msgstr "Kousk"
|
||||
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Taolenn"
|
||||
|
||||
#~ msgid "X Button 1"
|
||||
#~ msgstr "Bouton X 1"
|
||||
|
||||
#~ msgid "X Button 2"
|
||||
#~ msgstr "Bouton X 2"
|
||||
|
||||
222
po/ca/luanti.po
222
po/ca/luanti.po
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Catalan (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-07-11 19:59+0200\n"
|
||||
"POT-Creation-Date: 2025-09-23 19:19+0200\n"
|
||||
"PO-Revision-Date: 2024-10-06 05:16+0000\n"
|
||||
"Last-Translator: Joaquín Villalba <joaco-mono@hotmail.com>\n"
|
||||
"Language-Team: Catalan <https://hosted.weblate.org/projects/minetest/"
|
||||
@@ -1294,10 +1294,6 @@ msgstr ""
|
||||
msgid "New"
|
||||
msgstr "Nou"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "No world created or selected!"
|
||||
msgstr "No s'ha creat ningun món o no s'ha seleccionat!"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "Play Game"
|
||||
msgstr "Jugar Joc"
|
||||
@@ -1931,10 +1927,6 @@ msgstr ""
|
||||
msgid "Profiler shown (page %d of %d)"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Apps"
|
||||
msgstr "Aplicacions"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Backspace"
|
||||
@@ -1970,50 +1962,19 @@ msgid "Down Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "End"
|
||||
msgstr "Fi"
|
||||
#, fuzzy
|
||||
msgid "End Key"
|
||||
msgstr "Menú"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Erase EOF"
|
||||
msgstr "Esborrar OEF"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Execute"
|
||||
msgstr "Executar"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
msgstr "Ajuda"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Home"
|
||||
msgstr "Inici"
|
||||
msgid "Help Key"
|
||||
msgstr "Esborrar"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Accept"
|
||||
msgstr "Acceptar"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Convert"
|
||||
msgstr "Convertir"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Escape"
|
||||
msgstr "Esc"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Mode Change"
|
||||
msgstr "Canvi de mode"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "IME Nonconvert"
|
||||
msgstr "No convertir"
|
||||
msgid "Home Key"
|
||||
msgstr "Zoom"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Insert"
|
||||
@@ -2025,8 +1986,9 @@ msgid "Left Arrow"
|
||||
msgstr "Control esq"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Button"
|
||||
msgstr "Botó esquerre"
|
||||
#, fuzzy
|
||||
msgid "Left Click"
|
||||
msgstr "Control esq"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Control"
|
||||
@@ -2040,19 +2002,27 @@ msgstr "Menú esq"
|
||||
msgid "Left Shift"
|
||||
msgstr "Shift esq"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Windows"
|
||||
msgstr "Windows esquerre"
|
||||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Menu Key"
|
||||
msgstr "Menú"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
msgstr "Botó del mig"
|
||||
msgid "Middle Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Num Lock"
|
||||
@@ -2119,10 +2089,6 @@ msgstr "Teclat Num. 8"
|
||||
msgid "Numpad 9"
|
||||
msgstr "Teclat Num. 9"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "OEM Clear"
|
||||
msgstr "Netejar OEM"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Page Down"
|
||||
@@ -2158,8 +2124,9 @@ msgid "Right Arrow"
|
||||
msgstr "Control dta"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Button"
|
||||
msgstr "Botó dret"
|
||||
#, fuzzy
|
||||
msgid "Right Click"
|
||||
msgstr "Control dta"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Control"
|
||||
@@ -2173,6 +2140,7 @@ msgstr "Menú dta"
|
||||
msgid "Right Shift"
|
||||
msgstr "Shift Dta"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Windows"
|
||||
msgstr "Windows dret"
|
||||
@@ -2181,49 +2149,29 @@ msgstr "Windows dret"
|
||||
msgid "Scroll Lock"
|
||||
msgstr "Bloq Despl"
|
||||
|
||||
#. ~ Key name
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Select"
|
||||
msgstr "Seleccionar"
|
||||
#, fuzzy
|
||||
msgid "Select Key"
|
||||
msgstr "Esborrar"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Shift Key"
|
||||
msgstr "Shift"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Sleep"
|
||||
msgstr "Dormir"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Snapshot"
|
||||
msgstr "Captura de pantalla"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Space"
|
||||
msgstr "Espai"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Tab"
|
||||
msgstr "Tabulador"
|
||||
#, fuzzy
|
||||
msgid "Tab Key"
|
||||
msgstr "Tecla sigil"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Up Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 1"
|
||||
msgstr "X Botó 1"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 2"
|
||||
msgstr "X Botó 2"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Zoom Key"
|
||||
msgstr "Zoom"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
msgstr ""
|
||||
@@ -2639,12 +2587,11 @@ msgstr ""
|
||||
msgid ""
|
||||
"3D support.\n"
|
||||
"Currently supported:\n"
|
||||
"- none: no 3d output.\n"
|
||||
"- anaglyph: cyan/magenta color 3d.\n"
|
||||
"- interlaced: odd/even line based polarization screen support.\n"
|
||||
"- topbottom: split screen top/bottom.\n"
|
||||
"- sidebyside: split screen side by side.\n"
|
||||
"- crossview: Cross-eyed 3d"
|
||||
"- none: no 3D output\n"
|
||||
"- anaglyph: cyan/magenta color 3D\n"
|
||||
"- topbottom: split screen top/bottom\n"
|
||||
"- sidebyside: split screen side-by-side\n"
|
||||
"- crossview: cross-eyed 3D"
|
||||
msgstr ""
|
||||
"Suport 3D.\n"
|
||||
"Currently supported:\n"
|
||||
@@ -2993,6 +2940,17 @@ msgstr "Suavitzat de la càmera"
|
||||
msgid "Camera smoothing in cinematic mode"
|
||||
msgstr "Suavitzat de la càmera en mode cinematogràfic"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Capture Tracy zones"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Capture Tracy zones with the profiler's instrumentation.\n"
|
||||
"You need to build with Tracy to use this, see doc/developing/profiling.md\n"
|
||||
"for details."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Cave noise"
|
||||
@@ -3507,6 +3465,10 @@ msgstr ""
|
||||
msgid "Developer Options"
|
||||
msgstr "Informació del mod:"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disable if you only want to instrument with Tracy."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disallow empty passwords"
|
||||
msgstr ""
|
||||
@@ -5219,6 +5181,10 @@ msgstr ""
|
||||
msgid "Maximum users"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Measure time samples"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Message of the day"
|
||||
msgstr ""
|
||||
@@ -7075,8 +7041,8 @@ msgstr ""
|
||||
msgid "Will also disable autoforward, when active."
|
||||
msgstr ""
|
||||
"Tecla per moure el jugador cap arrere.\n"
|
||||
"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
|
||||
"html#a54da2a0e231901735e3da1b0edf72eb3"
|
||||
"Veure http://irrlicht.sourceforge.net/docu/"
|
||||
"namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Window maximized"
|
||||
@@ -7179,6 +7145,74 @@ msgstr ""
|
||||
msgid "cURL parallel limit"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Aplicacions"
|
||||
|
||||
#~ msgid "End"
|
||||
#~ msgstr "Fi"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Key for toggling cinematic mode."
|
||||
#~ msgstr "Suavitzat de la càmera en mode cinematogràfic"
|
||||
#~ msgid "Erase EOF"
|
||||
#~ msgstr "Esborrar OEF"
|
||||
|
||||
#~ msgid "Execute"
|
||||
#~ msgstr "Executar"
|
||||
|
||||
#~ msgid "Help"
|
||||
#~ msgstr "Ajuda"
|
||||
|
||||
#~ msgid "Home"
|
||||
#~ msgstr "Inici"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Accept"
|
||||
#~ msgstr "Acceptar"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Convert"
|
||||
#~ msgstr "Convertir"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Escape"
|
||||
#~ msgstr "Esc"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Mode Change"
|
||||
#~ msgstr "Canvi de mode"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "IME Nonconvert"
|
||||
#~ msgstr "No convertir"
|
||||
|
||||
#~ msgid "Left Button"
|
||||
#~ msgstr "Botó esquerre"
|
||||
|
||||
#~ msgid "Middle Button"
|
||||
#~ msgstr "Botó del mig"
|
||||
|
||||
#~ msgid "No world created or selected!"
|
||||
#~ msgstr "No s'ha creat ningun món o no s'ha seleccionat!"
|
||||
|
||||
#~ msgid "OEM Clear"
|
||||
#~ msgstr "Netejar OEM"
|
||||
|
||||
#~ msgid "Right Button"
|
||||
#~ msgstr "Botó dret"
|
||||
|
||||
#~ msgid "Select"
|
||||
#~ msgstr "Seleccionar"
|
||||
|
||||
#~ msgid "Sleep"
|
||||
#~ msgstr "Dormir"
|
||||
|
||||
#~ msgid "Snapshot"
|
||||
#~ msgstr "Captura de pantalla"
|
||||
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tabulador"
|
||||
|
||||
#~ msgid "X Button 1"
|
||||
#~ msgstr "X Botó 1"
|
||||
|
||||
#~ msgid "X Button 2"
|
||||
#~ msgstr "X Botó 2"
|
||||
|
||||
221
po/cs/luanti.po
221
po/cs/luanti.po
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Czech (Minetest)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-07-11 19:59+0200\n"
|
||||
"POT-Creation-Date: 2025-09-23 19:19+0200\n"
|
||||
"PO-Revision-Date: 2025-02-05 11:03+0000\n"
|
||||
"Last-Translator: Matyáš Pilz <matys.pilz@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/minetest/minetest/"
|
||||
@@ -1247,10 +1247,6 @@ msgstr ""
|
||||
msgid "New"
|
||||
msgstr "Nový"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "No world created or selected!"
|
||||
msgstr "Žádný svět nebyl vytvořen ani vybrán!"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "Play Game"
|
||||
msgstr "Hrát hru"
|
||||
@@ -1852,10 +1848,6 @@ msgstr "Profilování skryto"
|
||||
msgid "Profiler shown (page %d of %d)"
|
||||
msgstr "Profilování zobrazeno (strana %d z %d)"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Apps"
|
||||
msgstr "Aplikace"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Backspace"
|
||||
msgstr "Backspace"
|
||||
@@ -1886,44 +1878,19 @@ msgid "Down Arrow"
|
||||
msgstr "Šipka Dolů"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "End"
|
||||
msgstr "End"
|
||||
#, fuzzy
|
||||
msgid "End Key"
|
||||
msgstr "Nabídka"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Erase EOF"
|
||||
msgstr "Vymazat EOF"
|
||||
#, fuzzy
|
||||
msgid "Help Key"
|
||||
msgstr "Delete"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Execute"
|
||||
msgstr "Spustit"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
msgstr "Nápověda"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Accept"
|
||||
msgstr "Povolené IME"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Convert"
|
||||
msgstr "Převést IME"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Escape"
|
||||
msgstr "IME opustit"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Mode Change"
|
||||
msgstr "Změna režimu IME"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Nonconvert"
|
||||
msgstr "IME „Nonconvert“ (nepřevádět)"
|
||||
#, fuzzy
|
||||
msgid "Home Key"
|
||||
msgstr "Přiblížení"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Insert"
|
||||
@@ -1934,8 +1901,9 @@ msgid "Left Arrow"
|
||||
msgstr "Šipka Vlevo"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Button"
|
||||
msgstr "Levé tlačítko myši"
|
||||
#, fuzzy
|
||||
msgid "Left Click"
|
||||
msgstr "Levý Control"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Control"
|
||||
@@ -1949,19 +1917,27 @@ msgstr "Levá klávesa Menu"
|
||||
msgid "Left Shift"
|
||||
msgstr "Levý Shift"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Windows"
|
||||
msgstr "Levá klávesa Windows"
|
||||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Menu Key"
|
||||
msgstr "Nabídka"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
msgstr "Prostřední tlačítko myši"
|
||||
msgid "Middle Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Num Lock"
|
||||
@@ -2027,10 +2003,6 @@ msgstr "Numerická klávesnice: 8"
|
||||
msgid "Numpad 9"
|
||||
msgstr "Numerická klávesnice: 9"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "OEM Clear"
|
||||
msgstr "„OEM Clear“"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Page Down"
|
||||
msgstr "Page Down"
|
||||
@@ -2064,8 +2036,9 @@ msgid "Right Arrow"
|
||||
msgstr "Šipka Vpravo"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Button"
|
||||
msgstr "Pravé tlačítko myši"
|
||||
#, fuzzy
|
||||
msgid "Right Click"
|
||||
msgstr "Pravý Control"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Control"
|
||||
@@ -2079,6 +2052,7 @@ msgstr "Pravá klávesa Menu"
|
||||
msgid "Right Shift"
|
||||
msgstr "Pravý Shift"
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Windows"
|
||||
msgstr "Pravá klávesa Windows"
|
||||
@@ -2087,48 +2061,28 @@ msgstr "Pravá klávesa Windows"
|
||||
msgid "Scroll Lock"
|
||||
msgstr "Scroll Lock"
|
||||
|
||||
#. ~ Key name
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Select"
|
||||
msgstr "Vybrat"
|
||||
#, fuzzy
|
||||
msgid "Select Key"
|
||||
msgstr "Delete"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Shift Key"
|
||||
msgstr "Shift"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Sleep"
|
||||
msgstr "Spánek"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Snapshot"
|
||||
msgstr "Snapshot"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Space"
|
||||
msgstr "Mezerník"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Tab"
|
||||
msgstr "Tabulátor"
|
||||
#, fuzzy
|
||||
msgid "Tab Key"
|
||||
msgstr "Klávesa Break"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Up Arrow"
|
||||
msgstr "Šipka Nahoru"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 1"
|
||||
msgstr "X Tlačítko 1"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 2"
|
||||
msgstr "X Tlačítko 2"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Zoom Key"
|
||||
msgstr "Přiblížení"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
msgstr "Minimapa je skryta"
|
||||
@@ -2559,12 +2513,11 @@ msgstr "3D šum definující počet žalářů na kusu mapy."
|
||||
msgid ""
|
||||
"3D support.\n"
|
||||
"Currently supported:\n"
|
||||
"- none: no 3d output.\n"
|
||||
"- anaglyph: cyan/magenta color 3d.\n"
|
||||
"- interlaced: odd/even line based polarization screen support.\n"
|
||||
"- topbottom: split screen top/bottom.\n"
|
||||
"- sidebyside: split screen side by side.\n"
|
||||
"- crossview: Cross-eyed 3d"
|
||||
"- none: no 3D output\n"
|
||||
"- anaglyph: cyan/magenta color 3D\n"
|
||||
"- topbottom: split screen top/bottom\n"
|
||||
"- sidebyside: split screen side-by-side\n"
|
||||
"- crossview: cross-eyed 3D"
|
||||
msgstr ""
|
||||
"Podpora 3D.\n"
|
||||
"V současné době podporovány:\n"
|
||||
@@ -2932,6 +2885,17 @@ msgstr "Vyhlazení pohybu kamery"
|
||||
msgid "Camera smoothing in cinematic mode"
|
||||
msgstr "Vyhlazení pohybu kamery ve filmovém režimu"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Capture Tracy zones"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Capture Tracy zones with the profiler's instrumentation.\n"
|
||||
"You need to build with Tracy to use this, see doc/developing/profiling.md\n"
|
||||
"for details."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise"
|
||||
msgstr "Šum v jeskynních"
|
||||
@@ -3482,6 +3446,10 @@ msgstr ""
|
||||
msgid "Developer Options"
|
||||
msgstr "Možnosti pro vývojáře"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disable if you only want to instrument with Tracy."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disallow empty passwords"
|
||||
msgstr "Zakázat prázdná hesla"
|
||||
@@ -5453,6 +5421,11 @@ msgstr ""
|
||||
msgid "Maximum users"
|
||||
msgstr "Maximální počet uživatelů"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
#, fuzzy
|
||||
msgid "Measure time samples"
|
||||
msgstr "Pouštní chrámy"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Message of the day"
|
||||
msgstr "Zpráva dne"
|
||||
@@ -7595,8 +7568,8 @@ msgid "Will also disable autoforward, when active."
|
||||
msgstr ""
|
||||
"Klávesa pro pohyb hráče zpět.\n"
|
||||
"Také vypne automatický pohyb vpřed, pokud je zapnutý.\n"
|
||||
"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
|
||||
"html#a54da2a0e231901735e3da1b0edf72eb3"
|
||||
"viz. http://irrlicht.sourceforge.net/docu/"
|
||||
"namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Window maximized"
|
||||
@@ -7716,14 +7689,68 @@ msgstr "Interaktivní časový limit cURL"
|
||||
msgid "cURL parallel limit"
|
||||
msgstr "cURL limit paralelních stahování"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Key for taking screenshots."
|
||||
#~ msgstr "Formát snímků obrazovky."
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Aplikace"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Key for toggling cinematic mode."
|
||||
#~ msgstr "Vyhlazení pohybu kamery ve filmovém režimu"
|
||||
#~ msgid "End"
|
||||
#~ msgstr "End"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Key for toggling fullscreen mode."
|
||||
#~ msgstr "Celoobrazovkový režim."
|
||||
#~ msgid "Erase EOF"
|
||||
#~ msgstr "Vymazat EOF"
|
||||
|
||||
#~ msgid "Execute"
|
||||
#~ msgstr "Spustit"
|
||||
|
||||
#~ msgid "Help"
|
||||
#~ msgstr "Nápověda"
|
||||
|
||||
#~ msgid "Home"
|
||||
#~ msgstr "Home"
|
||||
|
||||
#~ msgid "IME Accept"
|
||||
#~ msgstr "Povolené IME"
|
||||
|
||||
#~ msgid "IME Convert"
|
||||
#~ msgstr "Převést IME"
|
||||
|
||||
#~ msgid "IME Escape"
|
||||
#~ msgstr "IME opustit"
|
||||
|
||||
#~ msgid "IME Mode Change"
|
||||
#~ msgstr "Změna režimu IME"
|
||||
|
||||
#~ msgid "IME Nonconvert"
|
||||
#~ msgstr "IME „Nonconvert“ (nepřevádět)"
|
||||
|
||||
#~ msgid "Left Button"
|
||||
#~ msgstr "Levé tlačítko myši"
|
||||
|
||||
#~ msgid "Middle Button"
|
||||
#~ msgstr "Prostřední tlačítko myši"
|
||||
|
||||
#~ msgid "No world created or selected!"
|
||||
#~ msgstr "Žádný svět nebyl vytvořen ani vybrán!"
|
||||
|
||||
#~ msgid "OEM Clear"
|
||||
#~ msgstr "„OEM Clear“"
|
||||
|
||||
#~ msgid "Right Button"
|
||||
#~ msgstr "Pravé tlačítko myši"
|
||||
|
||||
#~ msgid "Select"
|
||||
#~ msgstr "Vybrat"
|
||||
|
||||
#~ msgid "Sleep"
|
||||
#~ msgstr "Spánek"
|
||||
|
||||
#~ msgid "Snapshot"
|
||||
#~ msgstr "Snapshot"
|
||||
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tabulátor"
|
||||
|
||||
#~ msgid "X Button 1"
|
||||
#~ msgstr "X Tlačítko 1"
|
||||
|
||||
#~ msgid "X Button 2"
|
||||
#~ msgstr "X Tlačítko 2"
|
||||
|
||||
163
po/cy/luanti.po
163
po/cy/luanti.po
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: minetest\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-07-11 19:59+0200\n"
|
||||
"POT-Creation-Date: 2025-09-23 19:19+0200\n"
|
||||
"PO-Revision-Date: 2023-03-17 11:44+0000\n"
|
||||
"Last-Translator: dreigiau <sterilgrimed23@gmail.com>\n"
|
||||
"Language-Team: Welsh <https://hosted.weblate.org/projects/minetest/minetest/"
|
||||
@@ -1220,10 +1220,6 @@ msgstr ""
|
||||
msgid "New"
|
||||
msgstr "Newydd"
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "No world created or selected!"
|
||||
msgstr ""
|
||||
|
||||
#: builtin/mainmenu/tab_local.lua
|
||||
msgid "Play Game"
|
||||
msgstr "Chwarae Gêm"
|
||||
@@ -1806,10 +1802,6 @@ msgstr ""
|
||||
msgid "Profiler shown (page %d of %d)"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Apps"
|
||||
msgstr "Apiau"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Backspace"
|
||||
msgstr "Backspace"
|
||||
@@ -1843,44 +1835,19 @@ msgid "Down Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "End"
|
||||
msgstr "End"
|
||||
#, fuzzy
|
||||
msgid "End Key"
|
||||
msgstr "Menu"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Erase EOF"
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Help Key"
|
||||
msgstr "Dileu"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Execute"
|
||||
msgstr "Cyflawni"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Help"
|
||||
msgstr "Cymorth"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Accept"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Convert"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Escape"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Mode Change"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "IME Nonconvert"
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Home Key"
|
||||
msgstr "Chwyddo"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Insert"
|
||||
@@ -1891,7 +1858,7 @@ msgid "Left Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Button"
|
||||
msgid "Left Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
@@ -1906,18 +1873,26 @@ msgstr ""
|
||||
msgid "Left Shift"
|
||||
msgstr ""
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Left Windows"
|
||||
msgstr ""
|
||||
|
||||
#. ~ Key name, common on Windows keyboards
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Menu Key"
|
||||
msgstr "Menu"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Middle Button"
|
||||
msgid "Middle Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Mouse X2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
@@ -1984,10 +1959,6 @@ msgstr ""
|
||||
msgid "Numpad 9"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "OEM Clear"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Page Down"
|
||||
@@ -2023,7 +1994,7 @@ msgid "Right Arrow"
|
||||
msgstr "Dde"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Button"
|
||||
msgid "Right Click"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
@@ -2038,6 +2009,7 @@ msgstr ""
|
||||
msgid "Right Shift"
|
||||
msgstr ""
|
||||
|
||||
#. ~ Name of key
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Right Windows"
|
||||
msgstr ""
|
||||
@@ -2046,49 +2018,29 @@ msgstr ""
|
||||
msgid "Scroll Lock"
|
||||
msgstr ""
|
||||
|
||||
#. ~ Key name
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Select"
|
||||
msgstr "Select"
|
||||
#, fuzzy
|
||||
msgid "Select Key"
|
||||
msgstr "Dileu"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Shift Key"
|
||||
msgstr "Shift"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Sleep"
|
||||
msgstr "Cysgu"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Snapshot"
|
||||
msgstr "Sgrinlun"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Space"
|
||||
msgstr "Space"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Tab"
|
||||
msgstr "Tab"
|
||||
#, fuzzy
|
||||
msgid "Tab Key"
|
||||
msgstr "Clirio"
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "Up Arrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 1"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
msgid "X Button 2"
|
||||
msgstr ""
|
||||
|
||||
#: src/client/keycode.cpp
|
||||
#, fuzzy
|
||||
msgid "Zoom Key"
|
||||
msgstr "Chwyddo"
|
||||
|
||||
#: src/client/minimap.cpp
|
||||
msgid "Minimap hidden"
|
||||
msgstr ""
|
||||
@@ -2483,12 +2435,11 @@ msgstr ""
|
||||
msgid ""
|
||||
"3D support.\n"
|
||||
"Currently supported:\n"
|
||||
"- none: no 3d output.\n"
|
||||
"- anaglyph: cyan/magenta color 3d.\n"
|
||||
"- interlaced: odd/even line based polarization screen support.\n"
|
||||
"- topbottom: split screen top/bottom.\n"
|
||||
"- sidebyside: split screen side by side.\n"
|
||||
"- crossview: Cross-eyed 3d"
|
||||
"- none: no 3D output\n"
|
||||
"- anaglyph: cyan/magenta color 3D\n"
|
||||
"- topbottom: split screen top/bottom\n"
|
||||
"- sidebyside: split screen side-by-side\n"
|
||||
"- crossview: cross-eyed 3D"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
@@ -2810,6 +2761,17 @@ msgstr ""
|
||||
msgid "Camera smoothing in cinematic mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Capture Tracy zones"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid ""
|
||||
"Capture Tracy zones with the profiler's instrumentation.\n"
|
||||
"You need to build with Tracy to use this, see doc/developing/profiling.md\n"
|
||||
"for details."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Cave noise"
|
||||
msgstr ""
|
||||
@@ -3291,6 +3253,10 @@ msgstr ""
|
||||
msgid "Developer Options"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disable if you only want to instrument with Tracy."
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Disallow empty passwords"
|
||||
msgstr ""
|
||||
@@ -4974,6 +4940,10 @@ msgstr ""
|
||||
msgid "Maximum users"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Measure time samples"
|
||||
msgstr ""
|
||||
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "Message of the day"
|
||||
msgstr ""
|
||||
@@ -6848,3 +6818,30 @@ msgstr ""
|
||||
#: src/settings_translation_file.cpp
|
||||
msgid "cURL parallel limit"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Apiau"
|
||||
|
||||
#~ msgid "End"
|
||||
#~ msgstr "End"
|
||||
|
||||
#~ msgid "Execute"
|
||||
#~ msgstr "Cyflawni"
|
||||
|
||||
#~ msgid "Help"
|
||||
#~ msgstr "Cymorth"
|
||||
|
||||
#~ msgid "Home"
|
||||
#~ msgstr "Home"
|
||||
|
||||
#~ msgid "Select"
|
||||
#~ msgstr "Select"
|
||||
|
||||
#~ msgid "Sleep"
|
||||
#~ msgstr "Cysgu"
|
||||
|
||||
#~ msgid "Snapshot"
|
||||
#~ msgstr "Sgrinlun"
|
||||
|
||||
#~ msgid "Tab"
|
||||
#~ msgstr "Tab"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user